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.

[参考译文] Compiler/AM1705:生成的代码可能不正确

Guru**** 1818760 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/600698/compiler-am1705-probably-badly-generated-code

部件号:AM1705

工具/软件: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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    word32是否已签名?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请按照文章 How to Submit a Compiler Test Case中的说明提供测试用例。  此外,指明包含宏GETBYTE使用问题的函数的名称。

    谢谢,此致,

    -George

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    两种类型(byte和word32)都是无符号的

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    不幸的是,我仍然无法再现这一问题。  请按照之前的请求提交测试案例。

    谢谢,此致,

    -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

    e2e.ti.com/.../2133.aes.pp.txt

    e2e.ti.com/.../aes.asm.txt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我现在正在看,但进展缓慢。 如果您能提供一个示例测试工具,这将非常有用;即,一个主函数,它在发生故障时使用相同的输入调用wc_AesCbcDecrypt。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否绝对确定ARM 16.9 Tm3提供了相同的错误结果? 我看到的代码与该版本非常不同
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    嗯,没关系。 我想我已经隔离了这个漏洞。 我已提交缺陷报告CodeGen-2320以跟踪问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很难进行样本测试,因为该片段是一个大代码段的一部分,不能被隔离。 的确,版本16.9 .................3生成了完全其他的代码,但它仍然不能生成。 不幸的是,我不能更深入地分析问题,因为我对ARM汇编程序的了解不多。