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/DebugInfo/DWARFDebugAranges.cpp | |
parent | d243c19c1f4ef8efc1971cc1e1f2ef4f0805b352 (diff) | |
download | llvm-3db24f52c5c0404529b627688106e0fd11a64400.tar.gz llvm-3db24f52c5c0404529b627688106e0fd11a64400.tar.bz2 llvm-3db24f52c5c0404529b627688106e0fd11a64400.tar.xz |
[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/DebugInfo/DWARFDebugAranges.cpp')
-rw-r--r-- | lib/DebugInfo/DWARFDebugAranges.cpp | 37 |
1 files changed, 17 insertions, 20 deletions
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, |