diff options
author | Vlad Tsyrklevich <vlad@tsyrklevich.net> | 2018-10-27 17:39:13 +0000 |
---|---|---|
committer | Vlad Tsyrklevich <vlad@tsyrklevich.net> | 2018-10-27 17:39:13 +0000 |
commit | 50d2683a005f3a46ddfae52ca2745a89d4831195 (patch) | |
tree | d6b456ea62a714b1d6d4e01678a5877361125482 /llvm/lib/DebugInfo/DWARF | |
parent | fc7654a67b314cbd75d8268544be8b69fbe99cdd (diff) | |
download | bcm5719-llvm-50d2683a005f3a46ddfae52ca2745a89d4831195.tar.gz bcm5719-llvm-50d2683a005f3a46ddfae52ca2745a89d4831195.zip |
Revert "DebugInfo: reduce DIE range verification on object files"
This reverts commits r345441 and r345444, they were causing msan
buildbot failures.
llvm-svn: 345457
Diffstat (limited to 'llvm/lib/DebugInfo/DWARF')
-rw-r--r-- | llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp | 57 |
1 files changed, 13 insertions, 44 deletions
diff --git a/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp b/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp index 1f089a7030d..d30600accd0 100644 --- a/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp +++ b/llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp @@ -394,42 +394,20 @@ unsigned DWARFVerifier::verifyDieRanges(const DWARFDie &Die, // Build RI for this DIE and check that ranges within this DIE do not // overlap. DieRangeInfo RI(Die); + for (auto Range : Ranges) { + if (!Range.valid()) { + ++NumErrors; + error() << "Invalid address range " << Range << "\n"; + continue; + } - // TODO support object files better - // - // Some object file formats (i.e. non-MachO) support COMDAT. ELF in - // particular does so by placing each function into a section. The DWARF data - // for the function at that point uses a section relative DW_FORM_addrp for - // the DW_AT_low_pc and a DW_FORM_data4 for the offset as the DW_AT_high_pc. - // In such a case, when the Die is the CU, the ranges will overlap, and we - // will flag valid conflicting ranges as invalid. - // - // For such targets, we should read the ranges from the CU and partition them - // by the section id. The ranges within a particular section should be - // disjoint, although the ranges across sections may overlap. We would map - // the child die to the entity that it references and the section with which - // it is associated. The child would then be checked against the range - // information for the associated section. - // - // For now, simply elide the range verification for the CU DIEs if we are - // processing an object file. - - if (!IsObjectFile || IsMachOObject || Die.getTag() == DW_TAG_subprogram) { - for (auto Range : Ranges) { - if (!Range.valid()) { - ++NumErrors; - error() << "Invalid address range " << Range << "\n"; - continue; - } - - // Verify that ranges don't intersect. - const auto IntersectingRange = RI.insert(Range); - if (IntersectingRange != RI.Ranges.end()) { - ++NumErrors; - error() << "DIE has overlapping address ranges: " << Range << " and " - << *IntersectingRange << "\n"; - break; - } + // Verify that ranges don't intersect. + const auto IntersectingRange = RI.insert(Range); + if (IntersectingRange != RI.Ranges.end()) { + ++NumErrors; + error() << "DIE has overlapping address ranges: " << Range << " and " + << *IntersectingRange << "\n"; + break; } } @@ -767,15 +745,6 @@ void DWARFVerifier::verifyDebugLineRows() { } } -DWARFVerifier::DWARFVerifier(raw_ostream &S, DWARFContext &D, - DIDumpOptions DumpOpts) - : OS(S), DCtx(D), DumpOpts(std::move(DumpOpts)) { - if (const auto *F = DCtx.getDWARFObj().getFile()) { - IsObjectFile = F->isRelocatableObject(); - IsMachOObject = F->isMachO(); - } -} - bool DWARFVerifier::handleDebugLine() { NumDebugLineErrors = 0; OS << "Verifying .debug_line...\n"; |