[Public] Thanks Jan, I made the suggested changes. Can you review the latest code changes and send in your comments ? Inline Patch: Skip dwo_id for split dwarf. * dwarf2.c (parse_comp_unit): Skip DWO_id for DW_UT_skeleton. --- bfd/dwarf2.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/bfd/dwarf2.c b/bfd/dwarf2.c index 4a6a1e40185..028df77c4c2 100644 --- a/bfd/dwarf2.c +++ b/bfd/dwarf2.c @@ -4411,13 +4411,23 @@ parse_comp_unit (struct dwarf2_debug *stash, if (version < 5) addr_size = read_1_byte (abfd, &info_ptr, end_ptr); - if (unit_type == DW_UT_type) + switch (unit_type) { - /* Skip type signature. */ - info_ptr += 8; + case DW_UT_type: + /* Skip type signature. */ + info_ptr += 8; - /* Skip type offset. */ - info_ptr += offset_size; + /* Skip type offset. */ + info_ptr += offset_size; + break; + + case DW_UT_skeleton: + /* Skip DWO_id field. */ + info_ptr += 8; + break; + + default: + break; } if (addr_size > sizeof (bfd_vma)) @@ -4441,6 +4451,7 @@ parse_comp_unit (struct dwarf2_debug *stash, return NULL; } + /* Read the abbrevs for this compilation unit into a table. */ abbrevs = read_abbrevs (abfd, abbrev_offset, stash, file); if (! abbrevs) -- 2.25.1 Regards, Rupesh P >On 29.09.2022 17:54, Potharla, Rupesh wrote: >> .debug_info contents: >> 0x00000000: Compile Unit: length = 0x00000031, format = DWARF32, >> version = 0x0005, unit_type = DW_UT_skeleton, abbr_offset = 0x0000, >> addr_size = 0x08, DWO_id = 0xcd97775ca070a83c (next unit at >> 0x00000035) >> >> The issue is seen with both clang and gcc. Above is the Debug_info header >of a program compiled with gcc using -gsplit-dwarf and dwarf-5. >> There are two other fields(abbr_offset and addr_Size) after unit_type in the >header. Skipping the dwo_id field in the previous check of unit_type will not >fix the issue. > >According to the doc I'm looking at the headers for DW_UT_type and >DW_UT_skeleton agree up to the debug_abbrev_offset field. This matches the >code, which reads addr_size and abbrev_offset ahead of the DW_UT_type >conditional I was talking about. What's between that >if() and the one you're adding in your present patch is _precessing_ of >addr_size, but not fetching of it from the header. This is supported by the >intermediate code also not further touching info_ptr. > >Jan