[llvm] 71aaebc - [DWARF5][DWARFVerifier] Check that Skeleton compilation unit does not have children.

Alexey Lapshin via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 11 23:59:50 PST 2019


Author: Alexey Lapshin
Date: 2019-12-12T10:59:10+03:00
New Revision: 71aaebc82468c8982b6d80bb35cbafed6dea91cc

URL: https://github.com/llvm/llvm-project/commit/71aaebc82468c8982b6d80bb35cbafed6dea91cc
DIFF: https://github.com/llvm/llvm-project/commit/71aaebc82468c8982b6d80bb35cbafed6dea91cc.diff

LOG: [DWARF5][DWARFVerifier] Check that Skeleton compilation unit does not have children.

  That patch adds checking into DWARFVerifier that the Skeleton
compilation unit does not have children.

Differential Revision: https://reviews.llvm.org/D71244

Added: 
    llvm/test/DebugInfo/X86/skeleton-unit-verify.s

Modified: 
    llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp b/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp
index a8f95043fc85..42e688cc39ba 100644
--- a/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp
+++ b/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp
@@ -196,6 +196,14 @@ unsigned DWARFVerifier::verifyUnitContents(DWARFUnit &Unit) {
     NumUnitErrors++;
   }
 
+  //  According to DWARF Debugging Information Format Version 5,
+  //  3.1.2 Skeleton Compilation Unit Entries:
+  //  "A skeleton compilation unit has no children."
+  if (Die.getTag() == dwarf::DW_TAG_skeleton_unit && Die.hasChildren()) {
+    error() << "Skeleton compilation unit has children.\n";
+    NumUnitErrors++;
+  }
+
   DieRangeInfo RI;
   NumUnitErrors += verifyDieRanges(Die, RI);
 

diff  --git a/llvm/test/DebugInfo/X86/skeleton-unit-verify.s b/llvm/test/DebugInfo/X86/skeleton-unit-verify.s
new file mode 100644
index 000000000000..d990d918cef6
--- /dev/null
+++ b/llvm/test/DebugInfo/X86/skeleton-unit-verify.s
@@ -0,0 +1,47 @@
+# RUN: llvm-mc -triple x86_64-unknown-linux %s -filetype=obj -o %t.o
+# RUN: not llvm-dwarfdump --verify %t.o | FileCheck %s
+
+# CHECK: Verifying .debug_abbrev...
+# CHECK-NEXT: Verifying .debug_info Unit Header Chain...
+# CHECK-NEXT: error: Skeleton compilation unit has children.
+# CHECK-NEXT: Verifying .debug_info references...
+# CHECK-NEXT: Verifying .debug_types Unit Header Chain...
+# CHECK-NEXT: Errors detected.
+
+        .section .debug_abbrev,"", at progbits
+        .byte   1                       # Abbreviation Code
+        .byte   74                      # DW_TAG_skeleton_unit
+        .byte   0                       # DW_CHILDREN_no
+        .byte   0                       # EOM(1)
+        .byte   0                       # EOM(2)
+        .byte   2                       # Abbreviation Code
+        .byte   74                      # DW_TAG_skeleton_unit
+        .byte   1                       # DW_CHILDREN_yes
+        .byte   0                       # EOM(1)
+        .byte   0                       # EOM(2)
+        .byte   0                       # EOM(3)
+
+        .section        .debug_info,"", at progbits
+.Lcu_begin0:
+        .long   .Lcu_end0-.Lcu_start0 # Length of Unit
+.Lcu_start0:
+        .short  5                       # DWARF version number
+        .byte   4                       # DWARF Unit Type
+        .byte   8                       # Address Size (in bytes)
+        .long   .debug_abbrev           # Offset Into Abbrev. Section
+        .quad   -6573227469967412476
+        .byte   1                       # Abbrev [1] 
+        .byte   0
+.Lcu_end0:
+        .long   .Lcu_end1-.Lcu_start1 # Length of Unit
+.Lcu_start1:
+        .short  5                       # DWARF version number
+        .byte   4                       # DWARF Unit Type
+        .byte   8                       # Address Size (in bytes)
+        .long   .debug_abbrev           # Offset Into Abbrev. Section
+        .quad   -6573227469967412476
+        .byte   2                       # Abbrev [2]
+        .byte   0
+.Lcu_end1:
+
+


        


More information about the llvm-commits mailing list