1226584Sdim//===-- DWARFDebugAbbrev.h --------------------------------------*- C++ -*-===// 2226584Sdim// 3226584Sdim// The LLVM Compiler Infrastructure 4226584Sdim// 5226584Sdim// This file is distributed under the University of Illinois Open Source 6226584Sdim// License. See LICENSE.TXT for details. 7226584Sdim// 8226584Sdim//===----------------------------------------------------------------------===// 9226584Sdim 10226584Sdim#ifndef LLVM_DEBUGINFO_DWARFDEBUGABBREV_H 11226584Sdim#define LLVM_DEBUGINFO_DWARFDEBUGABBREV_H 12226584Sdim 13226584Sdim#include "DWARFAbbreviationDeclaration.h" 14226584Sdim#include <list> 15226584Sdim#include <map> 16226584Sdim#include <vector> 17226584Sdim 18226584Sdimnamespace llvm { 19226584Sdim 20226584Sdimtypedef std::vector<DWARFAbbreviationDeclaration> 21226584Sdim DWARFAbbreviationDeclarationColl; 22226584Sdimtypedef DWARFAbbreviationDeclarationColl::iterator 23226584Sdim DWARFAbbreviationDeclarationCollIter; 24226584Sdimtypedef DWARFAbbreviationDeclarationColl::const_iterator 25226584Sdim DWARFAbbreviationDeclarationCollConstIter; 26226584Sdim 27226584Sdimclass DWARFAbbreviationDeclarationSet { 28234353Sdim uint32_t Offset; 29226584Sdim uint32_t IdxOffset; 30226584Sdim std::vector<DWARFAbbreviationDeclaration> Decls; 31226584Sdim public: 32226584Sdim DWARFAbbreviationDeclarationSet() 33226584Sdim : Offset(0), IdxOffset(0) {} 34226584Sdim 35234353Sdim DWARFAbbreviationDeclarationSet(uint32_t offset, uint32_t idxOffset) 36226584Sdim : Offset(offset), IdxOffset(idxOffset) {} 37226584Sdim 38226584Sdim void clear() { 39226584Sdim IdxOffset = 0; 40226584Sdim Decls.clear(); 41226584Sdim } 42234353Sdim uint32_t getOffset() const { return Offset; } 43226584Sdim void dump(raw_ostream &OS) const; 44226584Sdim bool extract(DataExtractor data, uint32_t* offset_ptr); 45226584Sdim 46226584Sdim const DWARFAbbreviationDeclaration * 47226584Sdim getAbbreviationDeclaration(uint32_t abbrCode) const; 48226584Sdim}; 49226584Sdim 50226584Sdimclass DWARFDebugAbbrev { 51226584Sdimpublic: 52226584Sdim typedef std::map<uint64_t, DWARFAbbreviationDeclarationSet> 53226584Sdim DWARFAbbreviationDeclarationCollMap; 54226584Sdim typedef DWARFAbbreviationDeclarationCollMap::iterator 55226584Sdim DWARFAbbreviationDeclarationCollMapIter; 56226584Sdim typedef DWARFAbbreviationDeclarationCollMap::const_iterator 57226584Sdim DWARFAbbreviationDeclarationCollMapConstIter; 58226584Sdim 59226584Sdimprivate: 60226584Sdim DWARFAbbreviationDeclarationCollMap AbbrevCollMap; 61226584Sdim mutable DWARFAbbreviationDeclarationCollMapConstIter PrevAbbrOffsetPos; 62226584Sdim 63226584Sdimpublic: 64226584Sdim DWARFDebugAbbrev(); 65226584Sdim const DWARFAbbreviationDeclarationSet * 66226584Sdim getAbbreviationDeclarationSet(uint64_t cu_abbr_offset) const; 67226584Sdim void dump(raw_ostream &OS) const; 68226584Sdim void parse(DataExtractor data); 69226584Sdim}; 70226584Sdim 71226584Sdim} 72226584Sdim 73226584Sdim#endif 74