我遇到了问题,
ARM GNU GCC 正在尝试将 .bss 部分"归零",我不希望它这样做,因为我的启动代码已经在这样做了。因此,最终图像大小由填充为零的 bss 大小增加。
我已经在 bss 部分的链接器脚本中使用NOLOAD
,-fno-zero-initialized-in-bss
作为 gcc 的 CFLAGS 的一部分。
我如何告诉 ARM GNU GCC 不要将那部分归零?我错过了什么吗?
以下是直接来自 ARM 的答案: 如何防止未初始化的数据初始化为零
通过将未初始化的数据放在其他部分中,可以防止该数据初始化为零。这可以使用 #pragma arm 部分或 GNU 编译器扩展属性((section("name")))来实现。
#pragma arm section zidata = “non_initialized”
int i, j; // uninitialized data in non_initialized section (without the pragma, would be in .bss section by default)
#pragma arm section zidata // back to default (.bss section)
int k = 0, l = 0; // zero-initialized data in .bss section