DWARF: Port support for parsing .debug_aranges section from LLDB and wire it up to...
[oota-llvm.git] / lib / DebugInfo / DWARFContext.cpp
index 513e415fa54216fb7f27ab0f95eb592cb21dfe3e..c034bb369638fa4356724840712671612413c307 100644 (file)
@@ -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(),