From 85b49ecb78f1de685e553d00aa3c661e4505afc0 Mon Sep 17 00:00:00 2001 From: Sourabh Singh Tomar Date: Mon, 13 Apr 2020 01:35:05 +0530 Subject: [PATCH] [DWARF5]: Added support for DW_MACRO_import form in llvm-dwarfdump GCC emits this new form along with others forms(supported in llvm-dwardump) and since it's support was missing in llvm-dwarfdump, it was not able to correctly dump the content a debug_macro section for GCC generated binaries. This patch extends llvm-dwarfdump to support this form, now GCC generated debug_macro section can be correctly dumped using llvm-dwarfdump. Reviewed By: dblaikie Differential Revision: https://reviews.llvm.org/D78006 --- llvm/include/llvm/DebugInfo/DWARF/DWARFDebugMacro.h | 2 ++ llvm/lib/DebugInfo/DWARF/DWARFDebugMacro.cpp | 7 +++++++ llvm/test/DebugInfo/X86/debug-macro-v5.s | 7 ++++++- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/llvm/include/llvm/DebugInfo/DWARF/DWARFDebugMacro.h b/llvm/include/llvm/DebugInfo/DWARF/DWARFDebugMacro.h index 9d60cdc..f32391b 100644 --- a/llvm/include/llvm/DebugInfo/DWARF/DWARFDebugMacro.h +++ b/llvm/include/llvm/DebugInfo/DWARF/DWARFDebugMacro.h @@ -69,6 +69,8 @@ class DWARFDebugMacro { uint64_t Line; /// Vendor extension constant value. uint64_t ExtConstant; + /// Macro unit import offset. + uint64_t ImportOffset; }; union { diff --git a/llvm/lib/DebugInfo/DWARF/DWARFDebugMacro.cpp b/llvm/lib/DebugInfo/DWARF/DWARFDebugMacro.cpp index 09238e3..005ae2b 100644 --- a/llvm/lib/DebugInfo/DWARF/DWARFDebugMacro.cpp +++ b/llvm/lib/DebugInfo/DWARF/DWARFDebugMacro.cpp @@ -69,6 +69,9 @@ void DWARFDebugMacro::dump(raw_ostream &OS) const { OS << " - lineno: " << E.Line; OS << " filenum: " << E.File; break; + case DW_MACRO_import: + OS << format(" - import offset: 0x%08" PRIx64, E.ImportOffset); + break; case DW_MACRO_end_file: break; case DW_MACINFO_vendor_ext: @@ -146,6 +149,10 @@ Error DWARFDebugMacro::parse(DataExtractor StringExtractor, break; case DW_MACRO_end_file: break; + case DW_MACRO_import: + // FIXME: Add support for DWARF64 + E.ImportOffset = Data.getRelocatedValue(/*OffsetSize=*/4, &Offset); + break; case DW_MACINFO_vendor_ext: // 2. Vendor extension constant E.ExtConstant = Data.getULEB128(&Offset); diff --git a/llvm/test/DebugInfo/X86/debug-macro-v5.s b/llvm/test/DebugInfo/X86/debug-macro-v5.s index b4e5772..00b2ced 100644 --- a/llvm/test/DebugInfo/X86/debug-macro-v5.s +++ b/llvm/test/DebugInfo/X86/debug-macro-v5.s @@ -12,9 +12,10 @@ # CHECK-NEXT: DW_MACRO_define_strp - lineno: 1 macro: FOO 5 # CHECK-NEXT: DW_MACRO_end_file # CHECK-NEXT: DW_MACRO_undef_strp - lineno: 8 macro: WORLD1 +# CHECK-NEXT: DW_MACRO_import - import offset: 0x[[OFFSET:[0-9]+]] # CHECK-NEXT:DW_MACRO_end_file -# CHECK:0x{{.*}}: +# CHECK:0x[[OFFSET]]: # CHECK-NEXT:macro header: version = 0x0005, flags = 0x00 # CHECK-NEXT:DW_MACRO_define_strp - lineno: 0 macro: WORLD 2 @@ -36,8 +37,12 @@ .byte 6 # DW_MACRO_undef_strp .byte 8 # Line Number .long .Linfo_string1 # Macro String + .byte 7 # DW_MACRO_import + .long .Lmacro1 # Macro Unit Offset .byte 4 # DW_MACRO_end_file .byte 0 # End Of Macro List Mark + +.Lmacro1: .short 5 # Macro information version .byte 0 # Flags: 32 bit .byte 5 # DW_MACRO_define_strp -- 2.7.4