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 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits