LLDB  mainline
DWARFBaseDIE.h
Go to the documentation of this file.
1 //===-- DWARFBaseDIE.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 LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFBASEDIE_H
10 #define LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFBASEDIE_H
11 
12 #include "lldb/Core/dwarf.h"
13 #include "lldb/lldb-types.h"
14 
15 #include "llvm/Support/Error.h"
16 
17 class DIERef;
18 class DWARFASTParser;
19 class DWARFAttributes;
20 class DWARFUnit;
22 class DWARFDeclContext;
23 class SymbolFileDWARF;
24 
25 class DWARFBaseDIE {
26 public:
27  DWARFBaseDIE() : m_cu(nullptr), m_die(nullptr) {}
28 
30  : m_cu(cu), m_die(die) {}
31 
33  : m_cu(const_cast<DWARFUnit *>(cu)), m_die(die) {}
34 
36  : m_cu(cu), m_die(const_cast<DWARFDebugInfoEntry *>(die)) {}
37 
39  : m_cu(const_cast<DWARFUnit *>(cu)),
40  m_die(const_cast<DWARFDebugInfoEntry *>(die)) {}
41 
42  // Tests
43  explicit operator bool() const { return IsValid(); }
44 
45  bool IsValid() const { return m_cu && m_die; }
46 
47  bool HasChildren() const;
48 
50 
51  // Accessors
52  SymbolFileDWARF *GetDWARF() const;
53 
54  DWARFUnit *GetCU() const { return m_cu; }
55 
56  DWARFDebugInfoEntry *GetDIE() const { return m_die; }
57 
58  llvm::Optional<DIERef> GetDIERef() const;
59 
60  void Set(DWARFUnit *cu, DWARFDebugInfoEntry *die) {
61  if (cu && die) {
62  m_cu = cu;
63  m_die = die;
64  } else {
65  Clear();
66  }
67  }
68 
69  void Clear() {
70  m_cu = nullptr;
71  m_die = nullptr;
72  }
73 
74  // Get the data that contains the attribute values for this DIE. Support
75  // for .debug_types means that any DIE can have its data either in the
76  // .debug_info or the .debug_types section; this method will return the
77  // correct section data.
78  //
79  // Clients must validate that this object is valid before calling this.
81 
82  // Accessing information about a DIE
83  dw_tag_t Tag() const;
84 
85  const char *GetTagAsCString() const;
86 
87  dw_offset_t GetOffset() const;
88 
89  // Get the LLDB user ID for this DIE. This is often just the DIE offset,
90  // but it might have a SymbolFileDWARF::GetID() in the high 32 bits if
91  // we are doing Darwin DWARF in .o file, or DWARF stand alone debug
92  // info.
93  lldb::user_id_t GetID() const;
94 
95  const char *GetName() const;
96 
97  lldb::ModuleSP GetModule() const;
98 
99  // Getting attribute values from the DIE.
100  //
101  // GetAttributeValueAsXXX() functions should only be used if you are
102  // looking for one or two attributes on a DIE. If you are trying to
103  // parse all attributes, use GetAttributes (...) instead
104  const char *GetAttributeValueAsString(const dw_attr_t attr,
105  const char *fail_value) const;
106 
107  uint64_t GetAttributeValueAsUnsigned(const dw_attr_t attr,
108  uint64_t fail_value) const;
109 
110  uint64_t GetAttributeValueAsAddress(const dw_attr_t attr,
111  uint64_t fail_value) const;
112 
113  enum class Recurse : bool { no, yes };
114  size_t GetAttributes(DWARFAttributes &attributes,
115  Recurse recurse = Recurse::yes) const;
116 
117 protected:
120 };
121 
122 bool operator==(const DWARFBaseDIE &lhs, const DWARFBaseDIE &rhs);
123 bool operator!=(const DWARFBaseDIE &lhs, const DWARFBaseDIE &rhs);
124 
125 #endif // LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFBASEDIE_H
lldb::ModuleSP GetModule() const
DWARFDebugInfoEntry * m_die
Definition: DWARFBaseDIE.h:119
SymbolFileDWARF * GetDWARF() const
DWARFUnit * GetCU() const
Definition: DWARFBaseDIE.h:54
DWARFBaseDIE(const DWARFUnit *cu, const DWARFDebugInfoEntry *die)
Definition: DWARFBaseDIE.h:38
Identifies a DWARF debug info entry within a given Module.
Definition: DIERef.h:26
DWARFUnit * m_cu
Definition: DWARFBaseDIE.h:118
uint64_t GetAttributeValueAsAddress(const dw_attr_t attr, uint64_t fail_value) const
bool operator!=(const DWARFBaseDIE &lhs, const DWARFBaseDIE &rhs)
const char * GetTagAsCString() const
llvm::Optional< DIERef > GetDIERef() const
DWARFDebugInfoEntry objects assume that they are living in one big vector and do pointer arithmetic o...
size_t GetAttributes(DWARFAttributes &attributes, Recurse recurse=Recurse::yes) const
const char * GetAttributeValueAsString(const dw_attr_t attr, const char *fail_value) const
uint64_t user_id_t
Definition: lldb-types.h:84
uint64_t GetAttributeValueAsUnsigned(const dw_attr_t attr, uint64_t fail_value) const
llvm::dwarf::Tag dw_tag_t
Definition: dwarf.h:25
DWARFBaseDIE(DWARFUnit *cu, const DWARFDebugInfoEntry *die)
Definition: DWARFBaseDIE.h:35
void Clear()
Definition: DWARFBaseDIE.h:69
DWARFDebugInfoEntry * GetDIE() const
Definition: DWARFBaseDIE.h:56
bool operator==(const DWARFBaseDIE &lhs, const DWARFBaseDIE &rhs)
bool IsValid() const
Definition: DWARFBaseDIE.h:45
dw_tag_t Tag() const
bool HasChildren() const
DWARFBaseDIE(const DWARFUnit *cu, DWARFDebugInfoEntry *die)
Definition: DWARFBaseDIE.h:32
dw_offset_t GetOffset() const
const char * GetName() const
bool Supports_DW_AT_APPLE_objc_complete_type() const
const lldb_private::DWARFDataExtractor & GetData() const
lldb::user_id_t GetID() const
DWARFBaseDIE(DWARFUnit *cu, DWARFDebugInfoEntry *die)
Definition: DWARFBaseDIE.h:29
void Set(DWARFUnit *cu, DWARFDebugInfoEntry *die)
Definition: DWARFBaseDIE.h:60