为什么没有 DWARF 信息?
Why there is no DWARF info?
我正在使用以下命令将源文件(hello.c) 编译成可执行文件(hello),并希望转储出可执行文件的DWARF 信息。但是,无论使用 "readelf -wi hello" 还是 "llvm-dwarfdump hello" 都没有 DWARF 信息。我想知道哪里出了问题。
clang-3.5 -gdwarf-4 -O0 -emit-llvm -c hello.c -o hello.bc
llc -dwarf-version=4 -O0 -filetype=obj hello.bc
gcc hello.o -o hello
问题是由于clang和llvm不匹配造成的。我正在使用 llvm-3.9 和 clang-3.5。我通过将 clang-3.5 升级到 clang-3.9 解决了这个问题。具体来说,我将 clang-3.9 添加到 llvm_src/tools 然后重新编译 llvm.
我用 clang-5.0 尝试了相同的命令,gcc-6.4.0 似乎对我有用。
$ llvm-dwarfdump hello | more
hello: file format ELF64-x86-64
.debug_abbrev contents:
Abbrev table for offset: 0x00000000
[1] DW_TAG_compile_unit DW_CHILDREN_yes
DW_AT_producer DW_FORM_strp
DW_AT_language DW_FORM_data2
. . .
$ readelf -wi hello | more
Contents of the .debug_info section:
Compilation Unit @ offset 0x0:
Length: 0x75 (32-bit)
Version: 4
Abbrev Offset: 0x0
Pointer Size: 8
<0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
. . .
我正在使用以下命令将源文件(hello.c) 编译成可执行文件(hello),并希望转储出可执行文件的DWARF 信息。但是,无论使用 "readelf -wi hello" 还是 "llvm-dwarfdump hello" 都没有 DWARF 信息。我想知道哪里出了问题。
clang-3.5 -gdwarf-4 -O0 -emit-llvm -c hello.c -o hello.bc
llc -dwarf-version=4 -O0 -filetype=obj hello.bc
gcc hello.o -o hello
问题是由于clang和llvm不匹配造成的。我正在使用 llvm-3.9 和 clang-3.5。我通过将 clang-3.5 升级到 clang-3.9 解决了这个问题。具体来说,我将 clang-3.9 添加到 llvm_src/tools 然后重新编译 llvm.
我用 clang-5.0 尝试了相同的命令,gcc-6.4.0 似乎对我有用。
$ llvm-dwarfdump hello | more
hello: file format ELF64-x86-64
.debug_abbrev contents:
Abbrev table for offset: 0x00000000
[1] DW_TAG_compile_unit DW_CHILDREN_yes
DW_AT_producer DW_FORM_strp
DW_AT_language DW_FORM_data2
. . .
$ readelf -wi hello | more
Contents of the .debug_info section:
Compilation Unit @ offset 0x0:
Length: 0x75 (32-bit)
Version: 4
Abbrev Offset: 0x0
Pointer Size: 8
<0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
. . .