【问题标题】:Why doesn't "strip" remove these debug symbols?为什么不“剥离”删除这些调试符号?
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 谢谢。顺便说一句,我认为您的意思是 mysymbol1,是的,它不是调试符号,因此不会被剥离。
  • @donturner 啊,已修复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-21
  • 1970-01-01
  • 2016-10-18
  • 1970-01-01
相关资源
最近更新 更多