gcc/objdump 输出包含来自 C 源代码行的反汇编 ASM 代码行

问题描述 投票:0回答:0

我相信这个问题与其他类似问题有很大不同。

我的流程大致是这样的:

### Compile
%> gcc -ggdb3 file0.c ... -fno-builtin -c -o file0.o
%> gcc -ggdb3 file1.c ... -fno-builtin -c -o file1.o
...
%> gcc -ggdb3 fileN.c ... -fno-builtin -c -o fileN.o
### Link
%> gcc -ggdb3 -nostdlib -nodefaultlibs -Tscript.lds -Ttext=0x4000000 \
          -Wl,--build-id=none -o main.elf file0.o file1.o ... fileN.o
### Disassemble
%> objdump -Stsxd main.elf > main.dis

我没有看到

objdump
生成的反汇编文件行之间的C代码。请参见下图的示例。

我不怪

objdump
,因为
objdump --dwarf=decodedline main.elf
什么都没有。我不认为信息是 in elf 文件。

  • 我已经摆弄添加
    -g
    -ggdb
    ,和
    -gdwarf
    的各种版本。
  • 我已经将完整路径名放在文件而不是相对路径中。
  • 我试过
    -O0
    -O3
    .
  • 我上面的流程中唯一没有显示的标志是
    -W
    -D
    -I
    标志。

如果重要的话,我正在使用针对 Cortex-A72 集群的 gcc 6.4.1 的 Linaro 端口。 (我的构建机器是 x86_64 上的 CentOS 7.9。)上面

gcc
objdump
的命令是使用该 gcc 版本的前缀,我在反汇编文件的 ELF 调试部分看到它的横幅。

是否有我遗漏的标志,或者我添加的东西(如

-fno-builtin
,或
-Wl,--build-id=none
)可能导致这种情况? 即使我提供了“调试”部分(对于
.debug_info
.debug_line
和许多其他部分),我的链接描述文件是否可以剥离所需的信息?
objdump
readelf
都显示调试部分中有大量字节。更具体地说,我在寻找什么?

编辑: 我希望看到这张图片左边的东西,但我看到的是右边的东西:

c gcc arm objdump
© www.soinside.com 2019 - 2024. All rights reserved.