【问题标题】:ARM GNU GCC trying to zero out the .bss sectionARM GNU GCC 试图将 .bss 部分归零
【发布时间】:2013-10-21 18:56:02
【问题描述】:

我有问题,

ARM GNU GCC 正在尝试将 .bss 部分“归零”,我不希望它这样做,因为我的启动代码已经这样做了。由于这个原因,最终的图像大小增加了用零填充的 bss 大小。

我已经在 bss 部分的链接器脚本中使用 NOLOAD 并在 gcc 的 CFLAGS 中使用 -fno-zero-initialized-in-bss

我如何告诉 ARM GNU GCC 不要将该部分归零?我错过了什么吗?

【问题讨论】:

  • 查找并用您自己的引导代码替换,和/或让现有的引导代码为零 bss(并复制 .data 等)。
  • 我使用 -nostdlib -nostartfiles -ffreestanding 并创建自己的 C 引导代码。

标签: gcc linker arm elf segments


【解决方案1】:

这是直接来自 ARM 的答案:How to prevent uninitialized data from being initialized to zero

您可以通过将未初始化的数据放在不同的部分中来防止将未初始化的数据初始化为零。这可以使用#pragma arm section 或使用 GNU 编译器扩展 attribute((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

【讨论】:

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