2013-10-21 86 views
0

我有一个问题,ARM GNU GCC试图零出.bss段

ARM GNU GCC正在努力为“零” .bss段,我不希望它做它作为我的启动代码已经做到了。由于这个原因,最终的图像尺寸增加了以零填充的bss尺寸。

我已经在bss部分的链接描述文件中使用NOLOAD,作为gcc的CFLAGS的一部分,我使用了-fno-zero-initialized-in-bss

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

+0

发现并用自己的替换引导代码,和/或只是让现有的引导代码零BSS(和复制。数据等)。 –

+0

我使用-nostdlib -nostartfiles-创建自己的C bootstrap代码。 –

回答

0

下面是答案直接从ARM:How to prevent uninitialized data from being initialized to zero

您可以通过将数据在不同的部分防止被初始化为零未初始化的数据。这可以使用#pragma arm section或者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