From: Frederic Riss Date: Fri, 6 Mar 2015 23:22:50 +0000 (+0000) Subject: [dsymutil] Set linked unit start offset early. NFC. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=1edd6edd600e38c09f1a2b8247a3dd3ef1b9dc12;p=oota-llvm.git [dsymutil] Set linked unit start offset early. NFC. The start offset of a linked unit is known before starting to clone its DIEs. Handling DW_FORM_ref_addr attributes requires that this offset is set while cloning the unit. Split CompileUnit::computeOffsets() into setStartOffset() and computeNextUnitOffset() and call them repsectively before cloning the DIEs and right after. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231530 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/tools/dsymutil/DwarfLinker.cpp b/tools/dsymutil/DwarfLinker.cpp index b9b128c8ab8..40d3fb0b546 100644 --- a/tools/dsymutil/DwarfLinker.cpp +++ b/tools/dsymutil/DwarfLinker.cpp @@ -81,12 +81,13 @@ public: uint64_t getStartOffset() const { return StartOffset; } uint64_t getNextUnitOffset() const { return NextUnitOffset; } - /// \brief Set the start and end offsets for this unit. Must be - /// called after the CU's DIEs have been cloned. The unit start - /// offset will be set to \p DebugInfoSize. + void setStartOffset(uint64_t DebugInfoSize) { StartOffset = DebugInfoSize; } + + /// \brief Compute the end offset for this unit. Must be + /// called after the CU's DIEs have been cloned. /// \returns the next unit offset (which is also the current /// debug_info section size). - uint64_t computeOffsets(uint64_t DebugInfoSize); + uint64_t computeNextUnitOffset(); private: DWARFUnit &OrigUnit; @@ -97,8 +98,7 @@ private: uint64_t NextUnitOffset; }; -uint64_t CompileUnit::computeOffsets(uint64_t DebugInfoSize) { - StartOffset = DebugInfoSize; +uint64_t CompileUnit::computeNextUnitOffset() { NextUnitOffset = StartOffset + 11 /* Header size */; // The root DIE might be null, meaning that the Unit had nothing to // contribute to the linked output. In that case, we will emit the @@ -1307,10 +1307,11 @@ bool DwarfLinker::link(const DebugMap &Map) { if (!ValidRelocs.empty()) for (auto &CurrentUnit : Units) { const auto *InputDIE = CurrentUnit.getOrigUnit().getCompileUnitDIE(); + CurrentUnit.setStartOffset(OutputDebugInfoSize); DIE *OutputDIE = cloneDIE(*InputDIE, CurrentUnit, 11 /* Unit Header size */); CurrentUnit.setOutputUnitDIE(OutputDIE); - OutputDebugInfoSize = CurrentUnit.computeOffsets(OutputDebugInfoSize); + OutputDebugInfoSize = CurrentUnit.computeNextUnitOffset(); } // Emit all the compile unit's debug information.