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.

[参考译文] 编译器:用于 ARM cortex A15的 Linaro 工具(在 TDA2xx 上)

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/787408/compiler-linaro-tools-for-arm-cortex-a15-on-tda2xx

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

您好!

我们(根据 TI 的建议)使用 gcc-arm-none-eabi-4_9-2015q3 linaro 工具来构建(编译和链接) ARM cortex A15内核(在 TDA2xx 上)。

我们在代码中定义了一些大型全局数组,这些数组被分配给特定段(attribute ((section...)),这些段被定义为 NoLoad 段。

结果的可执行文件(ELF 文件)大小很小、这与阵列非常大的事实相对应、因为段是空载段、因此它们不会进入映像文件。

问题是、我们注意到具有这些数组定义的源的目标文件的大小很大、并且编译器似乎使用对应于数组大小的零来填充目标文件、这会导致一个非常大的文件。

尽管这不会影响最终映像(ELF 文件)、但考虑到这些结果目标文件的大小、仍然存在很大的问题。

到目前为止、我无法找到更改此编译器行为的方法、如果您能帮助解决此问题、我将不胜感激。

(B.T.W -使用 TI 编译器工具(例如用于 M4内核)、我们在数组定义方式相同的情况下不会出现这种现象)

谢谢

家伙

谢谢

家伙

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

    我可以重现问题。  我找不到一种方法来避免较大的目标文件大小。  因此、我向 Linaro 支持团队提出了一个问题、该团队提供此 GCC ARM 编译器。  不幸的是,没有公众对这个问题的看法。  当我得到响应时、我会将其发布在这里。

    谢谢、此致、

    乔治

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

    感谢 Linaro 的同事提出此变通办法。  使该数组成为.bss 的子段。  例如..

    int array[10000]__attribute__((section(".bss.array_section_name"))); 

    对于可能关注此主题的其他人... 您可以对 TI ARM 编译器执行类似的操作。  但是,section 属性的字符串参数有轻微的差异...

    int array[10000]__attribute__((section(".bss:array_section_name")); 

    请注意、在.bss 之后、有一个冒号(:)、而不是一个点(。) 。

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢、这种"技巧"确实对我们很有用。

    B.T.W
    由于 TI 编译器似乎不存在此问题,因此需要对 TI 编译器和使用:语法。 语法仍可用于在 TI 编译的内核和 Linaro 编译的内核之间使用通用源文件。
    您是否发现此问题?

    谢谢
    家伙