Home | History | Annotate | Download | only in DWARF
      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 
     17 namespace 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.
     25 struct 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