[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