1 //===- DWARFAttribute.h -----------------------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef LLVM_DEBUGINFO_DWARF_DWARFATTRIBUTE_H
10 #define LLVM_DEBUGINFO_DWARF_DWARFATTRIBUTE_H
11 
12 #include "llvm/BinaryFormat/Dwarf.h"
13 #include "llvm/DebugInfo/DWARF/DWARFFormValue.h"
14 #include <cstdint>
15 
16 namespace llvm {
17 
18 //===----------------------------------------------------------------------===//
19 /// Encapsulates a DWARF attribute value and all of the data required to
20 /// describe the attribute value.
21 ///
22 /// This class is designed to be used by clients that want to iterate across all
23 /// attributes in a DWARFDie.
24 struct DWARFAttribute {
25   /// The debug info/types offset for this attribute.
26   uint64_t Offset = 0;
27   /// The debug info/types section byte size of the data for this attribute.
28   uint32_t ByteSize = 0;
29   /// The attribute enumeration of this attribute.
30   dwarf::Attribute Attr = dwarf::Attribute(0);
31   /// The form and value for this attribute.
32   DWARFFormValue Value;
33 
34   bool isValid() const {
35     return Offset != 0 && Attr != dwarf::Attribute(0);
36   }
37 
38   explicit operator bool() const {
39     return isValid();
40   }
41 
42   /// Identify DWARF attributes that may contain a pointer to a location list.
43   static bool mayHaveLocationList(dwarf::Attribute Attr);
44 
45   /// Identifies DWARF attributes that may contain a reference to a
46   /// DWARF expression.
47   static bool mayHaveLocationExpr(dwarf::Attribute Attr);
48 };
49 
50 } // end namespace llvm
51 
52 #endif // LLVM_DEBUGINFO_DWARF_DWARFATTRIBUTE_H
53