llvm-dwarfdump: type unit dwo support
llvm-svn: 198850
diff --git a/llvm/lib/DebugInfo/DWARFContext.h b/llvm/lib/DebugInfo/DWARFContext.h
index e74b5ba..9bac69d 100644
--- a/llvm/lib/DebugInfo/DWARFContext.h
+++ b/llvm/lib/DebugInfo/DWARFContext.h
@@ -38,6 +38,7 @@
OwningPtr<DWARFDebugFrame> DebugFrame;
SmallVector<DWARFCompileUnit *, 1> DWOCUs;
+ SmallVector<DWARFTypeUnit *, 1> DWOTUs;
OwningPtr<DWARFDebugAbbrev> AbbrevDWO;
DWARFContext(DWARFContext &) LLVM_DELETED_FUNCTION;
@@ -53,6 +54,10 @@
/// 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 @@
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 @@
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 @@
// 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 @@
// Sections for DWARF5 split dwarf proposal.
Section InfoDWOSection;
+ TypeSectionMap TypesDWOSections;
StringRef AbbrevDWOSection;
StringRef StringDWOSection;
StringRef StringOffsetDWOSection;
@@ -226,6 +247,9 @@
// 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() {