我相信这个问题与其他类似问题有很大不同。
我的流程大致是这样的:
### 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
都显示调试部分中有大量字节。更具体地说,我在寻找什么?