This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:TI C/C++编译器
您好,
我在编译wolfsl库时遇到了问题。 在函数wc_AesDecrypt中有如下代码:
#define GETBYTE (x,y)(word32)((字节)((x)>>(8 *(y))))
…
静态连接字节TD4[256]={…}
…
S0 =
(((word32)TD4[GETBYTE(t0,3)]<<24)^
(((word32)TD4[GETBYTE(T3, 2)]<16)^
(((word32)TD4[GETBYTE(T2, 1)]<8) ^
(((word32)TD4[GETBYTE(T1, 0)]^
RK[0];
编译是按顺序完成的,但应用程序崩溃。 问题似乎是在GETBYTE宏中,表达式的结果未正确裁剪为byte,因此TD字段的索引超出边界。 如果宏被((x)>>(8 *(y))和0xFF)替换,一切都正常。
我尝试了编译器TMS470_TMS7 4.9 ,5.2 9和16.9 3,结果相同。 C64+ DSP编译器工作正常。
请告诉我什么错了。
谢谢
Jiri
请按照文章 How to Submit a Compiler Test Case中的说明提供测试用例。 此外,指明包含宏GETBYTE使用问题的函数的名称。
谢谢,此致,
-George
我附加了两个文件,一个是预处理的C源文件,另一个是生成的ASM输出文件,其中有标记的行,表明该文件已崩溃(查找!!! 符号)。
代码由 TMS470_TMS7通过以下开关生成:4.9
cl470.exe -c -fe AES.obj -DMODEL_type=model_type_ACCESSUNIT --verbose_diagnostics --abi=eabi --lessment_ansi --gen_func_sections.
=ON -DTIARM -D__TIARM__-MV=5e --litte_endian --code_state=32 -O3 --symdebug:dwarf ../..//_lib/wolfssl/wolfcrypt/src/AES.c -k -al -ss
感谢你的帮助
Jirka