llvm-dwarfdump: type unit dwo support
[oota-llvm.git] / lib / DebugInfo / DWARFContext.h
index e74b5baaa0a32b977ad61f1179fd91382ce30d4c..9bac69d6e5225ccada077d2cec1334f131f20c13 100644 (file)
@@ -38,6 +38,7 @@ class DWARFContext : public DIContext {
   OwningPtr<DWARFDebugFrame> DebugFrame;
 
   SmallVector<DWARFCompileUnit *, 1> DWOCUs;
+  SmallVector<DWARFTypeUnit *, 1> DWOTUs;
   OwningPtr<DWARFDebugAbbrev> AbbrevDWO;
 
   DWARFContext(DWARFContext &) LLVM_DELETED_FUNCTION;
@@ -53,6 +54,10 @@ class DWARFContext : public DIContext {
   /// DWOCUs.
   void parseDWOCompileUnits();
 
+  /// Read type units from the debug_types.dwo section and store them in
+  /// DWOTUs.
+  void parseDWOTypeUnits();
+
 public:
   struct Section {
     StringRef Data;
@@ -89,6 +94,13 @@ public:
     return DWOCUs.size();
   }
 
+  /// Get the number of compile units in the DWO context.
+  unsigned getNumDWOTypeUnits() {
+    if (DWOTUs.empty())
+      parseDWOTypeUnits();
+    return DWOTUs.size();
+  }
+
   /// Get the compile unit at the specified index for this compile unit.
   DWARFCompileUnit *getCompileUnitAtIndex(unsigned index) {
     if (CUs.empty())
@@ -110,6 +122,13 @@ public:
     return DWOCUs[index];
   }
 
+  /// Get the type unit at the specified index for the DWO type units.
+  DWARFTypeUnit *getDWOTypeUnitAtIndex(unsigned index) {
+    if (DWOTUs.empty())
+      parseDWOTypeUnits();
+    return DWOTUs[index];
+  }
+
   /// Get a pointer to the parsed DebugAbbrev object.
   const DWARFDebugAbbrev *getDebugAbbrev();
 
@@ -156,6 +175,7 @@ public:
 
   // Sections for DWARF5 split dwarf proposal.
   virtual const Section &getInfoDWOSection() = 0;
+  virtual const TypeSectionMap &getTypesDWOSections() = 0;
   virtual StringRef getAbbrevDWOSection() = 0;
   virtual StringRef getStringDWOSection() = 0;
   virtual StringRef getStringOffsetDWOSection() = 0;
@@ -197,6 +217,7 @@ class DWARFContextInMemory : public DWARFContext {
 
   // Sections for DWARF5 split dwarf proposal.
   Section InfoDWOSection;
+  TypeSectionMap TypesDWOSections;
   StringRef AbbrevDWOSection;
   StringRef StringDWOSection;
   StringRef StringOffsetDWOSection;
@@ -226,6 +247,9 @@ public:
 
   // Sections for DWARF5 split dwarf proposal.
   virtual const Section &getInfoDWOSection() { return InfoDWOSection; }
+  virtual const TypeSectionMap &getTypesDWOSections() {
+    return TypesDWOSections;
+  }
   virtual StringRef getAbbrevDWOSection() { return AbbrevDWOSection; }
   virtual StringRef getStringDWOSection() { return StringDWOSection; }
   virtual StringRef getStringOffsetDWOSection() {