[Lldb-commits] [lldb] [lldb/API] Hoist some of SBFrame logic to lldb_private::StackFrame (NFC) (PR #116298)
Med Ismail Bennani via lldb-commits
lldb-commits at lists.llvm.org
Thu Nov 14 15:33:07 PST 2024
https://github.com/medismailben created https://github.com/llvm/llvm-project/pull/116298
This patch moves some of the logic implemented in the SBFrame APIs to the lldb_private::StackFrame class so it can be re-used elsewhere.
>From c5bd8c739816988a6a3c710704fc83a298811bf6 Mon Sep 17 00:00:00 2001
From: Med Ismail Bennani <ismail at bennani.ma>
Date: Thu, 14 Nov 2024 15:31:26 -0800
Subject: [PATCH] [lldb/API] Hoist some of SBFrame logic to
lldb_private::StackFrame (NFC)
This patch moves some of the logic implemented in the SBFrame APIs to
the lldb_private::StackFrame class so it can be re-used elsewhere.
Signed-off-by: Med Ismail Bennani <ismail at bennani.ma>
---
lldb/include/lldb/Target/StackFrame.h | 12 ++++++
lldb/source/API/SBFrame.cpp | 58 +++------------------------
lldb/source/Target/StackFrame.cpp | 51 +++++++++++++++++++++++
3 files changed, 69 insertions(+), 52 deletions(-)
diff --git a/lldb/include/lldb/Target/StackFrame.h b/lldb/include/lldb/Target/StackFrame.h
index fce3a943413ca4..e85430791b7d93 100644
--- a/lldb/include/lldb/Target/StackFrame.h
+++ b/lldb/include/lldb/Target/StackFrame.h
@@ -408,6 +408,18 @@ class StackFrame : public ExecutionContextScope,
/// system implementation details this way.
bool IsHidden();
+ /// Get the frame's demangled name.
+ ///
+ /// /// \return
+ /// A C-String containing the function demangled name. Can be null.
+ const char *GetFunctionName();
+
+ /// Get the frame's demangled display name.
+ ///
+ /// /// \return
+ /// A C-String containing the function demangled display name. Can be null.
+ const char *GetDisplayFunctionName();
+
/// Query this frame to find what frame it is in this Thread's
/// StackFrameList.
///
diff --git a/lldb/source/API/SBFrame.cpp b/lldb/source/API/SBFrame.cpp
index dc41e80b457d7d..e2c691fa9bfd45 100644
--- a/lldb/source/API/SBFrame.cpp
+++ b/lldb/source/API/SBFrame.cpp
@@ -1173,12 +1173,8 @@ bool SBFrame::IsInlined() const {
Process::StopLocker stop_locker;
if (stop_locker.TryLock(&process->GetRunLock())) {
frame = exe_ctx.GetFramePtr();
- if (frame) {
-
- Block *block = frame->GetSymbolContext(eSymbolContextBlock).block;
- if (block)
- return block->GetContainingInlinedBlock() != nullptr;
- }
+ if (frame)
+ return frame->IsInlined();
}
}
return false;
@@ -1255,29 +1251,8 @@ const char *SBFrame::GetFunctionName() const {
Process::StopLocker stop_locker;
if (stop_locker.TryLock(&process->GetRunLock())) {
frame = exe_ctx.GetFramePtr();
- if (frame) {
- SymbolContext sc(frame->GetSymbolContext(eSymbolContextFunction |
- eSymbolContextBlock |
- eSymbolContextSymbol));
- if (sc.block) {
- Block *inlined_block = sc.block->GetContainingInlinedBlock();
- if (inlined_block) {
- const InlineFunctionInfo *inlined_info =
- inlined_block->GetInlinedFunctionInfo();
- name = inlined_info->GetName().AsCString();
- }
- }
-
- if (name == nullptr) {
- if (sc.function)
- name = sc.function->GetName().GetCString();
- }
-
- if (name == nullptr) {
- if (sc.symbol)
- name = sc.symbol->GetName().GetCString();
- }
- }
+ if (frame)
+ return frame->GetFunctionName();
}
}
return name;
@@ -1298,29 +1273,8 @@ const char *SBFrame::GetDisplayFunctionName() {
Process::StopLocker stop_locker;
if (stop_locker.TryLock(&process->GetRunLock())) {
frame = exe_ctx.GetFramePtr();
- if (frame) {
- SymbolContext sc(frame->GetSymbolContext(eSymbolContextFunction |
- eSymbolContextBlock |
- eSymbolContextSymbol));
- if (sc.block) {
- Block *inlined_block = sc.block->GetContainingInlinedBlock();
- if (inlined_block) {
- const InlineFunctionInfo *inlined_info =
- inlined_block->GetInlinedFunctionInfo();
- name = inlined_info->GetDisplayName().AsCString();
- }
- }
-
- if (name == nullptr) {
- if (sc.function)
- name = sc.function->GetDisplayName().GetCString();
- }
-
- if (name == nullptr) {
- if (sc.symbol)
- name = sc.symbol->GetDisplayName().GetCString();
- }
- }
+ if (frame)
+ return frame->GetDisplayFunctionName();
}
}
return name;
diff --git a/lldb/source/Target/StackFrame.cpp b/lldb/source/Target/StackFrame.cpp
index 20d8425c578a33..77179fec3ed438 100644
--- a/lldb/source/Target/StackFrame.cpp
+++ b/lldb/source/Target/StackFrame.cpp
@@ -1230,6 +1230,57 @@ bool StackFrame::IsHidden() {
return false;
}
+const char *StackFrame::GetFunctionName() {
+ const char *name = nullptr;
+ SymbolContext sc = GetSymbolContext(
+ eSymbolContextFunction | eSymbolContextBlock | eSymbolContextSymbol);
+ if (sc.block) {
+ Block *inlined_block = sc.block->GetContainingInlinedBlock();
+ if (inlined_block) {
+ const InlineFunctionInfo *inlined_info =
+ inlined_block->GetInlinedFunctionInfo();
+ name = inlined_info->GetName().AsCString();
+ }
+ }
+
+ if (name == nullptr) {
+ if (sc.function)
+ name = sc.function->GetName().GetCString();
+ }
+
+ if (name == nullptr) {
+ if (sc.symbol)
+ name = sc.symbol->GetName().GetCString();
+ }
+
+ return name;
+}
+
+const char *StackFrame::GetDisplayFunctionName() {
+ const char *name = nullptr;
+ SymbolContext sc = GetSymbolContext(
+ eSymbolContextFunction | eSymbolContextBlock | eSymbolContextSymbol);
+ if (sc.block) {
+ Block *inlined_block = sc.block->GetContainingInlinedBlock();
+ if (inlined_block) {
+ const InlineFunctionInfo *inlined_info =
+ inlined_block->GetInlinedFunctionInfo();
+ name = inlined_info->GetDisplayName().AsCString();
+ }
+ }
+
+ if (name == nullptr) {
+ if (sc.function)
+ name = sc.function->GetDisplayName().GetCString();
+ }
+
+ if (name == nullptr) {
+ if (sc.symbol)
+ name = sc.symbol->GetDisplayName().GetCString();
+ }
+ return name;
+}
+
SourceLanguage StackFrame::GetLanguage() {
CompileUnit *cu = GetSymbolContext(eSymbolContextCompUnit).comp_unit;
if (cu)
More information about the lldb-commits
mailing list