[PATCH] Ignore DWARF debug information for -gsplit-dwarf with dwarf-5.

Potharla, Rupesh Rupesh.Potharla@amd.com
Thu Sep 29 16:39:38 GMT 2022


[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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Ignore-DWARF-debug-information-for-gsplit-dwarf-with.patch
Type: application/octet-stream
Size: 1424 bytes
Desc: 0001-Ignore-DWARF-debug-information-for-gsplit-dwarf-with.patch
URL: <https://sourceware.org/pipermail/binutils/attachments/20220929/d78a6218/attachment-0001.obj>


More information about the Binutils mailing list