[DWARF5]: Added support for DW_MACRO_import form in llvm-dwarfdump
authorSourabh Singh Tomar <SourabhSingh.Tomar@amd.com>
Sun, 12 Apr 2020 20:05:05 +0000 (01:35 +0530)
committerSourabh Singh Tomar <SourabhSingh.Tomar@amd.com>
Tue, 14 Apr 2020 18:21:46 +0000 (23:51 +0530)
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
llvm/lib/DebugInfo/DWARF/DWARFDebugMacro.cpp
llvm/test/DebugInfo/X86/debug-macro-v5.s

index 9d60cdc..f32391b 100644 (file)
@@ -69,6 +69,8 @@ class DWARFDebugMacro {
       uint64_t Line;
       /// Vendor extension constant value.
       uint64_t ExtConstant;
+      /// Macro unit import offset.
+      uint64_t ImportOffset;
     };
 
     union {
index 09238e3..005ae2b 100644 (file)
@@ -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);
index b4e5772..00b2ced 100644 (file)
 # 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
 
        .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