summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonas Devlieghere <jonas@devlieghere.com>2017-09-28 15:57:50 +0000
committerJonas Devlieghere <jonas@devlieghere.com>2017-09-28 15:57:50 +0000
commit35fdaa94f7fae76bb8dc905e16f2a4fcef8ed34e (patch)
tree2e5dedbb3ca26507e92109dd61f7c8cfc7a82c25
parent2ff339303ee04f1a454fe521e29f540cc09a7f63 (diff)
downloadbcm5719-llvm-35fdaa94f7fae76bb8dc905e16f2a4fcef8ed34e.tar.gz
bcm5719-llvm-35fdaa94f7fae76bb8dc905e16f2a4fcef8ed34e.zip
[dwarfdump] Verify that CUs have a unit DIE.
This patch adds a check to the DWARF verifier to detect CUs without a unit DIE. Differential revision: https://reviews.llvm.org/D38363 llvm-svn: 314426
-rw-r--r--llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp11
-rw-r--r--llvm/test/tools/llvm-dwarfdump/X86/empty-CU.s21
2 files changed, 29 insertions, 3 deletions
diff --git a/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp b/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp
index 096d5ff8c33..eadb982ba72 100644
--- a/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp
+++ b/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp
@@ -179,9 +179,14 @@ bool DWARFVerifier::verifyUnitContents(DWARFUnit Unit) {
}
}
- DieRangeInfo RI;
- DWARFDie Die = Unit.getUnitDIE(/* ExtractUnitDIEOnly = */ false);
- NumUnitErrors += verifyDieRanges(Die, RI);
+ if (DWARFDie Die = Unit.getUnitDIE(/* ExtractUnitDIEOnly = */ false)) {
+ DieRangeInfo RI;
+ NumUnitErrors += verifyDieRanges(Die, RI);
+ } else {
+ OS << "error: Compilation unit without unit DIE.\n";
+ NumUnitErrors++;
+ }
+
return NumUnitErrors == 0;
}
diff --git a/llvm/test/tools/llvm-dwarfdump/X86/empty-CU.s b/llvm/test/tools/llvm-dwarfdump/X86/empty-CU.s
new file mode 100644
index 00000000000..14ff75836f4
--- /dev/null
+++ b/llvm/test/tools/llvm-dwarfdump/X86/empty-CU.s
@@ -0,0 +1,21 @@
+# RUN: llvm-mc %s -filetype obj -triple x86_64-apple-darwin -o - \
+# RUN: | not llvm-dwarfdump --verify --debug-info - \
+# RUN: | FileCheck %s
+# CHECK: error: Compilation unit without unit DIE.
+
+ .section __DWARF,__debug_info,regular,debug
+.long 8 # CU length
+.short 3 # Version
+.long 0 # Abbrev offset
+.byte 4 # AddrSize
+.byte 1 # Abbrev 1
+.long 7 # Unit lengthh...
+.short 3
+.long 0
+.byte 4
+ .section __DWARF,__debug_abbrev,regular,debug
+.byte 1 # Abbrev code
+.byte 0x11 # TAG_compile_unit
+.byte 0 # no children
+.byte 0 # no attributes
+.byte 0
OpenPOWER on IntegriCloud