[Lldb-commits] [lldb] [lldb] Return *const* UnwindPlan pointers from FuncUnwinders (PR #133247)
via lldb-commits
lldb-commits at lists.llvm.org
Thu Mar 27 05:58:50 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-lldb
Author: Pavel Labath (labath)
<details>
<summary>Changes</summary>
These plans are cached and accessed from multiple threads. Modifying them would be a Bad Idea(tm).
---
Patch is 48.49 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/133247.diff
7 Files Affected:
- (modified) lldb/include/lldb/Symbol/FuncUnwinders.h (+41-37)
- (modified) lldb/include/lldb/Symbol/UnwindPlan.h (+2-2)
- (modified) lldb/include/lldb/Target/RegisterContextUnwind.h (+9-7)
- (modified) lldb/source/Commands/CommandObjectTarget.cpp (+49-57)
- (modified) lldb/source/Symbol/FuncUnwinders.cpp (+105-102)
- (modified) lldb/source/Symbol/UnwindPlan.cpp (+1-1)
- (modified) lldb/source/Target/RegisterContextUnwind.cpp (+40-44)
``````````diff
diff --git a/lldb/include/lldb/Symbol/FuncUnwinders.h b/lldb/include/lldb/Symbol/FuncUnwinders.h
index 1d4c28324e90f..479ccf87b6e2c 100644
--- a/lldb/include/lldb/Symbol/FuncUnwinders.h
+++ b/lldb/include/lldb/Symbol/FuncUnwinders.h
@@ -36,18 +36,19 @@ class FuncUnwinders {
~FuncUnwinders();
- lldb::UnwindPlanSP GetUnwindPlanAtCallSite(Target &target, Thread &thread);
+ std::shared_ptr<const UnwindPlan> GetUnwindPlanAtCallSite(Target &target,
+ Thread &thread);
- lldb::UnwindPlanSP GetUnwindPlanAtNonCallSite(Target &target,
- lldb_private::Thread &thread);
+ std::shared_ptr<const UnwindPlan>
+ GetUnwindPlanAtNonCallSite(Target &target, lldb_private::Thread &thread);
- lldb::UnwindPlanSP GetUnwindPlanFastUnwind(Target &target,
- lldb_private::Thread &thread);
+ std::shared_ptr<const UnwindPlan>
+ GetUnwindPlanFastUnwind(Target &target, lldb_private::Thread &thread);
- lldb::UnwindPlanSP
+ std::shared_ptr<const UnwindPlan>
GetUnwindPlanArchitectureDefault(lldb_private::Thread &thread);
- lldb::UnwindPlanSP
+ std::shared_ptr<const UnwindPlan>
GetUnwindPlanArchitectureDefaultAtFunctionEntry(lldb_private::Thread &thread);
Address &GetFirstNonPrologueInsn(Target &target);
@@ -77,32 +78,34 @@ class FuncUnwinders {
// used. Instead, clients should ask for the *behavior* they are looking for,
// using one of the above UnwindPlan retrieval methods.
- lldb::UnwindPlanSP GetAssemblyUnwindPlan(Target &target, Thread &thread);
+ std::shared_ptr<const UnwindPlan> GetAssemblyUnwindPlan(Target &target,
+ Thread &thread);
- lldb::UnwindPlanSP GetObjectFileUnwindPlan(Target &target);
+ std::shared_ptr<const UnwindPlan> GetObjectFileUnwindPlan(Target &target);
- lldb::UnwindPlanSP GetObjectFileAugmentedUnwindPlan(Target &target,
- Thread &thread);
+ std::shared_ptr<const UnwindPlan>
+ GetObjectFileAugmentedUnwindPlan(Target &target, Thread &thread);
- lldb::UnwindPlanSP GetEHFrameUnwindPlan(Target &target);
+ std::shared_ptr<const UnwindPlan> GetEHFrameUnwindPlan(Target &target);
- lldb::UnwindPlanSP GetEHFrameAugmentedUnwindPlan(Target &target,
- Thread &thread);
+ std::shared_ptr<const UnwindPlan>
+ GetEHFrameAugmentedUnwindPlan(Target &target, Thread &thread);
- lldb::UnwindPlanSP GetDebugFrameUnwindPlan(Target &target);
+ std::shared_ptr<const UnwindPlan> GetDebugFrameUnwindPlan(Target &target);
- lldb::UnwindPlanSP GetDebugFrameAugmentedUnwindPlan(Target &target,
- Thread &thread);
+ std::shared_ptr<const UnwindPlan>
+ GetDebugFrameAugmentedUnwindPlan(Target &target, Thread &thread);
- lldb::UnwindPlanSP GetCompactUnwindUnwindPlan(Target &target);
+ std::shared_ptr<const UnwindPlan> GetCompactUnwindUnwindPlan(Target &target);
- lldb::UnwindPlanSP GetArmUnwindUnwindPlan(Target &target);
+ std::shared_ptr<const UnwindPlan> GetArmUnwindUnwindPlan(Target &target);
- lldb::UnwindPlanSP GetSymbolFileUnwindPlan(Thread &thread);
+ std::shared_ptr<const UnwindPlan> GetSymbolFileUnwindPlan(Thread &thread);
- lldb::UnwindPlanSP GetArchDefaultUnwindPlan(Thread &thread);
+ std::shared_ptr<const UnwindPlan> GetArchDefaultUnwindPlan(Thread &thread);
- lldb::UnwindPlanSP GetArchDefaultAtFuncEntryUnwindPlan(Thread &thread);
+ std::shared_ptr<const UnwindPlan>
+ GetArchDefaultAtFuncEntryUnwindPlan(Thread &thread);
private:
lldb::UnwindAssemblySP GetUnwindAssemblyProfiler(Target &target);
@@ -113,7 +116,8 @@ class FuncUnwinders {
// unwind rule for the pc, and LazyBoolCalculate if it was unable to
// determine this for some reason.
lldb_private::LazyBool CompareUnwindPlansForIdenticalInitialPCLocation(
- Thread &thread, const lldb::UnwindPlanSP &a, const lldb::UnwindPlanSP &b);
+ Thread &thread, const std::shared_ptr<const UnwindPlan> &a,
+ const std::shared_ptr<const UnwindPlan> &b);
UnwindTable &m_unwind_table;
@@ -129,22 +133,22 @@ class FuncUnwinders {
std::recursive_mutex m_mutex;
- lldb::UnwindPlanSP m_unwind_plan_assembly_sp;
- lldb::UnwindPlanSP m_unwind_plan_object_file_sp;
- lldb::UnwindPlanSP m_unwind_plan_eh_frame_sp;
- lldb::UnwindPlanSP m_unwind_plan_debug_frame_sp;
+ std::shared_ptr<const UnwindPlan> m_unwind_plan_assembly_sp;
+ std::shared_ptr<const UnwindPlan> m_unwind_plan_object_file_sp;
+ std::shared_ptr<const UnwindPlan> m_unwind_plan_eh_frame_sp;
+ std::shared_ptr<const UnwindPlan> m_unwind_plan_debug_frame_sp;
// augmented by assembly inspection so it's valid everywhere
- lldb::UnwindPlanSP m_unwind_plan_object_file_augmented_sp;
- lldb::UnwindPlanSP m_unwind_plan_eh_frame_augmented_sp;
- lldb::UnwindPlanSP m_unwind_plan_debug_frame_augmented_sp;
-
- std::vector<lldb::UnwindPlanSP> m_unwind_plan_compact_unwind;
- lldb::UnwindPlanSP m_unwind_plan_arm_unwind_sp;
- lldb::UnwindPlanSP m_unwind_plan_symbol_file_sp;
- lldb::UnwindPlanSP m_unwind_plan_fast_sp;
- lldb::UnwindPlanSP m_unwind_plan_arch_default_sp;
- lldb::UnwindPlanSP m_unwind_plan_arch_default_at_func_entry_sp;
+ std::shared_ptr<const UnwindPlan> m_unwind_plan_object_file_augmented_sp;
+ std::shared_ptr<const UnwindPlan> m_unwind_plan_eh_frame_augmented_sp;
+ std::shared_ptr<const UnwindPlan> m_unwind_plan_debug_frame_augmented_sp;
+
+ std::vector<std::shared_ptr<const UnwindPlan>> m_unwind_plan_compact_unwind;
+ std::shared_ptr<const UnwindPlan> m_unwind_plan_arm_unwind_sp;
+ std::shared_ptr<const UnwindPlan> m_unwind_plan_symbol_file_sp;
+ std::shared_ptr<const UnwindPlan> m_unwind_plan_fast_sp;
+ std::shared_ptr<const UnwindPlan> m_unwind_plan_arch_default_sp;
+ std::shared_ptr<const UnwindPlan> m_unwind_plan_arch_default_at_func_entry_sp;
// Fetching the UnwindPlans can be expensive - if we've already attempted to
// get one & failed, don't try again.
diff --git a/lldb/include/lldb/Symbol/UnwindPlan.h b/lldb/include/lldb/Symbol/UnwindPlan.h
index ddc54a9fdc8ae..80517de5a7e9c 100644
--- a/lldb/include/lldb/Symbol/UnwindPlan.h
+++ b/lldb/include/lldb/Symbol/UnwindPlan.h
@@ -464,7 +464,7 @@ class UnwindPlan {
m_return_addr_register = regnum;
}
- uint32_t GetReturnAddressRegister() { return m_return_addr_register; }
+ uint32_t GetReturnAddressRegister() const { return m_return_addr_register; }
uint32_t GetInitialCFARegister() const {
if (m_row_list.empty())
@@ -479,7 +479,7 @@ class UnwindPlan {
m_plan_valid_ranges = std::move(ranges);
}
- bool PlanValidAtAddress(Address addr);
+ bool PlanValidAtAddress(Address addr) const;
bool IsValidRowIndex(uint32_t idx) const;
diff --git a/lldb/include/lldb/Target/RegisterContextUnwind.h b/lldb/include/lldb/Target/RegisterContextUnwind.h
index 6cd918fedc003..98e25859d4eab 100644
--- a/lldb/include/lldb/Target/RegisterContextUnwind.h
+++ b/lldb/include/lldb/Target/RegisterContextUnwind.h
@@ -127,7 +127,8 @@ class RegisterContextUnwind : public lldb_private::RegisterContext {
/// Check if the given unwind plan indicates a signal trap handler, and
/// update frame type and symbol context if so.
- void PropagateTrapHandlerFlagFromUnwindPlan(lldb::UnwindPlanSP unwind_plan);
+ void PropagateTrapHandlerFlagFromUnwindPlan(
+ std::shared_ptr<const UnwindPlan> unwind_plan);
// Provide a location for where THIS function saved the CALLER's register
// value
@@ -194,16 +195,17 @@ class RegisterContextUnwind : public lldb_private::RegisterContext {
const UnwindPlan::Row::FAValue &fa,
lldb::addr_t &address);
- lldb::UnwindPlanSP GetFastUnwindPlanForFrame();
+ std::shared_ptr<const UnwindPlan> GetFastUnwindPlanForFrame();
- lldb::UnwindPlanSP GetFullUnwindPlanForFrame();
+ std::shared_ptr<const UnwindPlan> GetFullUnwindPlanForFrame();
void UnwindLogMsg(const char *fmt, ...) __attribute__((format(printf, 2, 3)));
void UnwindLogMsgVerbose(const char *fmt, ...)
__attribute__((format(printf, 2, 3)));
- bool IsUnwindPlanValidForCurrentPC(lldb::UnwindPlanSP unwind_plan_sp);
+ bool IsUnwindPlanValidForCurrentPC(
+ std::shared_ptr<const UnwindPlan> unwind_plan_sp);
lldb::addr_t GetReturnAddressHint(int32_t plan_offset);
@@ -215,9 +217,9 @@ class RegisterContextUnwind : public lldb_private::RegisterContext {
// i.e. where THIS frame saved them
///
- lldb::UnwindPlanSP m_fast_unwind_plan_sp; // may be NULL
- lldb::UnwindPlanSP m_full_unwind_plan_sp;
- lldb::UnwindPlanSP m_fallback_unwind_plan_sp; // may be NULL
+ std::shared_ptr<const UnwindPlan> m_fast_unwind_plan_sp; // may be NULL
+ std::shared_ptr<const UnwindPlan> m_full_unwind_plan_sp;
+ std::shared_ptr<const UnwindPlan> m_fallback_unwind_plan_sp; // may be NULL
bool m_all_registers_available; // Can we retrieve all regs or just
// nonvolatile regs?
diff --git a/lldb/source/Commands/CommandObjectTarget.cpp b/lldb/source/Commands/CommandObjectTarget.cpp
index c77bddb4af061..3f7d3007ed168 100644
--- a/lldb/source/Commands/CommandObjectTarget.cpp
+++ b/lldb/source/Commands/CommandObjectTarget.cpp
@@ -3641,77 +3641,70 @@ class CommandObjectTargetModulesShowUnwind : public CommandObjectParsed {
result.GetOutputStream().Printf("\n");
- UnwindPlanSP non_callsite_unwind_plan =
- func_unwinders_sp->GetUnwindPlanAtNonCallSite(*target, *thread);
- if (non_callsite_unwind_plan) {
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
+ func_unwinders_sp->GetUnwindPlanAtNonCallSite(*target, *thread)) {
result.GetOutputStream().Printf(
"Asynchronous (not restricted to call-sites) UnwindPlan is '%s'\n",
- non_callsite_unwind_plan->GetSourceName().AsCString());
+ plan_sp->GetSourceName().AsCString());
}
- UnwindPlanSP callsite_unwind_plan =
- func_unwinders_sp->GetUnwindPlanAtCallSite(*target, *thread);
- if (callsite_unwind_plan) {
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
+ func_unwinders_sp->GetUnwindPlanAtCallSite(*target, *thread)) {
result.GetOutputStream().Printf(
"Synchronous (restricted to call-sites) UnwindPlan is '%s'\n",
- callsite_unwind_plan->GetSourceName().AsCString());
+ plan_sp->GetSourceName().AsCString());
}
- UnwindPlanSP fast_unwind_plan =
- func_unwinders_sp->GetUnwindPlanFastUnwind(*target, *thread);
- if (fast_unwind_plan) {
- result.GetOutputStream().Printf(
- "Fast UnwindPlan is '%s'\n",
- fast_unwind_plan->GetSourceName().AsCString());
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
+ func_unwinders_sp->GetUnwindPlanFastUnwind(*target, *thread)) {
+ result.GetOutputStream().Printf("Fast UnwindPlan is '%s'\n",
+ plan_sp->GetSourceName().AsCString());
}
result.GetOutputStream().Printf("\n");
- UnwindPlanSP assembly_sp =
- func_unwinders_sp->GetAssemblyUnwindPlan(*target, *thread);
- if (assembly_sp) {
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
+ func_unwinders_sp->GetAssemblyUnwindPlan(*target, *thread)) {
result.GetOutputStream().Printf(
"Assembly language inspection UnwindPlan:\n");
- assembly_sp->Dump(result.GetOutputStream(), thread.get(),
- LLDB_INVALID_ADDRESS);
+ plan_sp->Dump(result.GetOutputStream(), thread.get(),
+ LLDB_INVALID_ADDRESS);
result.GetOutputStream().Printf("\n");
}
- UnwindPlanSP of_unwind_sp =
- func_unwinders_sp->GetObjectFileUnwindPlan(*target);
- if (of_unwind_sp) {
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
+ func_unwinders_sp->GetObjectFileUnwindPlan(*target)) {
result.GetOutputStream().Printf("object file UnwindPlan:\n");
- of_unwind_sp->Dump(result.GetOutputStream(), thread.get(),
- LLDB_INVALID_ADDRESS);
+ plan_sp->Dump(result.GetOutputStream(), thread.get(),
+ LLDB_INVALID_ADDRESS);
result.GetOutputStream().Printf("\n");
}
- UnwindPlanSP of_unwind_augmented_sp =
- func_unwinders_sp->GetObjectFileAugmentedUnwindPlan(*target, *thread);
- if (of_unwind_augmented_sp) {
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
+ func_unwinders_sp->GetObjectFileAugmentedUnwindPlan(*target,
+ *thread)) {
result.GetOutputStream().Printf("object file augmented UnwindPlan:\n");
- of_unwind_augmented_sp->Dump(result.GetOutputStream(), thread.get(),
- LLDB_INVALID_ADDRESS);
+ plan_sp->Dump(result.GetOutputStream(), thread.get(),
+ LLDB_INVALID_ADDRESS);
result.GetOutputStream().Printf("\n");
}
- UnwindPlanSP ehframe_sp =
- func_unwinders_sp->GetEHFrameUnwindPlan(*target);
- if (ehframe_sp) {
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
+ func_unwinders_sp->GetEHFrameUnwindPlan(*target)) {
result.GetOutputStream().Printf("eh_frame UnwindPlan:\n");
- ehframe_sp->Dump(result.GetOutputStream(), thread.get(),
- LLDB_INVALID_ADDRESS);
+ plan_sp->Dump(result.GetOutputStream(), thread.get(),
+ LLDB_INVALID_ADDRESS);
result.GetOutputStream().Printf("\n");
}
- UnwindPlanSP ehframe_augmented_sp =
- func_unwinders_sp->GetEHFrameAugmentedUnwindPlan(*target, *thread);
- if (ehframe_augmented_sp) {
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
+ func_unwinders_sp->GetEHFrameAugmentedUnwindPlan(*target,
+ *thread)) {
result.GetOutputStream().Printf("eh_frame augmented UnwindPlan:\n");
- ehframe_augmented_sp->Dump(result.GetOutputStream(), thread.get(),
- LLDB_INVALID_ADDRESS);
+ plan_sp->Dump(result.GetOutputStream(), thread.get(),
+ LLDB_INVALID_ADDRESS);
result.GetOutputStream().Printf("\n");
}
- if (UnwindPlanSP plan_sp =
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
func_unwinders_sp->GetDebugFrameUnwindPlan(*target)) {
result.GetOutputStream().Printf("debug_frame UnwindPlan:\n");
plan_sp->Dump(result.GetOutputStream(), thread.get(),
@@ -3719,7 +3712,7 @@ class CommandObjectTargetModulesShowUnwind : public CommandObjectParsed {
result.GetOutputStream().Printf("\n");
}
- if (UnwindPlanSP plan_sp =
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
func_unwinders_sp->GetDebugFrameAugmentedUnwindPlan(*target,
*thread)) {
result.GetOutputStream().Printf("debug_frame augmented UnwindPlan:\n");
@@ -3728,36 +3721,35 @@ class CommandObjectTargetModulesShowUnwind : public CommandObjectParsed {
result.GetOutputStream().Printf("\n");
}
- UnwindPlanSP arm_unwind_sp =
- func_unwinders_sp->GetArmUnwindUnwindPlan(*target);
- if (arm_unwind_sp) {
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
+ func_unwinders_sp->GetArmUnwindUnwindPlan(*target)) {
result.GetOutputStream().Printf("ARM.exidx unwind UnwindPlan:\n");
- arm_unwind_sp->Dump(result.GetOutputStream(), thread.get(),
- LLDB_INVALID_ADDRESS);
+ plan_sp->Dump(result.GetOutputStream(), thread.get(),
+ LLDB_INVALID_ADDRESS);
result.GetOutputStream().Printf("\n");
}
- if (UnwindPlanSP symfile_plan_sp =
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
func_unwinders_sp->GetSymbolFileUnwindPlan(*thread)) {
result.GetOutputStream().Printf("Symbol file UnwindPlan:\n");
- symfile_plan_sp->Dump(result.GetOutputStream(), thread.get(),
- LLDB_INVALID_ADDRESS);
+ plan_sp->Dump(result.GetOutputStream(), thread.get(),
+ LLDB_INVALID_ADDRESS);
result.GetOutputStream().Printf("\n");
}
- UnwindPlanSP compact_unwind_sp =
- func_unwinders_sp->GetCompactUnwindUnwindPlan(*target);
- if (compact_unwind_sp) {
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
+ func_unwinders_sp->GetCompactUnwindUnwindPlan(*target)) {
result.GetOutputStream().Printf("Compact unwind UnwindPlan:\n");
- compact_unwind_sp->Dump(result.GetOutputStream(), thread.get(),
- LLDB_INVALID_ADDRESS);
+ plan_sp->Dump(result.GetOutputStream(), thread.get(),
+ LLDB_INVALID_ADDRESS);
result.GetOutputStream().Printf("\n");
}
- if (fast_unwind_plan) {
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
+ func_unwinders_sp->GetUnwindPlanFastUnwind(*target, *thread)) {
result.GetOutputStream().Printf("Fast UnwindPlan:\n");
- fast_unwind_plan->Dump(result.GetOutputStream(), thread.get(),
- LLDB_INVALID_ADDRESS);
+ plan_sp->Dump(result.GetOutputStream(), thread.get(),
+ LLDB_INVALID_ADDRESS);
result.GetOutputStream().Printf("\n");
}
diff --git a/lldb/source/Symbol/FuncUnwinders.cpp b/lldb/source/Symbol/FuncUnwinders.cpp
index a5ca7b094c949..a74029d8343c7 100644
--- a/lldb/source/Symbol/FuncUnwinders.cpp
+++ b/lldb/source/Symbol/FuncUnwinders.cpp
@@ -71,40 +71,47 @@ FuncUnwinders::FuncUnwinders(UnwindTable &unwind_table, Address addr,
FuncUnwinders::~FuncUnwinders() = default;
-UnwindPlanSP FuncUnwinders::GetUnwindPlanAtCallSite(Target &target,
- Thread &thread) {
+std::shared_ptr<const UnwindPlan>
+FuncUnwinders::GetUnwindPlanAtCallSite(Target &target, Thread &thread) {
std::lock_guard<std::recursive_mutex> guard(m_mutex);
- if (UnwindPlanSP plan_sp = GetObjectFileUnwindPlan(target))
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
+ GetObjectFileUnwindPlan(target))
return plan_sp;
- if (UnwindPlanSP plan_sp = GetSymbolFileUnwindPlan(thread))
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
+ GetSymbolFileUnwindPlan(thread))
return plan_sp;
- if (UnwindPlanSP plan_sp = GetDebugFrameUnwindPlan(target))
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
+ GetDebugFrameUnwindPlan(target))
return plan_sp;
- if (UnwindPlanSP plan_sp = GetEHFrameUnwindPlan(target))
+ if (std::shared_ptr<const UnwindPlan> plan_sp = GetEHFrameUnwindPlan(target))
return plan_sp;
- if (UnwindPlanSP plan_sp = GetCompactUnwindUnwindPlan(target))
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
+ GetCompactUnwindUnwindPlan(target))
return plan_sp;
- if (UnwindPlanSP plan_sp = GetArmUnwindUnwindPlan(target))
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
+ GetArmUnwindUnwindPlan(target))
return plan_sp;
return nullptr;
}
-UnwindPlanSP FuncUnwinders::GetCompactUnwindUnwindPlan(Target &target) {
+std::shared_ptr<const UnwindPlan>
+FuncUnwinders::GetCompactUnwindUnwindPlan(Target &target) {
std::lock_guard<std::recursive_mutex> guard(m_mutex);
if (m_unwind_plan_compact_unwind.size() > 0)
return m_unwind_plan_compact_unwind[0]; // FIXME support multiple compact
// unwind plans for one func
if (m_tried_unwind_plan_compact_unwind)
- return UnwindPlanSP();
+ return nullptr;
m_tried_unwind_plan_compact_unwind = true;
if (m_range.GetBaseAddress().IsValid()) {
Address current_pc(m_range.GetBaseAddress());
CompactUnwindInfo *compact_unwind = m_unwind_table.GetCompactUnwindInfo();
if (compact_unwind) {
- UnwindPlanSP unwind_plan_sp(new UnwindPlan(lldb::eRegisterKindGeneric));...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/133247
More information about the lldb-commits
mailing list