[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
This commit is contained in:
Sourabh Singh Tomar 2020-04-13 01:35:05 +05:30
parent 161fc1d911
commit 85b49ecb78
3 changed files with 15 additions and 1 deletions

View 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 {

View 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);

View File

@ -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