X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FDebugInfo%2FDWARFContext.h;h=9bac69d6e5225ccada077d2cec1334f131f20c13;hb=27276437ae2169640633f9961620a8d0b19deb39;hp=03863ab8b1e2a1d540a3653bb8b71b6e0178c268;hpb=7357f03e888e7d95066ca1bbb26994c278eb465c;p=oota-llvm.git diff --git a/lib/DebugInfo/DWARFContext.h b/lib/DebugInfo/DWARFContext.h index 03863ab8b1e..9bac69d6e52 100644 --- a/lib/DebugInfo/DWARFContext.h +++ b/lib/DebugInfo/DWARFContext.h @@ -17,6 +17,7 @@ #include "DWARFDebugLoc.h" #include "DWARFDebugRangeList.h" #include "DWARFTypeUnit.h" +#include "llvm/ADT/MapVector.h" #include "llvm/ADT/OwningPtr.h" #include "llvm/ADT/SmallVector.h" #include "llvm/DebugInfo/DIContext.h" @@ -37,6 +38,7 @@ class DWARFContext : public DIContext { OwningPtr DebugFrame; SmallVector DWOCUs; + SmallVector DWOTUs; OwningPtr AbbrevDWO; DWARFContext(DWARFContext &) LLVM_DELETED_FUNCTION; @@ -52,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; @@ -88,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()) @@ -109,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(); @@ -138,7 +158,9 @@ public: virtual bool isLittleEndian() const = 0; virtual uint8_t getAddressSize() const = 0; virtual const Section &getInfoSection() = 0; - virtual const std::map &getTypesSections() = 0; + typedef MapVector > TypeSectionMap; + virtual const TypeSectionMap &getTypesSections() = 0; virtual StringRef getAbbrevSection() = 0; virtual const Section &getLocSection() = 0; virtual StringRef getARangeSection() = 0; @@ -153,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; @@ -179,7 +202,7 @@ class DWARFContextInMemory : public DWARFContext { bool IsLittleEndian; uint8_t AddressSize; Section InfoSection; - std::map TypesSections; + TypeSectionMap TypesSections; StringRef AbbrevSection; Section LocSection; StringRef ARangeSection; @@ -194,6 +217,7 @@ class DWARFContextInMemory : public DWARFContext { // Sections for DWARF5 split dwarf proposal. Section InfoDWOSection; + TypeSectionMap TypesDWOSections; StringRef AbbrevDWOSection; StringRef StringDWOSection; StringRef StringOffsetDWOSection; @@ -208,9 +232,7 @@ public: virtual bool isLittleEndian() const { return IsLittleEndian; } virtual uint8_t getAddressSize() const { return AddressSize; } virtual const Section &getInfoSection() { return InfoSection; } - virtual const std::map &getTypesSections() { - return TypesSections; - } + virtual const TypeSectionMap &getTypesSections() { return TypesSections; } virtual StringRef getAbbrevSection() { return AbbrevSection; } virtual const Section &getLocSection() { return LocSection; } virtual StringRef getARangeSection() { return ARangeSection; } @@ -225,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() {