From 3db24f52c5c0404529b627688106e0fd11a64400 Mon Sep 17 00:00:00 2001 From: Alexey Samsonov Date: Wed, 2 Oct 2013 07:12:47 +0000 Subject: [DebugInfo] Further simplify DWARFDebugAranges public interface git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@191813 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/DebugInfo/DWARFContext.cpp | 6 ------ lib/DebugInfo/DWARFDebugAranges.cpp | 37 +++++++++++++++++-------------------- lib/DebugInfo/DWARFDebugAranges.h | 32 ++++++++++++++++---------------- 3 files changed, 33 insertions(+), 42 deletions(-) (limited to 'lib/DebugInfo') diff --git a/lib/DebugInfo/DWARFContext.cpp b/lib/DebugInfo/DWARFContext.cpp index df4633d2c0..9dc8f14993 100644 --- a/lib/DebugInfo/DWARFContext.cpp +++ b/lib/DebugInfo/DWARFContext.cpp @@ -231,13 +231,7 @@ const DWARFDebugAranges *DWARFContext::getDebugAranges() { if (Aranges) return Aranges.get(); - DataExtractor arangesData(getARangeSection(), isLittleEndian(), 0); - Aranges.reset(new DWARFDebugAranges()); - Aranges->extract(arangesData); - // Generate aranges from DIEs: even if .debug_aranges section is present, - // it may describe only a small subset of compilation units, so we need to - // manually build aranges for the rest of them. Aranges->generate(this); return Aranges.get(); } diff --git a/lib/DebugInfo/DWARFDebugAranges.cpp b/lib/DebugInfo/DWARFDebugAranges.cpp index 303864948f..591d4bde71 100644 --- a/lib/DebugInfo/DWARFDebugAranges.cpp +++ b/lib/DebugInfo/DWARFDebugAranges.cpp @@ -45,32 +45,29 @@ void DWARFDebugAranges::extract(DataExtractor DebugArangesData) { appendRange(CUOffset, LowPC, HighPC); } } - sortAndMinimize(); } void DWARFDebugAranges::generate(DWARFContext *CTX) { - if (CTX) { - const uint32_t num_compile_units = CTX->getNumCompileUnits(); - for (uint32_t cu_idx = 0; cu_idx < num_compile_units; ++cu_idx) { - if (DWARFCompileUnit *cu = CTX->getCompileUnitAtIndex(cu_idx)) { - uint32_t CUOffset = cu->getOffset(); - if (ParsedCUOffsets.insert(CUOffset).second) - cu->buildAddressRangeTable(this, true, CUOffset); - } - } - } - sortAndMinimize(); -} + clear(); + if (!CTX) + return; -void DWARFDebugAranges::dump(raw_ostream &OS) const { - for (RangeCollIterator I = Aranges.begin(), E = Aranges.end(); I != E; ++I) { - I->dump(OS); + // Extract aranges from .debug_aranges section. + DataExtractor ArangesData(CTX->getARangeSection(), CTX->isLittleEndian(), 0); + extract(ArangesData); + + // Generate aranges from DIEs: even if .debug_aranges section is present, + // it may describe only a small subset of compilation units, so we need to + // manually build aranges for the rest of them. + for (uint32_t i = 0, n = CTX->getNumCompileUnits(); i < n; ++i) { + if (DWARFCompileUnit *CU = CTX->getCompileUnitAtIndex(i)) { + uint32_t CUOffset = CU->getOffset(); + if (ParsedCUOffsets.insert(CUOffset).second) + CU->buildAddressRangeTable(this, true, CUOffset); + } } -} -void DWARFDebugAranges::Range::dump(raw_ostream &OS) const { - OS << format("{0x%8.8x}: [0x%8.8" PRIx64 " - 0x%8.8" PRIx64 ")\n", - CUOffset, LowPC, HighPC()); + sortAndMinimize(); } void DWARFDebugAranges::appendRange(uint32_t CUOffset, uint64_t LowPC, diff --git a/lib/DebugInfo/DWARFDebugAranges.h b/lib/DebugInfo/DWARFDebugAranges.h index cbd7d53ab6..35ad8e53d6 100644 --- a/lib/DebugInfo/DWARFDebugAranges.h +++ b/lib/DebugInfo/DWARFDebugAranges.h @@ -20,6 +20,22 @@ class DWARFContext; class DWARFDebugAranges { public: + void clear() { + Aranges.clear(); + ParsedCUOffsets.clear(); + } + + void generate(DWARFContext *CTX); + + // Use appendRange multiple times and then call sortAndMinimize. + void appendRange(uint32_t CUOffset, uint64_t LowPC, uint64_t HighPC); + + uint32_t findAddress(uint64_t Address) const; + +private: + void extract(DataExtractor DebugArangesData); + void sortAndMinimize(); + struct Range { explicit Range(uint64_t LowPC = -1ULL, uint64_t HighPC = -1ULL, uint32_t CUOffset = -1U) @@ -50,31 +66,15 @@ public: return Left.HighPC() >= Right.LowPC; } - void dump(raw_ostream &OS) const; uint64_t LowPC; // Start of address range. uint32_t Length; // End of address range (not including this address). uint32_t CUOffset; // Offset of the compile unit or die. }; - void clear() { - Aranges.clear(); - ParsedCUOffsets.clear(); - } - void extract(DataExtractor DebugArangesData); - void generate(DWARFContext *CTX); - - // Use appendRange multiple times and then call sortAndMinimize. - void appendRange(uint32_t CUOffset, uint64_t LowPC, uint64_t HighPC); - void sortAndMinimize(); - - void dump(raw_ostream &OS) const; - uint32_t findAddress(uint64_t Address) const; - typedef std::vector RangeColl; typedef RangeColl::const_iterator RangeCollIterator; typedef DenseSet ParsedCUOffsetColl; -private: RangeColl Aranges; ParsedCUOffsetColl ParsedCUOffsets; }; -- cgit v1.2.3