diff options
author | Alexey Samsonov <samsonov@google.com> | 2013-10-02 07:12:47 +0000 |
---|---|---|
committer | Alexey Samsonov <samsonov@google.com> | 2013-10-02 07:12:47 +0000 |
commit | 3db24f52c5c0404529b627688106e0fd11a64400 (patch) | |
tree | 775acc933cafb03d410169add5a801965838a579 /lib | |
parent | d243c19c1f4ef8efc1971cc1e1f2ef4f0805b352 (diff) | |
download | external_llvm-3db24f52c5c0404529b627688106e0fd11a64400.zip external_llvm-3db24f52c5c0404529b627688106e0fd11a64400.tar.gz external_llvm-3db24f52c5c0404529b627688106e0fd11a64400.tar.bz2 |
[DebugInfo] Further simplify DWARFDebugAranges public interface
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@191813 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/DebugInfo/DWARFContext.cpp | 6 | ||||
-rw-r--r-- | lib/DebugInfo/DWARFDebugAranges.cpp | 37 | ||||
-rw-r--r-- | lib/DebugInfo/DWARFDebugAranges.h | 32 |
3 files changed, 33 insertions, 42 deletions
diff --git a/lib/DebugInfo/DWARFContext.cpp b/lib/DebugInfo/DWARFContext.cpp index df4633d..9dc8f14 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 3038649..591d4bd 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 cbd7d53..35ad8e5 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<Range> RangeColl; typedef RangeColl::const_iterator RangeCollIterator; typedef DenseSet<uint32_t> ParsedCUOffsetColl; -private: RangeColl Aranges; ParsedCUOffsetColl ParsedCUOffsets; }; |