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 16namespace llvm { 17 18class raw_ostream; 19 20class DWARFAbbreviationDeclaration { 21 uint32_t Code; 22 uint32_t Tag; 23 bool HasChildren; 24 25 struct AttributeSpec { 26 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; 32public: 33 DWARFAbbreviationDeclaration(); 34 35 uint32_t getCode() const { return Code; } 36 uint32_t getTag() const { return Tag; } 37 bool hasChildren() const { return HasChildren; } 38 39 typedef iterator_range<AttributeSpecVector::const_iterator> 40 attr_iterator_range; 41 42 attr_iterator_range attributes() const { 43 return attr_iterator_range(AttributeSpecs.begin(), AttributeSpecs.end()); 44 } 45 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 54private: 55 void clear(); 56}; 57 58} 59 60#endif 61