LLDB
mainline
llvm-project
lldb
source
Plugins
SymbolFile
DWARF
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
;
21
class
DWARFDebugInfoEntry
;
22
class
DWARFDeclContext
;
23
class
SymbolFileDWARF
;
24
25
class
DWARFBaseDIE
{
26
public
:
27
DWARFBaseDIE
() =
default
;
28
29
DWARFBaseDIE
(
DWARFUnit
*cu,
DWARFDebugInfoEntry
*die)
30
:
m_cu
(cu),
m_die
(die) {}
31
32
DWARFBaseDIE
(
const
DWARFUnit
*cu,
DWARFDebugInfoEntry
*die)
33
:
m_cu
(const_cast<
DWARFUnit
*>(cu)),
m_die
(die) {}
34
35
DWARFBaseDIE
(
DWARFUnit
*cu,
const
DWARFDebugInfoEntry
*die)
36
:
m_cu
(cu),
m_die
(const_cast<
DWARFDebugInfoEntry
*>(die)) {}
37
38
DWARFBaseDIE
(
const
DWARFUnit
*cu,
const
DWARFDebugInfoEntry
*die)
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
49
bool
Supports_DW_AT_APPLE_objc_complete_type
()
const
;
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.
80
const
lldb_private::DWARFDataExtractor
&
GetData
()
const
;
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
:
118
DWARFUnit
*
m_cu
=
nullptr
;
119
DWARFDebugInfoEntry
*
m_die
=
nullptr
;
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
DWARFBaseDIE::GetAttributeValueAsAddress
uint64_t GetAttributeValueAsAddress(const dw_attr_t attr, uint64_t fail_value) const
Definition:
DWARFBaseDIE.cpp:56
DIERef
Identifies a DWARF debug info entry within a given Module.
Definition:
DIERef.h:26
DWARFBaseDIE::GetData
const lldb_private::DWARFDataExtractor & GetData() const
Definition:
DWARFBaseDIE.cpp:123
DWARFBaseDIE::GetDIERef
llvm::Optional< DIERef > GetDIERef() const
Definition:
DWARFBaseDIE.cpp:21
DWARFBaseDIE::Recurse::yes
@ yes
DWARFBaseDIE::Supports_DW_AT_APPLE_objc_complete_type
bool Supports_DW_AT_APPLE_objc_complete_type() const
Definition:
DWARFBaseDIE.cpp:103
DWARFBaseDIE::GetAttributes
size_t GetAttributes(DWARFAttributes &attributes, Recurse recurse=Recurse::yes) const
Definition:
DWARFBaseDIE.cpp:107
dw_tag_t
llvm::dwarf::Tag dw_tag_t
Definition:
dwarf.h:28
DWARFBaseDIE::DWARFBaseDIE
DWARFBaseDIE(DWARFUnit *cu, DWARFDebugInfoEntry *die)
Definition:
DWARFBaseDIE.h:29
SymbolFileDWARF
Definition:
SymbolFileDWARF.h:59
DWARFBaseDIE::m_die
DWARFDebugInfoEntry * m_die
Definition:
DWARFBaseDIE.h:119
DWARFBaseDIE::GetModule
lldb::ModuleSP GetModule() const
Definition:
DWARFBaseDIE.cpp:77
DWARFBaseDIE::GetDWARF
SymbolFileDWARF * GetDWARF() const
Definition:
DWARFBaseDIE.cpp:92
lldb_private::DWARFDataExtractor
Definition:
DWARFDataExtractor.h:18
DWARFBaseDIE::GetCU
DWARFUnit * GetCU() const
Definition:
DWARFBaseDIE.h:54
DWARFDebugInfoEntry
DWARFDebugInfoEntry objects assume that they are living in one big vector and do pointer arithmetic o...
Definition:
DWARFDebugInfoEntry.h:31
DWARFAttributes
Definition:
DWARFAttribute.h:44
DWARFUnit
Definition:
DWARFUnit.h:83
operator!=
bool operator!=(const DWARFBaseDIE &lhs, const DWARFBaseDIE &rhs)
Definition:
DWARFBaseDIE.cpp:119
DWARFBaseDIE::Recurse::no
@ no
DWARFBaseDIE::m_cu
DWARFUnit * m_cu
Definition:
DWARFBaseDIE.h:118
DWARFBaseDIE::GetTagAsCString
const char * GetTagAsCString() const
Definition:
DWARFBaseDIE.cpp:36
DWARFBaseDIE::Clear
void Clear()
Definition:
DWARFBaseDIE.h:69
DWARFBaseDIE::GetDIE
DWARFDebugInfoEntry * GetDIE() const
Definition:
DWARFBaseDIE.h:56
DWARFBaseDIE::GetAttributeValueAsString
const char * GetAttributeValueAsString(const dw_attr_t attr, const char *fail_value) const
Definition:
DWARFBaseDIE.cpp:40
lldb-types.h
DWARFBaseDIE::GetAttributeValueAsUnsigned
uint64_t GetAttributeValueAsUnsigned(const dw_attr_t attr, uint64_t fail_value) const
Definition:
DWARFBaseDIE.cpp:48
dwarf.h
uint32_t
DWARFASTParser
Definition:
DWARFASTParser.h:26
operator==
bool operator==(const DWARFBaseDIE &lhs, const DWARFBaseDIE &rhs)
Definition:
DWARFBaseDIE.cpp:115
DWARFBaseDIE::DWARFBaseDIE
DWARFBaseDIE(const DWARFUnit *cu, DWARFDebugInfoEntry *die)
Definition:
DWARFBaseDIE.h:32
DWARFBaseDIE::Recurse
Recurse
Definition:
DWARFBaseDIE.h:113
DWARFBaseDIE::GetOffset
dw_offset_t GetOffset() const
Definition:
DWARFBaseDIE.cpp:85
DWARFBaseDIE::GetName
const char * GetName() const
Definition:
DWARFBaseDIE.cpp:70
DWARFBaseDIE::Set
void Set(DWARFUnit *cu, DWARFDebugInfoEntry *die)
Definition:
DWARFBaseDIE.h:60
DWARFBaseDIE::DWARFBaseDIE
DWARFBaseDIE(DWARFUnit *cu, const DWARFDebugInfoEntry *die)
Definition:
DWARFBaseDIE.h:35
uint16_t
DWARFBaseDIE::GetID
lldb::user_id_t GetID() const
Definition:
DWARFBaseDIE.cpp:64
lldb::user_id_t
uint64_t user_id_t
Definition:
lldb-types.h:84
DWARFDeclContext
Definition:
DWARFDeclContext.h:23
DWARFBaseDIE::DWARFBaseDIE
DWARFBaseDIE()=default
DWARFBaseDIE::Tag
dw_tag_t Tag() const
Definition:
DWARFBaseDIE.cpp:29
DWARFBaseDIE::DWARFBaseDIE
DWARFBaseDIE(const DWARFUnit *cu, const DWARFDebugInfoEntry *die)
Definition:
DWARFBaseDIE.h:38
DWARFBaseDIE::HasChildren
bool HasChildren() const
Definition:
DWARFBaseDIE.cpp:99
DWARFBaseDIE
Definition:
DWARFBaseDIE.h:25
DWARFBaseDIE::IsValid
bool IsValid() const
Definition:
DWARFBaseDIE.h:45
Generated on Mon Jul 4 2022 12:50:47 for LLDB by
1.8.17