diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2011-09-14 01:09:52 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2011-09-14 01:09:52 +0000 |
commit | 358f4fd9ee078b3c79597fc688855fb48bc1f356 (patch) | |
tree | b8af6f225d18bd09d8c1a67e4a7bfed76175aefd /lib/DebugInfo/DWARFContext.cpp | |
parent | 836623420dbf5eb3a3facde2841179ded91ab55b (diff) | |
download | external_llvm-358f4fd9ee078b3c79597fc688855fb48bc1f356.zip external_llvm-358f4fd9ee078b3c79597fc688855fb48bc1f356.tar.gz external_llvm-358f4fd9ee078b3c79597fc688855fb48bc1f356.tar.bz2 |
DWARF: Port support for parsing .debug_aranges section from LLDB and wire it up to llvm-dwarfdump.
This is only one half of it, the part that caches address ranges from the DIEs when .debug_aranges is
not available will be ported soon.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139680 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/DebugInfo/DWARFContext.cpp')
-rw-r--r-- | lib/DebugInfo/DWARFContext.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/lib/DebugInfo/DWARFContext.cpp b/lib/DebugInfo/DWARFContext.cpp index 513e415..c034bb3 100644 --- a/lib/DebugInfo/DWARFContext.cpp +++ b/lib/DebugInfo/DWARFContext.cpp @@ -8,12 +8,23 @@ //===----------------------------------------------------------------------===// #include "DWARFContext.h" +#include "llvm/Support/raw_ostream.h" using namespace llvm; void DWARFContext::dump(raw_ostream &OS) { + OS << ".debug_abbrev contents:\n"; getDebugAbbrev()->dump(OS); + + OS << "\n.debug_info contents:\n"; for (unsigned i = 0, e = getNumCompileUnits(); i != e; ++i) getCompileUnitAtIndex(i)->dump(OS); + + OS << "\n.debug_aranges contents:\n"; + DataExtractor arangesData(getARangeSection(), isLittleEndian(), 0); + uint32_t offset = 0; + DWARFDebugArangeSet set; + while (set.extract(arangesData, &offset)) + set.dump(OS); } const DWARFDebugAbbrev *DWARFContext::getDebugAbbrev() { @@ -27,6 +38,17 @@ const DWARFDebugAbbrev *DWARFContext::getDebugAbbrev() { return Abbrev.get(); } +const DWARFDebugAranges *DWARFContext::getDebugAranges() { + if (Aranges) + return Aranges.get(); + + DataExtractor arangesData(getARangeSection(), isLittleEndian(), 0); + + Aranges.reset(new DWARFDebugAranges()); + Aranges->extract(arangesData); + return Aranges.get(); +} + void DWARFContext::parseCompileUnits() { uint32_t offset = 0; const DataExtractor &debug_info_data = DataExtractor(getInfoSection(), |