X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FDebugInfo%2FDWARFCompileUnit.h;h=2a74605fcb2d3d3d3a63f9b580d190dc5f2b1864;hb=7e48a92829a1c607c193758d55e7058599e7416f;hp=0c082ad33782ce1bae5d9690962f2057bce23db4;hpb=72c0d7fdd3d0930c7507060e96aec7d7429a8190;p=oota-llvm.git diff --git a/lib/DebugInfo/DWARFCompileUnit.h b/lib/DebugInfo/DWARFCompileUnit.h index 0c082ad3378..2a74605fcb2 100644 --- a/lib/DebugInfo/DWARFCompileUnit.h +++ b/lib/DebugInfo/DWARFCompileUnit.h @@ -12,15 +12,26 @@ #include "DWARFDebugAbbrev.h" #include "DWARFDebugInfoEntry.h" +#include "DWARFDebugRangeList.h" +#include "DWARFRelocMap.h" #include namespace llvm { -class DWARFContext; +class DWARFDebugAbbrev; +class StringRef; class raw_ostream; class DWARFCompileUnit { - DWARFContext &Context; + const DWARFDebugAbbrev *Abbrev; + StringRef InfoSection; + StringRef AbbrevSection; + StringRef RangeSection; + StringRef StringSection; + StringRef StringOffsetSection; + StringRef AddrOffsetSection; + const RelocAddrMap *RelocMap; + bool isLittleEndian; uint32_t Offset; uint32_t Length; @@ -31,11 +42,20 @@ class DWARFCompileUnit { // The compile unit debug information entry item. std::vector DieArray; public: - DWARFCompileUnit(DWARFContext &context) : Context(context) { + + DWARFCompileUnit(const DWARFDebugAbbrev *DA, StringRef IS, StringRef AS, + StringRef RS, StringRef SS, StringRef SOS, StringRef AOS, + const RelocAddrMap *M, bool LE) : + Abbrev(DA), InfoSection(IS), AbbrevSection(AS), + RangeSection(RS), StringSection(SS), StringOffsetSection(SOS), + AddrOffsetSection(AOS), RelocMap(M), isLittleEndian(LE) { clear(); } - DWARFContext &getContext() const { return Context; } + StringRef getStringSection() const { return StringSection; } + StringRef getStringOffsetSection() const { return StringOffsetSection; } + StringRef getAddrOffsetSection() const { return AddrOffsetSection; } + const RelocAddrMap *getRelocMap() const { return RelocMap; } DataExtractor getDebugInfoExtractor() const; bool extract(DataExtractor debug_info, uint32_t* offset_ptr); @@ -43,8 +63,13 @@ public: const DWARFAbbreviationDeclarationSet *abbrevs); /// extractDIEsIfNeeded - Parses a compile unit and indexes its DIEs if it - /// hasn't already been done. + /// hasn't already been done. Returns the number of DIEs parsed at this call. size_t extractDIEsIfNeeded(bool cu_die_only); + /// extractRangeList - extracts the range list referenced by this compile + /// unit from .debug_ranges section. Returns true on success. + /// Requires that compile unit is already extracted. + bool extractRangeList(uint32_t RangeListOffset, + DWARFDebugRangeList &RangeList) const; void clear(); void dump(raw_ostream &OS); uint32_t getOffset() const { return Offset; } @@ -70,6 +95,16 @@ public: BaseAddr = base_addr; } + const DWARFDebugInfoEntryMinimal * + getCompileUnitDIE(bool extract_cu_die_only = true) { + extractDIEsIfNeeded(extract_cu_die_only); + if (DieArray.empty()) + return NULL; + return &DieArray[0]; + } + + const char *getCompilationDir(); + /// setDIERelations - We read in all of the DIE entries into our flat list /// of DIE entries and now we need to go back through all of them and set the /// parent, sibling and child pointers for quick DIE navigation. @@ -91,6 +126,16 @@ public: DieArray.reserve(getDebugInfoSize() / 14); DieArray.push_back(die); } + + void clearDIEs(bool keep_compile_unit_die); + + void buildAddressRangeTable(DWARFDebugAranges *debug_aranges, + bool clear_dies_if_already_not_parsed); + + /// getInlinedChainForAddress - fetches inlined chain for a given address. + /// Returns empty chain if there is no subprogram containing address. + DWARFDebugInfoEntryMinimal::InlinedChain getInlinedChainForAddress( + uint64_t Address); }; }