//===-- DWARFDebugAbbrev.h --------------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #ifndef LLVM_DEBUGINFO_DWARFDEBUGABBREV_H #define LLVM_DEBUGINFO_DWARFDEBUGABBREV_H #include "DWARFAbbreviationDeclaration.h" #include <list> #include <map> #include <vector> namespace llvm { typedef std::vector<DWARFAbbreviationDeclaration> DWARFAbbreviationDeclarationColl; typedef DWARFAbbreviationDeclarationColl::iterator DWARFAbbreviationDeclarationCollIter; typedef DWARFAbbreviationDeclarationColl::const_iterator DWARFAbbreviationDeclarationCollConstIter; class DWARFAbbreviationDeclarationSet { uint64_t Offset; uint32_t IdxOffset; std::vector<DWARFAbbreviationDeclaration> Decls; public: DWARFAbbreviationDeclarationSet() : Offset(0), IdxOffset(0) {} DWARFAbbreviationDeclarationSet(uint64_t offset, uint32_t idxOffset) : Offset(offset), IdxOffset(idxOffset) {} void clear() { IdxOffset = 0; Decls.clear(); } uint64_t getOffset() const { return Offset; } void dump(raw_ostream &OS) const; bool extract(DataExtractor data, uint32_t* offset_ptr); const DWARFAbbreviationDeclaration * getAbbreviationDeclaration(uint32_t abbrCode) const; }; class DWARFDebugAbbrev { public: typedef std::map<uint64_t, DWARFAbbreviationDeclarationSet> DWARFAbbreviationDeclarationCollMap; typedef DWARFAbbreviationDeclarationCollMap::iterator DWARFAbbreviationDeclarationCollMapIter; typedef DWARFAbbreviationDeclarationCollMap::const_iterator DWARFAbbreviationDeclarationCollMapConstIter; private: DWARFAbbreviationDeclarationCollMap AbbrevCollMap; mutable DWARFAbbreviationDeclarationCollMapConstIter PrevAbbrOffsetPos; public: DWARFDebugAbbrev(); const DWARFAbbreviationDeclarationSet * getAbbreviationDeclarationSet(uint64_t cu_abbr_offset) const; void dump(raw_ostream &OS) const; void parse(DataExtractor data); }; } #endif