summaryrefslogtreecommitdiffstats
path: root/llvm/lib/DebugInfo/DWARF
diff options
context:
space:
mode:
authorVlad Tsyrklevich <vlad@tsyrklevich.net>2018-10-27 17:39:13 +0000
committerVlad Tsyrklevich <vlad@tsyrklevich.net>2018-10-27 17:39:13 +0000
commit50d2683a005f3a46ddfae52ca2745a89d4831195 (patch)
treed6b456ea62a714b1d6d4e01678a5877361125482 /llvm/lib/DebugInfo/DWARF
parentfc7654a67b314cbd75d8268544be8b69fbe99cdd (diff)
downloadbcm5719-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.cpp57
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";
OpenPOWER on IntegriCloud