2017-07-16 85 views
2

我有一個簡單的組裝文件main.s其中包含:爲什麼「strip」不去除這些調試符號?

mysymbol1=1234

我使用下面的命令彙編成一個對象文件:

$ arm-none-eabi-as main.s -o main.o

現在我檢查符號表

$ arm-none-eabi-objdump -t main.o 

main.o:  file format elf32-littlearm 

SYMBOL TABLE: 
00000000 l d .text 00000000 .text 
00000000 l d .data 00000000 .data 
00000000 l d .bss 00000000 .bss 
000004d2 l  *ABS* 00000000 mysymbol1 
00000000 l d .ARM.attributes 00000000 .ARM.attributes 

我注意到d表示有調試符號包含,所以我跑:

$ arm-none-eabi-strip --strip-debug main.o

重新運行objdump顯示了調試符號沒有被刪除,雖然他們已經重新排序:

$ arm-none-eabi-objdump -t main.o 

main.o:  file format elf32-littlearm 

SYMBOL TABLE: 
000004d2 l  *ABS* 00000000 mysymbol1 
00000000 l d .text 00000000 .text 
00000000 l d .data 00000000 .data 
00000000 l d .bss 00000000 .bss 
00000000 l d .ARM.attributes 00000000 .ARM.attributes 

爲什麼AREN調試符號被刪除了嗎?

+0

這些符號表示節的名稱。這就是爲什麼'strip'不會擺脫它們的原因。它們不是調試符號。 – fuz

+0

謝謝。任何想法爲什麼是'd'位標誌被設置? – donturner

+0

我不知道GNU binutils足以回答這個問題。 – fuz

回答

2

.text,.data.bss不是調試符號 - 它們是內核正確執行它的文件段。 mysymbol1來自靜態符號表,因此不是debuginfo的一部分,所以它也不會在--strip-debug下剝離。

+0

謝謝。順便說一句,我認爲你的意思是'mysymbol1',是的,它不是一個調試符號,所以不會被剝離。 – donturner

+0

@donturner啊,修好了。 – yugr