LLDB
mainline
llvm-project
lldb
include
lldb
Target
StackID.h
Go to the documentation of this file.
1
//===-- StackID.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_TARGET_STACKID_H
10
#define LLDB_TARGET_STACKID_H
11
12
#include "
lldb/Core/AddressRange.h
"
13
#include "
lldb/lldb-private.h
"
14
15
namespace
lldb_private
{
16
17
class
StackID
{
18
public
:
19
// Constructors and Destructors
20
StackID
() =
default
;
21
22
explicit
StackID
(
lldb::addr_t
pc
,
lldb::addr_t
cfa,
23
SymbolContextScope
*symbol_scope)
24
:
m_pc
(
pc
),
m_cfa
(cfa),
m_symbol_scope
(symbol_scope) {}
25
26
StackID
(
const
StackID
&rhs)
27
:
m_pc
(rhs.
m_pc
),
m_cfa
(rhs.
m_cfa
),
m_symbol_scope
(rhs.
m_symbol_scope
) {}
28
29
~StackID
() =
default
;
30
31
lldb::addr_t
GetPC
()
const
{
return
m_pc
; }
32
33
lldb::addr_t
GetCallFrameAddress
()
const
{
return
m_cfa
; }
34
35
SymbolContextScope
*
GetSymbolContextScope
()
const
{
return
m_symbol_scope
; }
36
37
void
SetSymbolContextScope
(
SymbolContextScope
*symbol_scope) {
38
m_symbol_scope
= symbol_scope;
39
}
40
41
void
Clear
() {
42
m_pc
=
LLDB_INVALID_ADDRESS
;
43
m_cfa
=
LLDB_INVALID_ADDRESS
;
44
m_symbol_scope
=
nullptr
;
45
}
46
47
bool
IsValid
()
const
{
48
return
m_pc
!=
LLDB_INVALID_ADDRESS
||
m_cfa
!=
LLDB_INVALID_ADDRESS
;
49
}
50
51
void
Dump
(
Stream
*s);
52
53
// Operators
54
const
StackID
&
operator=
(
const
StackID
&rhs) {
55
if
(
this
!= &rhs) {
56
m_pc
= rhs.
m_pc
;
57
m_cfa
= rhs.
m_cfa
;
58
m_symbol_scope
= rhs.
m_symbol_scope
;
59
}
60
return
*
this
;
61
}
62
63
protected
:
64
friend
class
StackFrame
;
65
66
void
SetPC
(
lldb::addr_t
pc
) {
m_pc
=
pc
; }
67
68
void
SetCFA
(
lldb::addr_t
cfa) {
m_cfa
= cfa; }
69
70
lldb::addr_t
m_pc
=
71
LLDB_INVALID_ADDRESS
;
// The pc value for the function/symbol for this
72
// frame. This will
73
// only get used if the symbol scope is nullptr (the code where we are
74
// stopped is not represented by any function or symbol in any shared
75
// library).
76
lldb::addr_t
m_cfa
=
77
LLDB_INVALID_ADDRESS
;
// The call frame address (stack pointer) value
78
// at the beginning of the function that uniquely
79
// identifies this frame (along with m_symbol_scope
80
// below)
81
SymbolContextScope
*
m_symbol_scope
=
82
nullptr
;
// If nullptr, there is no block or symbol for this frame.
83
// If not nullptr, this will either be the scope for the
84
// lexical block for the frame, or the scope for the
85
// symbol. Symbol context scopes are always be unique
86
// pointers since the are part of the Block and Symbol
87
// objects and can easily be used to tell if a stack ID
88
// is the same as another.
89
};
90
91
bool
operator==
(
const
StackID
&lhs,
const
StackID
&rhs);
92
bool
operator!=
(
const
StackID
&lhs,
const
StackID
&rhs);
93
94
// frame_id_1 < frame_id_2 means "frame_id_1 is YOUNGER than frame_id_2"
95
bool
operator<
(
const
StackID
&lhs,
const
StackID
&rhs);
96
97
}
// namespace lldb_private
98
99
#endif
// LLDB_TARGET_STACKID_H
AddressRange.h
pc
@ pc
Definition:
CompactUnwindInfo.cpp:1250
lldb_private::StackFrame
This base class provides an interface to stack frames.
Definition:
StackFrame.h:43
lldb_private::StackID
Definition:
StackID.h:17
lldb_private::StackID::StackID
StackID(const StackID &rhs)
Definition:
StackID.h:26
lldb_private::StackID::Dump
void Dump(Stream *s)
Definition:
StackID.cpp:17
lldb_private::StackID::m_cfa
lldb::addr_t m_cfa
Definition:
StackID.h:76
lldb_private::StackID::IsValid
bool IsValid() const
Definition:
StackID.h:47
lldb_private::StackID::SetPC
void SetPC(lldb::addr_t pc)
Definition:
StackID.h:66
lldb_private::StackID::GetSymbolContextScope
SymbolContextScope * GetSymbolContextScope() const
Definition:
StackID.h:35
lldb_private::StackID::operator=
const StackID & operator=(const StackID &rhs)
Definition:
StackID.h:54
lldb_private::StackID::Clear
void Clear()
Definition:
StackID.h:41
lldb_private::StackID::~StackID
~StackID()=default
lldb_private::StackID::m_pc
lldb::addr_t m_pc
Definition:
StackID.h:70
lldb_private::StackID::GetPC
lldb::addr_t GetPC() const
Definition:
StackID.h:31
lldb_private::StackID::StackID
StackID(lldb::addr_t pc, lldb::addr_t cfa, SymbolContextScope *symbol_scope)
Definition:
StackID.h:22
lldb_private::StackID::StackID
StackID()=default
lldb_private::StackID::m_symbol_scope
SymbolContextScope * m_symbol_scope
Definition:
StackID.h:81
lldb_private::StackID::SetSymbolContextScope
void SetSymbolContextScope(SymbolContextScope *symbol_scope)
Definition:
StackID.h:37
lldb_private::StackID::SetCFA
void SetCFA(lldb::addr_t cfa)
Definition:
StackID.h:68
lldb_private::StackID::GetCallFrameAddress
lldb::addr_t GetCallFrameAddress() const
Definition:
StackID.h:33
lldb_private::Stream
A stream class that can stream formatted output to a file.
Definition:
Stream.h:28
lldb_private::SymbolContextScope
"lldb/Symbol/SymbolContextScope.h" Inherit from this if your object is part of a symbol context and c...
Definition:
SymbolContextScope.h:64
LLDB_INVALID_ADDRESS
#define LLDB_INVALID_ADDRESS
Definition:
lldb-defines.h:82
lldb-private.h
lldb_private
A class that represents a running process on the host machine.
Definition:
SBAddressRange.h:14
lldb_private::operator!=
bool operator!=(const Address &lhs, const Address &rhs)
Definition:
Address.cpp:1029
lldb_private::operator==
bool operator==(const Address &lhs, const Address &rhs)
Definition:
Address.cpp:1023
lldb_private::operator<
bool operator<(const Address &lhs, const Address &rhs)
Definition:
Address.cpp:992
lldb::addr_t
uint64_t addr_t
Definition:
lldb-types.h:80
Generated on Wed Nov 20 2024 18:14:38 for LLDB by
1.9.6