From d5fb5250fc6f3a1ee39a868bb5ce8031cf794278 Mon Sep 17 00:00:00 2001 From: Frederic Riss Date: Wed, 11 Mar 2015 21:17:41 +0000 Subject: [PATCH] Revert "[dsymutil] Gather function ranges during DIE selection." This reverts commit r231957. IntervalMap currently doesn't support keys more aligned than host pointers and I've been using it with uint64_t keys. This asserts on some 32bits systems. Revert while I work on an IntervalMap generalization. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231967 91177308-0d34-0410-b5e6-96231b3b80d8 --- tools/dsymutil/DwarfLinker.cpp | 51 +++------------------------------- 1 file changed, 4 insertions(+), 47 deletions(-) diff --git a/tools/dsymutil/DwarfLinker.cpp b/tools/dsymutil/DwarfLinker.cpp index 4e3dc528178..04dca726e4a 100644 --- a/tools/dsymutil/DwarfLinker.cpp +++ b/tools/dsymutil/DwarfLinker.cpp @@ -10,7 +10,6 @@ #include "BinaryHolder.h" #include "DebugMap.h" #include "dsymutil.h" -#include "llvm/ADT/IntervalMap.h" #include "llvm/ADT/StringMap.h" #include "llvm/ADT/STLExtras.h" #include "llvm/CodeGen/AsmPrinter.h" @@ -50,11 +49,6 @@ bool error(const Twine &Error, const Twine &Context) { return false; } -template -using HalfOpenIntervalMap = - IntervalMap::LeafSize, - IntervalMapHalfOpenInfo>; - /// \brief Stores all information relating to a compile unit, be it in /// its original instance in the object file to its brand new cloned /// and linked DIE tree. @@ -69,19 +63,15 @@ public: bool InDebugMap; ///< Was this DIE's entity found in the map? }; - CompileUnit(DWARFUnit &OrigUnit) - : OrigUnit(OrigUnit), RangeAlloc(), Ranges(RangeAlloc) { + CompileUnit(DWARFUnit &OrigUnit) : OrigUnit(OrigUnit) { Info.resize(OrigUnit.getNumDIEs()); } + // Workaround MSVC not supporting implicit move ops CompileUnit(CompileUnit &&RHS) : OrigUnit(RHS.OrigUnit), Info(std::move(RHS.Info)), CUDie(std::move(RHS.CUDie)), StartOffset(RHS.StartOffset), - NextUnitOffset(RHS.NextUnitOffset), RangeAlloc(), Ranges(RangeAlloc) { - // The CompileUnit container has been 'reserve()'d with the right - // size. We cannot move the IntervalMap anyway. - llvm_unreachable("CompileUnits should not be moved."); - } + NextUnitOffset(RHS.NextUnitOffset) {} DWARFUnit &getOrigUnit() const { return OrigUnit; } @@ -110,10 +100,6 @@ public: /// \brief Apply all fixups recored by noteForwardReference(). void fixupForwardReferences(); - /// \brief Add a function range [\p LowPC, \p HighPC) that is - /// relocatad by applying offset \p PCOffset. - void addFunctionRange(uint64_t LowPC, uint64_t HighPC, int64_t PCOffset); - private: DWARFUnit &OrigUnit; std::vector Info; ///< DIE info indexed by DIE index. @@ -129,12 +115,6 @@ private: /// cloning because for forward refences the target DIE's offset isn't /// known you emit the reference attribute. std::vector> ForwardDIEReferences; - - HalfOpenIntervalMap::Allocator RangeAlloc; - /// \brief The ranges in that interval map are the PC ranges for - /// functions in this unit, associated with the PC offset to apply - /// to the addresses to get the linked address. - HalfOpenIntervalMap Ranges; }; uint64_t CompileUnit::computeNextUnitOffset() { @@ -158,11 +138,6 @@ void CompileUnit::fixupForwardReferences() { Ref.second->setValue(Ref.first->getOffset() + getStartOffset()); } -void CompileUnit::addFunctionRange(uint64_t LowPC, uint64_t HighPC, - int64_t PCOffset) { - Ranges.insert(LowPC, HighPC, PCOffset); -} - /// \brief A string table that doesn't need relocations. /// /// We are doing a final link, no need for a string table that @@ -969,25 +944,7 @@ unsigned DwarfLinker::shouldKeepSubprogramDIE( if (Options.Verbose) DIE.dump(outs(), const_cast(&OrigUnit), 0, 8 /* Indent */); - Flags |= TF_Keep; - - DWARFFormValue HighPcValue; - if (!DIE.getAttributeValue(&OrigUnit, dwarf::DW_AT_high_pc, HighPcValue)) { - reportWarning("Function without high_pc. Range will be discarded.\n", - &OrigUnit, &DIE); - return Flags; - } - - uint64_t HighPc; - if (HighPcValue.isFormClass(DWARFFormValue::FC_Address)) { - HighPc = *HighPcValue.getAsAddress(&OrigUnit); - } else { - assert(HighPcValue.isFormClass(DWARFFormValue::FC_Constant)); - HighPc = LowPc + *HighPcValue.getAsUnsignedConstant(); - } - - Unit.addFunctionRange(LowPc, HighPc, MyInfo.AddrAdjust); - return Flags; + return Flags | TF_Keep; } /// \brief Check if a DIE should be kept. -- 2.34.1