【问题标题】:GCC linker for ARM does not optimize symbol placementARM 的 GCC 链接器不优化符号放置
【发布时间】:2015-11-20 21:00:23
【问题描述】:

当我在编译后检查内存映射时,我可以看到 DATA 或 BSS 部分中的符号没有以优化的方式排序,它们的大小和 CPU 对齐访问限制。

例如,我最终得到的结果是:

address  size   name
0x1000      1   var_a
0x1004      4   var_b
0x1008      1   var_c
0x100a      2   var_d
0x100c      4   var_e
0x1010      1   var_f
0x1014      4   var_g
0x1018      0   end

而不是得到:

0x1000      4   var_b
0x1004      4   var_e
0x1008      4   var_g
0x100c      2   var_d
0x100e      1   var_a
0x100f      1   var_c
0x1010      1   var_f
0x1011      0   end

然而,我可以看到所有符号都被混淆了,并且与它们在源代码或编译过程中的顺序无关。

我正在使用选项-Os-flto-flto-fuse-linker-plugin-flto-report-flto-compression-level=9。 ARM 的 GCC 是 arm-none-eabi-gcc v4.8.3,来自 https://launchpad.net/gcc-arm-embeddedld 是 v2.23.2。

ld 不进行此优化是否有任何相关原因?如何重新排序符号以提高内存使用率?

【问题讨论】:

    标签: gcc linker arm ld compiler-optimization


    【解决方案1】:

    这可以通过链接描述文件中的 SORT_BY_ALIGNMENT 来完成,例如:

    *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.data*)))
    

    还有以下选项,虽然我没有尝试过:

    --sort-common [=ascending|descending]
        Sort common symbols by alignment [in specified order]
     --sort-section name|alignment
        Sort sections by name or maximum alignment
    

    【讨论】:

      猜你喜欢
      • 2013-10-26
      • 2019-05-18
      • 2017-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多