ARM GNU GCC试图将.bss部分归零

ARM GNU GCC试图将.bss部分归零,gcc,linker,arm,elf,segments,Gcc,Linker,Arm,Elf,Segments,我有个问题 ARM GNU GCC正在尝试将.bss部分“归零”,我不希望它这样做,因为我的启动代码已经这样做了。因此,最终图像大小将增加bss大小,并填充零 我已经在bss部分的链接器脚本中使用了NOLOAD,并且在bss中初始化了-fno-zero,作为gcc的CFLAGS的一部分 我如何告诉ARM GNU GCC不要将该部分归零?我遗漏了什么吗?以下是ARM直接给出的答案: 通过将未初始化的数据放在不同的节中,可以防止将该数据初始化为零。这可以通过使用#pragma arm节或GNU编译器

我有个问题

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

我已经在bss部分的链接器脚本中使用了
NOLOAD
,并且在bss中初始化了
-fno-zero,作为gcc的CFLAGS的一部分


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

以下是ARM直接给出的答案:

通过将未初始化的数据放在不同的节中,可以防止将该数据初始化为零。这可以通过使用#pragma arm节或GNU编译器扩展属性((节(“名称”))来实现


查找并用自己的引导代码替换引导代码,和/或让现有引导代码为零bss(和copy.data等)。我使用-nostlib-nostartfiles-f重建并创建自己的C引导代码。
#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