[llvm] r345457 - Revert "DebugInfo: reduce DIE range verification on object files"
Vlad Tsyrklevich via llvm-commits
llvm-commits at lists.llvm.org
Sat Oct 27 10:39:13 PDT 2018
Author: vlad.tsyrklevich
Date: Sat Oct 27 10:39:13 2018
New Revision: 345457
URL: http://llvm.org/viewvc/llvm-project?rev=345457&view=rev
Log:
Revert "DebugInfo: reduce DIE range verification on object files"
This reverts commits r345441 and r345444, they were causing msan
buildbot failures.
Removed:
llvm/trunk/test/tools/llvm-dwarfdump/X86/debug-verify-object.s
Modified:
llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFVerifier.h
llvm/trunk/lib/DebugInfo/DWARF/DWARFVerifier.cpp
Modified: llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFVerifier.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFVerifier.h?rev=345457&r1=345456&r2=345457&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFVerifier.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFVerifier.h Sat Oct 27 10:39:13 2018
@@ -97,9 +97,6 @@ private:
/// lies between to valid DIEs.
std::map<uint64_t, std::set<uint32_t>> ReferenceToDIEOffsets;
uint32_t NumDebugLineErrors = 0;
- // Used to relax some checks that do not currently work portably
- bool IsObjectFile;
- bool IsMachOObject;
raw_ostream &error() const;
raw_ostream &warn() const;
@@ -289,8 +286,8 @@ private:
public:
DWARFVerifier(raw_ostream &S, DWARFContext &D,
- DIDumpOptions DumpOpts = DIDumpOptions::getForSingleDIE());
-
+ DIDumpOptions DumpOpts = DIDumpOptions::getForSingleDIE())
+ : OS(S), DCtx(D), DumpOpts(std::move(DumpOpts)) {}
/// Verify the information in any of the following sections, if available:
/// .debug_abbrev, debug_abbrev.dwo
///
Modified: llvm/trunk/lib/DebugInfo/DWARF/DWARFVerifier.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARF/DWARFVerifier.cpp?rev=345457&r1=345456&r2=345457&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/DWARF/DWARFVerifier.cpp (original)
+++ llvm/trunk/lib/DebugInfo/DWARF/DWARFVerifier.cpp Sat Oct 27 10:39:13 2018
@@ -394,42 +394,20 @@ unsigned DWARFVerifier::verifyDieRanges(
// 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";
Removed: llvm/trunk/test/tools/llvm-dwarfdump/X86/debug-verify-object.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-dwarfdump/X86/debug-verify-object.s?rev=345456&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-dwarfdump/X86/debug-verify-object.s (original)
+++ llvm/trunk/test/tools/llvm-dwarfdump/X86/debug-verify-object.s (removed)
@@ -1,57 +0,0 @@
-# RUN: llvm-mc -triple x86_64-unknown-linux-gnu -filetype obj -o - %s | llvm-dwarfdump --verify -
-
- .text
-
- .section .text.f,"ax", at progbits
- .globl f
- .type f, at function
-f:
-.Lfunc_begin0:
- pushq $32
- popq %rax
- retq
-.Lfunc_end0:
- .size f, .Lfunc_end0-f
-
- .section .text.g,"ax", at progbits
- .globl g
- .type g, at function
-g:
-.Lfunc_begin1:
- pushq $64
- popq %rax
- retq
-.Lfunc_end1:
- .size g, .Lfunc_end1-g
-
- .section .debug_abbrev,"", at progbits
- .byte 1 # Abbreviation Code
- .byte 17 # DW_TAG_compile_unit
- .byte 0 # DW_CHILDREN_no
- .byte 17 # DW_AT_low_pc
- .byte 1 # DW_FORM_addr
- .byte 85 # DW_AT_ranges
- .byte 23 # DW_FORM_sec_offset
- .byte 0 # EOM(1)
- .byte 0 # EOM(2)
- .byte 0 # EOM(3)
-
- .section .debug_info,"", at progbits
-.Lcu_begin0:
- .long 20 # Length of Unit
- .short 4 # DWARF version number
- .long .debug_abbrev # Offset Into Abbrev. Section
- .byte 8 # Address Size (in bytes)
- .byte 1 # Abbrev [1] 0xb:0x1f DW_TAG_compile_unit
- .quad 0 # DW_AT_low_pc
- .long .Ldebug_ranges0 # DW_AT_ranges
-
- .section .debug_ranges,"", at progbits
-.Ldebug_ranges0:
- .quad .Lfunc_begin0
- .quad .Lfunc_end0
- .quad .Lfunc_begin1
- .quad .Lfunc_end1
- .quad 0
- .quad 0
-
More information about the llvm-commits
mailing list