• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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),
AttrDWARFAttribute36                  dwarf::Form F = dwarf::Form(0)) : Attr(A), Value(F) {}
37 
isValidDWARFAttribute38   bool isValid() const {
39     return Offset != 0 && Attr != dwarf::Attribute(0);
40   }
41 
42   explicit operator bool() const {
43     return isValid();
44   }
45 
clearDWARFAttribute46   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