为什么不“剥离”删除这些调试符号?

时间:2017-07-16 09:40:54

标签: gcc assembly arm gas

我有一个简单的汇编文件main.s,其中包含:

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

为什么不删除调试符号?

1 个答案:

答案 0 :(得分:2)

.text.data.bss不是调试符号 - 它们是内核用来正确执行它的文件段。 mysymbol1来自静态符号表,因此不是debuginfo的一部分,因此它也不会在--strip-debug下被删除。