2013-10-21 63 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