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.

[参考译文] 编译器:构造函数属性和palign的段错误(8)

Guru**** 2578945 points
Other Parts Discussed in Thread: TMS570LS0914

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/599971/compiler-segmentation-fault-for-constructor-attribute-and-palign-8

主题中讨论的其它部件:TMS570LS0914

工具/软件:TI C/C++编译器

您好!

link.cmd文件中的palign (8)与.init_array部分不兼容。 如何再现:

使用  _attribute_((***)创建具有一个(或任意奇数)函数的程序。 这将导致创建.init_array部分。

在link.cmd文件中,为.init_array部分指定palign (8)。 对于示例- .init_array > flash,palign (8),fill = 0xffffffff

使用MAP文件编译。 检查映射文件。 您可以看到.init_array 分配的8个字节。 检查映射文件中的SHT$$init_array$Base和SHT$init_array$$limit符号。 符号之间的差异必须为4个字节(functions_count*4),但实际差异=8。  sh$init_array$limit不指向init_array数据的末尾,而指向段的末尾(包括填充0xFFFFFFFF)。 当应用程序启动并调用Pinit run_Pinit函数时,代码尝试迭代构造函数。 在第一个称为的真实构造函数中,后来在0xFFFFFFFF中称为函数-挂起!

我使用paling属性计算代码CRC32。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您使用的是什么架构? C6x? 布防?
    您使用的是哪个版本的编译器? (这与CCS版本不同。)
    这是我第一次听说此属性,我不确定TI编译器是否支持它。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我在17.3 TMS570LS0914上使用TI ARM Linker PC v.0.LTS和TI ARM Linker v PC 16.9 3 (STS)重现问题。 我的意思是这个问题与链接器有关。

    manual中提到的构造函数属性(ARM Optimizing C/C++ Compiler 17.3 v.0.sts)

    5.16 Tm2功能属性
    支持以下GCC函数属性:

    •构造函数

    void const_test (void);
    
    static int val = 0;
    __attribute__((构造函数)) void const_test (void){
    Val = 10;
    }
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    太棒了! 正确,属性构造函数是在2010年左右添加的。 我也重现了错误。 我已提交CodeGen-2286来解决此问题。