1//===- DWARFAttribute.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_DWARFATTRIBUTE_H 11#define LLVM_DEBUGINFO_DWARFATTRIBUTE_H 12 13#include "llvm/BinaryFormat/Dwarf.h" 14#include "llvm/DebugInfo/DWARF/DWARFFormValue.h" 15#include <cstdint> 16 17namespace llvm { 18 19//===----------------------------------------------------------------------===// 20/// Encapsulates a DWARF attribute value and all of the data required to 21/// describe the attribute value. 22/// 23/// This class is designed to be used by clients that want to iterate across all 24/// attributes in a DWARFDie. 25struct DWARFAttribute { 26 /// The debug info/types offset for this attribute. 27 uint32_t Offset = 0; 28 /// The debug info/types section byte size of the data for this attribute. 29 uint32_t ByteSize = 0; 30 /// The attribute enumeration of this attribute. 31 dwarf::Attribute Attr; 32 /// The form and value for this attribute. 33 DWARFFormValue Value; 34 35 DWARFAttribute(uint32_t O, dwarf::Attribute A = dwarf::Attribute(0), 36 dwarf::Form F = dwarf::Form(0)) : Attr(A), Value(F) {} 37 38 bool isValid() const { 39 return Offset != 0 && Attr != dwarf::Attribute(0); 40 } 41 42 explicit operator bool() const { 43 return isValid(); 44 } 45 46 void clear() { 47 Offset = 0; 48 ByteSize = 0; 49 Attr = dwarf::Attribute(0); 50 Value = DWARFFormValue(); 51 } 52}; 53 54} // end namespace llvm 55 56#endif // LLVM_DEBUGINFO_DWARFATTRIBUTE_H 57