[DWARF] Added verification check for die ranges. If highPC is an address, then it should be greater than lowPC for each range.
Differential Revision: https://reviews.llvm.org/D35733
llvm-svn: 308928
diff --git a/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp b/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp
index db38b63..7b7b29b 100644
--- a/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp
+++ b/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp
@@ -94,6 +94,7 @@
auto Die = Unit.getDIEAtIndex(I);
if (Die.getTag() == DW_TAG_null)
continue;
+ NumUnitErrors += verifyDieRanges(Die);
for (auto AttrValue : Die.attributes()) {
NumUnitErrors += verifyDebugInfoAttribute(Die, AttrValue);
NumUnitErrors += verifyDebugInfoForm(Die, AttrValue);
@@ -209,6 +210,18 @@
return (isHeaderChainValid && NumDebugInfoErrors == 0);
}
+unsigned DWARFVerifier::verifyDieRanges(const DWARFDie &Die) {
+ unsigned NumErrors = 0;
+ for (auto Range : Die.getAddressRanges()) {
+ if (Range.LowPC >= Range.HighPC) {
+ ++NumErrors;
+ OS << format("error: Invalid address range [0x%08x - 0x%08x].\n",
+ Range.LowPC, Range.HighPC);
+ }
+ }
+ return NumErrors;
+}
+
unsigned DWARFVerifier::verifyDebugInfoAttribute(const DWARFDie &Die,
DWARFAttribute &AttrValue) {
const DWARFObject &DObj = DCtx.getDWARFObj();