X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FDebugInfo%2FDWARFContext.h;h=9bac69d6e5225ccada077d2cec1334f131f20c13;hb=27276437ae2169640633f9961620a8d0b19deb39;hp=44311b8e842bc168b88b3d03563154d52ac67a4b;hpb=9ddf28d501144276fb47ce2e5f48f2497d9898d5;p=oota-llvm.git diff --git a/lib/DebugInfo/DWARFContext.h b/lib/DebugInfo/DWARFContext.h index 44311b8e842..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; @@ -147,11 +169,13 @@ public: virtual StringRef getStringSection() = 0; virtual StringRef getRangeSection() = 0; virtual StringRef getPubNamesSection() = 0; + virtual StringRef getPubTypesSection() = 0; virtual StringRef getGnuPubNamesSection() = 0; virtual StringRef getGnuPubTypesSection() = 0; // 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; @@ -178,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; @@ -187,11 +211,13 @@ class DWARFContextInMemory : public DWARFContext { StringRef StringSection; StringRef RangeSection; StringRef PubNamesSection; + StringRef PubTypesSection; StringRef GnuPubNamesSection; StringRef GnuPubTypesSection; // Sections for DWARF5 split dwarf proposal. Section InfoDWOSection; + TypeSectionMap TypesDWOSections; StringRef AbbrevDWOSection; StringRef StringDWOSection; StringRef StringOffsetDWOSection; @@ -206,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; } @@ -217,11 +241,15 @@ public: virtual StringRef getStringSection() { return StringSection; } virtual StringRef getRangeSection() { return RangeSection; } virtual StringRef getPubNamesSection() { return PubNamesSection; } + virtual StringRef getPubTypesSection() { return PubTypesSection; } virtual StringRef getGnuPubNamesSection() { return GnuPubNamesSection; } virtual StringRef getGnuPubTypesSection() { return GnuPubTypesSection; } // 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() {