[Lldb-commits] [lldb] [lldb/API] Hoist some of SBFrame logic to lldb_private::StackFrame (NFC) (PR #116298)
via lldb-commits
lldb-commits at lists.llvm.org
Sat Nov 16 06:16:48 PST 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-lldb
Author: Med Ismail Bennani (medismailben)
<details>
<summary>Changes</summary>
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.
---
Full diff: https://github.com/llvm/llvm-project/pull/116298.diff
3 Files Affected:
- (modified) lldb/include/lldb/Target/StackFrame.h (+12)
- (modified) lldb/source/API/SBFrame.cpp (+6-52)
- (modified) lldb/source/Target/StackFrame.cpp (+51)
``````````diff
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)
``````````
</details>
https://github.com/llvm/llvm-project/pull/116298
More information about the lldb-commits
mailing list