From ec47b32a85294af959457ad19bd98dd13f6389fd Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 23 Sep 2020 16:31:14 +0200 Subject: [PATCH] binutils: Handle DWARF5 DW_FORM_ref_addr and DW_UT_partial. dwz in DWARF5 mode might produce DW_UT_partial unit types, which are the same as DW_UT_compile unit types (but start with a DW_TAG_partial_unit) and it might produce DW_FORM_ref_addr to create a reference between units. Accept both constructs. binutils/ChangeLog: * dwarf.c (read_and_display_attr_value): Handle DW_FORM_ref_addr for dwarf_version 5 just as version 3 and 4 (only 2 is different). (process_debug_info): Allow DW_UT_partial. --- binutils/ChangeLog | 7 +++++++ binutils/dwarf.c | 5 +++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index c871e17b3dc..8cd0fe0820f 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,10 @@ +2020-09-23 Mark Wielaard + + * dwarf.c (read_and_display_attr_value): Handle DW_FORM_ref_addr + for dwarf_version 5 just as version 3 and 4 (only 2 is + different). + (process_debug_info): Allow DW_UT_partial. + 2020-09-24 Nick Clifton PR 26662 diff --git a/binutils/dwarf.c b/binutils/dwarf.c index 603169226d4..9e98794ad66 100644 --- a/binutils/dwarf.c +++ b/binutils/dwarf.c @@ -2202,10 +2202,10 @@ read_and_display_attr_value (unsigned long attribute, case DW_FORM_ref_addr: if (dwarf_version == 2) SAFE_BYTE_GET_AND_INC (uvalue, data, pointer_size, end); - else if (dwarf_version == 3 || dwarf_version == 4) + else if (dwarf_version > 2) SAFE_BYTE_GET_AND_INC (uvalue, data, offset_size, end); else - error (_("Internal error: DWARF version is not 2, 3 or 4.\n")); + error (_("Internal error: DW_FORM_ref_addr is not supported in DWARF version 1.\n")); break; @@ -3419,6 +3419,7 @@ process_debug_info (struct dwarf_section * section, } if (compunit.cu_unit_type != DW_UT_compile + && compunit.cu_unit_type != DW_UT_partial && compunit.cu_unit_type != DW_UT_type) { warn (_("CU at offset %s contains corrupt or " -- 2.30.2