diff options
| author | Alexey Samsonov <vonosmas@gmail.com> | 2015-05-19 20:29:28 +0000 |
|---|---|---|
| committer | Alexey Samsonov <vonosmas@gmail.com> | 2015-05-19 20:29:28 +0000 |
| commit | bf19a578e602d65d6d6ccc58586c41958a29b184 (patch) | |
| tree | 8314f6d236a9004d2a7e12aaaf0165bb36205829 /llvm/test | |
| parent | f999547d11249ff13853683d5ca63383593ef4fd (diff) | |
| download | bcm5719-llvm-bf19a578e602d65d6d6ccc58586c41958a29b184.tar.gz bcm5719-llvm-bf19a578e602d65d6d6ccc58586c41958a29b184.zip | |
[DWARF parser] Add basic support for DWZ DWARF multifile extensions.
This change implements basic support for DWARF alternate sections
proposal: http://www.dwarfstd.org/ShowIssue.php?issue=120604.1&type=open
LLVM tools now understand new forms: DW_FORM_GNU_ref_alt and
DW_FORM_GNU_strp_alt, which are used as references to .debug_info and
.debug_str sections respectively, stored in a separate file, and
possibly shared between different executables / shared objects.
llvm-dwarfdump and llvm-symbolizer don't yet know how to access this
alternate debug file (usually pointed by .gnu_debugaltlink section),
but they can at lease properly parse and dump regular files, which
refer to it.
This change should fix crashes of llvm-dwarfdump and llvm-symbolizer on
files produced by running "dwz" tool. Such files are already installed
on some modern Linux distributions.
llvm-svn: 237721
Diffstat (limited to 'llvm/test')
| -rwxr-xr-x | llvm/test/DebugInfo/Inputs/dwarfdump-test-dwz.elf-x86-64 | bin | 0 -> 9399 bytes | |||
| -rw-r--r-- | llvm/test/DebugInfo/Inputs/dwarfdump-test.cc | 6 | ||||
| -rw-r--r-- | llvm/test/DebugInfo/Inputs/dwarfdump-test.elf-x86-64.dwz | bin | 0 -> 1026 bytes | |||
| -rw-r--r-- | llvm/test/DebugInfo/dwarfdump-dwz.test | 14 |
4 files changed, 20 insertions, 0 deletions
diff --git a/llvm/test/DebugInfo/Inputs/dwarfdump-test-dwz.elf-x86-64 b/llvm/test/DebugInfo/Inputs/dwarfdump-test-dwz.elf-x86-64 Binary files differnew file mode 100755 index 00000000000..937961b59be --- /dev/null +++ b/llvm/test/DebugInfo/Inputs/dwarfdump-test-dwz.elf-x86-64 diff --git a/llvm/test/DebugInfo/Inputs/dwarfdump-test.cc b/llvm/test/DebugInfo/Inputs/dwarfdump-test.cc index 40899986490..14295d3cffa 100644 --- a/llvm/test/DebugInfo/Inputs/dwarfdump-test.cc +++ b/llvm/test/DebugInfo/Inputs/dwarfdump-test.cc @@ -21,3 +21,9 @@ int main() { // $ cp dwarfdump-test.cc /tmp/dbginfo // $ cd /tmp/dbginfo // $ clang++ -g dwarfdump-test.cc -o <output> + +// The result is also used as an input to .dwz tool: +// $ cp <output> output1.dwz +// $ cp <output> output2.dwz +// $ dwz -m output.dwz -r output1.dwz output2.dwz +// $ rm output2.dwz diff --git a/llvm/test/DebugInfo/Inputs/dwarfdump-test.elf-x86-64.dwz b/llvm/test/DebugInfo/Inputs/dwarfdump-test.elf-x86-64.dwz Binary files differnew file mode 100644 index 00000000000..32db372fcda --- /dev/null +++ b/llvm/test/DebugInfo/Inputs/dwarfdump-test.elf-x86-64.dwz diff --git a/llvm/test/DebugInfo/dwarfdump-dwz.test b/llvm/test/DebugInfo/dwarfdump-dwz.test new file mode 100644 index 00000000000..e5f67ebe487 --- /dev/null +++ b/llvm/test/DebugInfo/dwarfdump-dwz.test @@ -0,0 +1,14 @@ +; RUN: llvm-dwarfdump %p/Inputs/dwarfdump-test-dwz.elf-x86-64 -debug-dump=info | FileCheck %s -check-prefix DUMP_INFO + +; DUMP_INFO: .debug_info +; DUMP_INFO: DW_TAG_compile_unit [2] * +; DUMP_INFO-NEXT: DW_AT_producer [DW_FORM_GNU_strp_alt] (alt indirect string, offset: 0x0) +; DUMP_INFO-NEXT: DW_AT_language [DW_FORM_data2] (DW_LANG_C_plus_plus) +; DUMP_INFO-NEXT: DW_AT_name [DW_FORM_GNU_strp_alt] (alt indirect string, offset: 0x31) +; DUMP_INFO-NEXT: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) +; DUMP_INFO-NEXT: DW_AT_stmt_list [DW_FORM_data4] (0x00000000) +; DUMP_INFO-NEXT: DW_AT_comp_dir [DW_FORM_GNU_strp_alt] (alt indirect string, offset: 0x6b) + +; DUMP_INFO: DW_TAG_imported_unit [4] +; DUMP_INFO-NEXT: DW_AT_import [DW_FORM_GNU_ref_alt] (<alt 0xb>) + |

