-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[lldb/API] Hoist some of SBFrame logic to lldb_private::StackFrame (NFC) #116298
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
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 <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM. Ideally the SB API is just a shim around the private types.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add the check for a NULL InlinedFunctionInfo return, and this is good to go.
…FC) (llvm#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. Signed-off-by: Med Ismail Bennani <[email protected]> (cherry picked from commit 9c7701f)
@llvm/pr-subscribers-lldb Author: Med Ismail Bennani (medismailben) ChangesThis 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:
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)
|
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.