[PATCH] D75178: [DebugInfo] Fix parsing DWARF64 units in DWP.

Igor Kudrin via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Feb 28 01:04:43 PST 2020


This revision was automatically updated to reflect the committed changes.
Closed by commit rG7a9d00f261a5: [DebugInfo] Fix parsing DWARF64 units in DWP. (authored by ikudrin).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D75178/new/

https://reviews.llvm.org/D75178

Files:
  llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp
  llvm/test/DebugInfo/X86/dwp-dwarf64.s


Index: llvm/test/DebugInfo/X86/dwp-dwarf64.s
===================================================================
--- /dev/null
+++ llvm/test/DebugInfo/X86/dwp-dwarf64.s
@@ -0,0 +1,70 @@
+# RUN: llvm-mc -triple x86_64-unknown-linux %s -filetype=obj -o - | \
+# RUN:   llvm-dwarfdump -debug-info - | \
+# RUN:   FileCheck %s
+
+# CHECK:      .debug_info.dwo contents:
+
+# CHECK:      0x00000000: Compile Unit:
+# CHECK-SAME:   length = 0x00000018
+# CHECK-SAME:   version = 0x0004
+# CHECK-SAME:   abbr_offset = 0x0000
+# CHECK-SAME:   addr_size = 0x04
+
+# CHECK:      0x00000017: DW_TAG_compile_unit
+# CHECK-NEXT:   DW_AT_name ("a.c")
+# CHECK-NEXT:   DW_AT_GNU_dwo_id (0x1100001122222222)
+
+    .section .debug_abbrev.dwo, "e", @progbits
+.LAbbrBegin:
+    .uleb128 1                  # Abbreviation Code
+    .uleb128 17                 # DW_TAG_compile_unit
+    .byte 0                     # DW_CHILDREN_no
+    .uleb128 3                  # DW_AT_name
+    .uleb128 8                  # DW_FORM_string
+    .uleb128 0x2131             # DW_AT_GNU_dwo_id
+    .uleb128 7                  # DW_FORM_data8
+    .byte 0                     # EOM(1)
+    .byte 0                     # EOM(2)
+    .byte 0                     # EOM(3)
+.LAbbrEnd:
+
+    .section .debug_info.dwo, "e", @progbits
+.LCUBegin:
+    .long 0xffffffff            # DWARF64 mark
+    .quad .LCUEnd-.LCUVersion   # Length
+.LCUVersion:
+    .short 4                    # Version
+    .quad 0                     # Abbrev offset
+    .byte 4                     # Address size
+    .uleb128 1                  # Abbrev [1] DW_TAG_compile_unit
+    .asciz "a.c"                # DW_AT_name
+    .quad 0x1100001122222222    # DW_AT_GNU_dwo_id
+.LCUEnd:
+
+    .section .debug_cu_index, "", @progbits
+## Header:
+    .short 2                    # Version
+    .space 2                    # Padding
+    .long 2                     # Section count
+    .long 1                     # Unit count
+    .long 4                     # Slot count
+## Hash Table of Signatures:
+    .quad 0
+    .quad 0
+    .quad 0x1100001122222222
+    .quad 0
+## Parallel Table of Indexes:
+    .long 0
+    .long 0
+    .long 1
+    .long 0
+## Table of Section Offsets:
+## Row 0:
+    .long 1                     # DW_SECT_INFO
+    .long 3                     # DW_SECT_ABBREV
+# Row 1:
+    .long .LCUBegin-.debug_info.dwo     # Offset in .debug_info.dwo
+    .long .LAbbrBegin-.debug_abbrev.dwo # Offset in .debug_abbrev.dwo
+## Table of Section Sizes:
+    .long .LCUEnd-.LCUBegin
+    .long .LAbbrEnd-.LAbbrBegin
Index: llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp
===================================================================
--- llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp
+++ llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp
@@ -299,7 +299,8 @@
     if (AbbrOffset)
       return false;
     auto *UnitContrib = IndexEntry->getOffset();
-    if (!UnitContrib || UnitContrib->Length != (Length + 4))
+    if (!UnitContrib ||
+        UnitContrib->Length != (Length + getUnitLengthFieldByteSize()))
       return false;
     auto *AbbrEntry = IndexEntry->getOffset(DW_SECT_ABBREV);
     if (!AbbrEntry)


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D75178.247180.patch
Type: text/x-patch
Size: 3150 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200228/b2bbda5b/attachment.bin>


More information about the llvm-commits mailing list