1 //===-- DWARFAbbreviationDeclaration.h --------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #ifndef LLVM_DEBUGINFO_DWARFABBREVIATIONDECLARATION_H 11 #define LLVM_DEBUGINFO_DWARFABBREVIATIONDECLARATION_H 12 13 #include "llvm/ADT/SmallVector.h" 14 #include "llvm/Support/DataExtractor.h" 15 16 namespace llvm { 17 18 class raw_ostream; 19 20 class DWARFAbbreviationDeclaration { 21 uint32_t Code; 22 uint32_t Tag; 23 bool HasChildren; 24 25 struct AttributeSpec { AttributeSpecAttributeSpec26 AttributeSpec(uint16_t Attr, uint16_t Form) : Attr(Attr), Form(Form) {} 27 uint16_t Attr; 28 uint16_t Form; 29 }; 30 typedef SmallVector<AttributeSpec, 8> AttributeSpecVector; 31 AttributeSpecVector AttributeSpecs; 32 public: 33 DWARFAbbreviationDeclaration(); 34 getCode()35 uint32_t getCode() const { return Code; } getTag()36 uint32_t getTag() const { return Tag; } hasChildren()37 bool hasChildren() const { return HasChildren; } 38 39 typedef iterator_range<AttributeSpecVector::const_iterator> 40 attr_iterator_range; 41 attributes()42 attr_iterator_range attributes() const { 43 return attr_iterator_range(AttributeSpecs.begin(), AttributeSpecs.end()); 44 } 45 getFormByIndex(uint32_t idx)46 uint16_t getFormByIndex(uint32_t idx) const { 47 return idx < AttributeSpecs.size() ? AttributeSpecs[idx].Form : 0; 48 } 49 50 uint32_t findAttributeIndex(uint16_t attr) const; 51 bool extract(DataExtractor Data, uint32_t* OffsetPtr); 52 void dump(raw_ostream &OS) const; 53 54 private: 55 void clear(); 56 }; 57 58 } 59 60 #endif 61