• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_DWARFATTRIBUTE_H
10 #define LLVM_DEBUGINFO_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 
isValidDWARFAttribute34   bool isValid() const {
35     return Offset != 0 && Attr != dwarf::Attribute(0);
36   }
37 
38   explicit operator bool() const {
39     return isValid();
40   }
41 
42   /// Identifies DWARF attributes that may contain a reference to a
43   /// DWARF expression.
44   static bool mayHaveLocationDescription(dwarf::Attribute Attr);
45 };
46 
47 } // end namespace llvm
48 
49 #endif // LLVM_DEBUGINFO_DWARFATTRIBUTE_H
50