【发布时间】:2017-12-20 23:32:51
【问题描述】:
我有一个简单的汇编文件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
为什么不删除调试符号?
【问题讨论】:
-
这些符号表示部分的名称。这就是为什么
strip不会摆脱它们的原因。它们不是调试符号。 -
谢谢。知道为什么会设置
d位标志吗? -
我不太了解 GNU binutils,无法回答这个问题。
-
大概内核(以及扩展的调试器)需要知道代码(.text)和数据(.data .bss)部分的位置,因此它们不会被剥离。
标签: gcc assembly arm gnu-assembler