【问题标题】:ARM: GNU GCC LInker bss section alignmentARM:GNU GCC 链接器 bss 部分对齐
【发布时间】:2013-10-29 18:20:32
【问题描述】:

我正在使用 GNU 链接器脚本,其中 bss 部分变量获得非 4 字节对齐地址,这是一个大问题,因为硬件正在使用变量地址,这需要字对齐地址。

如果我有 10 个变量,或者我想让链接器为特定部分中的每个变量生成字对齐地址,而不是使用其中一个的 align 属性,我该怎么做?

我尝试过使用ALIGN(),但没有任何效果。

这是一个例子:

 .bss.a 9cdf8        0x1

 .bss.b 9cdf9        0x1

对于.bss.b,我想获得0x9cdf8 + 4,所以对于所有变量。

我怎样才能做到这一点?

【问题讨论】:

  • 两种类型的alignment。一个用于输入部分,另一个用于输出部分。您必须在源文件中设置对齐方式。请参阅SORT_BY_ALIGNMENTSORT_BY_NAME,或者您可以指定每个文件。 .bss { foo.o(.bss); . = ALIGN(4); bar.o(.bss); }ALIGN 只是对齐当前的输出地址。

标签: c gcc linker arm


【解决方案1】:

您可能最好在定义它们的地方标记需要 4 字节对齐的变量。例如在 gcc 中:

char a __attribute__((aligned(4)));
char b __attribute__((aligned(4)));

http://gcc.gnu.org/onlinedocs/gcc-4.8.2/gcc/Variable-Attributes.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 2015-07-27
    相关资源
    最近更新 更多