[Lldb-commits] [lldb] [lldb] Modernize ABI-based unwind plan creation (PR #128505)
Pavel Labath via lldb-commits
lldb-commits at lists.llvm.org
Mon Feb 24 04:44:09 PST 2025
https://github.com/labath created https://github.com/llvm/llvm-project/pull/128505
Replace the by-ref return value with an actual result.
>From 31ce87a2aef9237862f0aa2f4b258d6abdf38b55 Mon Sep 17 00:00:00 2001
From: Pavel Labath <pavel at labath.sk>
Date: Mon, 24 Feb 2025 13:40:03 +0100
Subject: [PATCH] [lldb] Modernize ABI-based unwind plan creation
Replace the by-ref return value with an actual result.
---
lldb/include/lldb/Symbol/UnwindPlan.h | 5 ++
lldb/include/lldb/Target/ABI.h | 5 +-
lldb/source/Commands/CommandObjectTarget.cpp | 14 +++---
.../Plugins/ABI/AArch64/ABIMacOSX_arm64.cpp | 38 ++++++---------
.../Plugins/ABI/AArch64/ABIMacOSX_arm64.h | 5 +-
.../Plugins/ABI/AArch64/ABISysV_arm64.cpp | 46 ++++++++-----------
.../Plugins/ABI/AArch64/ABISysV_arm64.h | 5 +-
lldb/source/Plugins/ABI/ARC/ABISysV_arc.cpp | 22 ++++-----
lldb/source/Plugins/ABI/ARC/ABISysV_arc.h | 5 +-
lldb/source/Plugins/ABI/ARM/ABIMacOSX_arm.cpp | 38 ++++++---------
lldb/source/Plugins/ABI/ARM/ABIMacOSX_arm.h | 5 +-
lldb/source/Plugins/ABI/ARM/ABISysV_arm.cpp | 39 ++++++----------
lldb/source/Plugins/ABI/ARM/ABISysV_arm.h | 5 +-
.../Plugins/ABI/Hexagon/ABISysV_hexagon.cpp | 34 ++++++--------
.../Plugins/ABI/Hexagon/ABISysV_hexagon.h | 5 +-
.../ABI/LoongArch/ABISysV_loongarch.cpp | 31 ++++++-------
.../Plugins/ABI/LoongArch/ABISysV_loongarch.h | 5 +-
.../Plugins/ABI/MSP430/ABISysV_msp430.cpp | 30 ++++++------
.../Plugins/ABI/MSP430/ABISysV_msp430.h | 5 +-
lldb/source/Plugins/ABI/Mips/ABISysV_mips.cpp | 38 +++++++--------
lldb/source/Plugins/ABI/Mips/ABISysV_mips.h | 5 +-
.../Plugins/ABI/Mips/ABISysV_mips64.cpp | 38 +++++++--------
lldb/source/Plugins/ABI/Mips/ABISysV_mips64.h | 5 +-
.../Plugins/ABI/PowerPC/ABISysV_ppc.cpp | 38 +++++++--------
lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc.h | 5 +-
.../Plugins/ABI/PowerPC/ABISysV_ppc64.cpp | 38 +++++++--------
.../Plugins/ABI/PowerPC/ABISysV_ppc64.h | 6 +--
.../Plugins/ABI/RISCV/ABISysV_riscv.cpp | 31 ++++++-------
lldb/source/Plugins/ABI/RISCV/ABISysV_riscv.h | 5 +-
.../Plugins/ABI/SystemZ/ABISysV_s390x.cpp | 18 ++++----
.../Plugins/ABI/SystemZ/ABISysV_s390x.h | 5 +-
.../source/Plugins/ABI/X86/ABIMacOSX_i386.cpp | 33 ++++++-------
lldb/source/Plugins/ABI/X86/ABIMacOSX_i386.h | 5 +-
lldb/source/Plugins/ABI/X86/ABISysV_i386.cpp | 33 ++++++-------
lldb/source/Plugins/ABI/X86/ABISysV_i386.h | 5 +-
.../source/Plugins/ABI/X86/ABISysV_x86_64.cpp | 33 ++++++-------
lldb/source/Plugins/ABI/X86/ABISysV_x86_64.h | 5 +-
.../Plugins/ABI/X86/ABIWindows_x86_64.cpp | 32 ++++++-------
.../Plugins/ABI/X86/ABIWindows_x86_64.h | 5 +-
.../UnwindAssembly/x86/UnwindAssembly-x86.cpp | 8 ++--
lldb/source/Symbol/FuncUnwinders.cpp | 20 ++------
lldb/source/Target/RegisterContextUnwind.cpp | 12 ++---
42 files changed, 320 insertions(+), 445 deletions(-)
diff --git a/lldb/include/lldb/Symbol/UnwindPlan.h b/lldb/include/lldb/Symbol/UnwindPlan.h
index 48c9bef76857c..9bef35fd62641 100644
--- a/lldb/include/lldb/Symbol/UnwindPlan.h
+++ b/lldb/include/lldb/Symbol/UnwindPlan.h
@@ -450,6 +450,11 @@ class UnwindPlan {
for (const RowSP &row_sp : rhs.m_row_list)
m_row_list.emplace_back(new Row(*row_sp));
}
+ UnwindPlan(UnwindPlan &&rhs) = default;
+ UnwindPlan &operator=(const UnwindPlan &rhs) {
+ return *this = UnwindPlan(rhs); // NB: moving from a temporary (deep) copy
+ }
+ UnwindPlan &operator=(UnwindPlan &&) = default;
~UnwindPlan() = default;
diff --git a/lldb/include/lldb/Target/ABI.h b/lldb/include/lldb/Target/ABI.h
index dd941d1c905c1..1a1f1724222e3 100644
--- a/lldb/include/lldb/Target/ABI.h
+++ b/lldb/include/lldb/Target/ABI.h
@@ -13,6 +13,7 @@
#include "lldb/Symbol/UnwindPlan.h"
#include "lldb/Target/DynamicRegisterInfo.h"
#include "lldb/Utility/Status.h"
+#include "lldb/lldb-forward.h"
#include "lldb/lldb-private.h"
#include "llvm/ADT/ArrayRef.h"
@@ -96,9 +97,9 @@ class ABI : public PluginInterface {
lldb::ProcessSP GetProcessSP() const { return m_process_wp.lock(); }
public:
- virtual bool CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) = 0;
+ virtual lldb::UnwindPlanSP CreateFunctionEntryUnwindPlan() = 0;
- virtual bool CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) = 0;
+ virtual lldb::UnwindPlanSP CreateDefaultUnwindPlan() = 0;
virtual bool RegisterIsVolatile(const RegisterInfo *reg_info) = 0;
diff --git a/lldb/source/Commands/CommandObjectTarget.cpp b/lldb/source/Commands/CommandObjectTarget.cpp
index bd9470b804949..c77bddb4af061 100644
--- a/lldb/source/Commands/CommandObjectTarget.cpp
+++ b/lldb/source/Commands/CommandObjectTarget.cpp
@@ -3763,20 +3763,18 @@ class CommandObjectTargetModulesShowUnwind : public CommandObjectParsed {
ABISP abi_sp = process->GetABI();
if (abi_sp) {
- UnwindPlan arch_default(lldb::eRegisterKindGeneric);
- if (abi_sp->CreateDefaultUnwindPlan(arch_default)) {
+ if (UnwindPlanSP plan_sp = abi_sp->CreateDefaultUnwindPlan()) {
result.GetOutputStream().Printf("Arch default UnwindPlan:\n");
- arch_default.Dump(result.GetOutputStream(), thread.get(),
- LLDB_INVALID_ADDRESS);
+ plan_sp->Dump(result.GetOutputStream(), thread.get(),
+ LLDB_INVALID_ADDRESS);
result.GetOutputStream().Printf("\n");
}
- UnwindPlan arch_entry(lldb::eRegisterKindGeneric);
- if (abi_sp->CreateFunctionEntryUnwindPlan(arch_entry)) {
+ if (UnwindPlanSP plan_sp = abi_sp->CreateFunctionEntryUnwindPlan()) {
result.GetOutputStream().Printf(
"Arch default at entry point UnwindPlan:\n");
- arch_entry.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/Plugins/ABI/AArch64/ABIMacOSX_arm64.cpp b/lldb/source/Plugins/ABI/AArch64/ABIMacOSX_arm64.cpp
index cb121c14048f0..d208c6f874692 100644
--- a/lldb/source/Plugins/ABI/AArch64/ABIMacOSX_arm64.cpp
+++ b/lldb/source/Plugins/ABI/AArch64/ABIMacOSX_arm64.cpp
@@ -343,10 +343,7 @@ ABIMacOSX_arm64::SetReturnValueObject(lldb::StackFrameSP &frame_sp,
return error;
}
-bool ABIMacOSX_arm64::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
- unwind_plan.Clear();
- unwind_plan.SetRegisterKind(eRegisterKindDWARF);
-
+UnwindPlanSP ABIMacOSX_arm64::CreateFunctionEntryUnwindPlan() {
uint32_t lr_reg_num = arm64_dwarf::lr;
uint32_t sp_reg_num = arm64_dwarf::sp;
uint32_t pc_reg_num = arm64_dwarf::pc;
@@ -356,23 +353,17 @@ bool ABIMacOSX_arm64::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
// Our previous Call Frame Address is the stack pointer
row->GetCFAValue().SetIsRegisterPlusOffset(sp_reg_num, 0);
- // Our previous PC is in the LR
+ // Our previous PC is in the LR, all other registers are the same.
row->SetRegisterLocationToRegister(pc_reg_num, lr_reg_num, true);
- unwind_plan.AppendRow(row);
-
- // All other registers are the same.
-
- unwind_plan.SetSourceName("arm64 at-func-entry default");
- unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
-
- return true;
+ auto plan_sp = std::make_shared<UnwindPlan>(eRegisterKindDWARF);
+ plan_sp->AppendRow(row);
+ plan_sp->SetSourceName("arm64 at-func-entry default");
+ plan_sp->SetSourcedFromCompiler(eLazyBoolNo);
+ return plan_sp;
}
-bool ABIMacOSX_arm64::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
- unwind_plan.Clear();
- unwind_plan.SetRegisterKind(eRegisterKindDWARF);
-
+UnwindPlanSP ABIMacOSX_arm64::CreateDefaultUnwindPlan() {
uint32_t fp_reg_num = arm64_dwarf::fp;
uint32_t pc_reg_num = arm64_dwarf::pc;
@@ -386,12 +377,13 @@ bool ABIMacOSX_arm64::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
row->SetRegisterLocationToAtCFAPlusOffset(fp_reg_num, ptr_size * -2, true);
row->SetRegisterLocationToAtCFAPlusOffset(pc_reg_num, ptr_size * -1, true);
- unwind_plan.AppendRow(row);
- unwind_plan.SetSourceName("arm64-apple-darwin default unwind plan");
- unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
- unwind_plan.SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
- unwind_plan.SetUnwindPlanForSignalTrap(eLazyBoolNo);
- return true;
+ auto plan_sp = std::make_shared<UnwindPlan>(eRegisterKindDWARF);
+ plan_sp->AppendRow(row);
+ plan_sp->SetSourceName("arm64-apple-darwin default unwind plan");
+ plan_sp->SetSourcedFromCompiler(eLazyBoolNo);
+ plan_sp->SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
+ plan_sp->SetUnwindPlanForSignalTrap(eLazyBoolNo);
+ return plan_sp;
}
// AAPCS64 (Procedure Call Standard for the ARM 64-bit Architecture) says
diff --git a/lldb/source/Plugins/ABI/AArch64/ABIMacOSX_arm64.h b/lldb/source/Plugins/ABI/AArch64/ABIMacOSX_arm64.h
index 025a7a3fc368b..94a60327c6181 100644
--- a/lldb/source/Plugins/ABI/AArch64/ABIMacOSX_arm64.h
+++ b/lldb/source/Plugins/ABI/AArch64/ABIMacOSX_arm64.h
@@ -27,10 +27,9 @@ class ABIMacOSX_arm64 : public ABIAArch64 {
bool GetArgumentValues(lldb_private::Thread &thread,
lldb_private::ValueList &values) const override;
- bool
- CreateFunctionEntryUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateFunctionEntryUnwindPlan() override;
- bool CreateDefaultUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateDefaultUnwindPlan() override;
bool RegisterIsVolatile(const lldb_private::RegisterInfo *reg_info) override;
diff --git a/lldb/source/Plugins/ABI/AArch64/ABISysV_arm64.cpp b/lldb/source/Plugins/ABI/AArch64/ABISysV_arm64.cpp
index 74047ea65788c..280ec5ba37100 100644
--- a/lldb/source/Plugins/ABI/AArch64/ABISysV_arm64.cpp
+++ b/lldb/source/Plugins/ABI/AArch64/ABISysV_arm64.cpp
@@ -391,35 +391,27 @@ Status ABISysV_arm64::SetReturnValueObject(lldb::StackFrameSP &frame_sp,
return error;
}
-bool ABISysV_arm64::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
- unwind_plan.Clear();
- unwind_plan.SetRegisterKind(eRegisterKindDWARF);
-
+UnwindPlanSP ABISysV_arm64::CreateFunctionEntryUnwindPlan() {
uint32_t lr_reg_num = arm64_dwarf::lr;
uint32_t sp_reg_num = arm64_dwarf::sp;
UnwindPlan::RowSP row(new UnwindPlan::Row);
- // Our previous Call Frame Address is the stack pointer
+ // Our previous Call Frame Address is the stack pointer, all other registers
+ // are the same.
row->GetCFAValue().SetIsRegisterPlusOffset(sp_reg_num, 0);
- unwind_plan.AppendRow(row);
- unwind_plan.SetReturnAddressRegister(lr_reg_num);
-
- // All other registers are the same.
-
- unwind_plan.SetSourceName("arm64 at-func-entry default");
- unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
- unwind_plan.SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
- unwind_plan.SetUnwindPlanForSignalTrap(eLazyBoolNo);
-
- return true;
+ auto plan_sp = std::make_shared<UnwindPlan>(eRegisterKindDWARF);
+ plan_sp->AppendRow(row);
+ plan_sp->SetReturnAddressRegister(lr_reg_num);
+ plan_sp->SetSourceName("arm64 at-func-entry default");
+ plan_sp->SetSourcedFromCompiler(eLazyBoolNo);
+ plan_sp->SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
+ plan_sp->SetUnwindPlanForSignalTrap(eLazyBoolNo);
+ return plan_sp;
}
-bool ABISysV_arm64::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
- unwind_plan.Clear();
- unwind_plan.SetRegisterKind(eRegisterKindDWARF);
-
+UnwindPlanSP ABISysV_arm64::CreateDefaultUnwindPlan() {
uint32_t fp_reg_num = arm64_dwarf::fp;
uint32_t pc_reg_num = arm64_dwarf::pc;
@@ -433,13 +425,13 @@ bool ABISysV_arm64::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
row->SetRegisterLocationToAtCFAPlusOffset(fp_reg_num, ptr_size * -2, true);
row->SetRegisterLocationToAtCFAPlusOffset(pc_reg_num, ptr_size * -1, true);
- unwind_plan.AppendRow(row);
- unwind_plan.SetSourceName("arm64 default unwind plan");
- unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
- unwind_plan.SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
- unwind_plan.SetUnwindPlanForSignalTrap(eLazyBoolNo);
-
- return true;
+ auto plan_sp = std::make_shared<UnwindPlan>(eRegisterKindDWARF);
+ plan_sp->AppendRow(row);
+ plan_sp->SetSourceName("arm64 default unwind plan");
+ plan_sp->SetSourcedFromCompiler(eLazyBoolNo);
+ plan_sp->SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
+ plan_sp->SetUnwindPlanForSignalTrap(eLazyBoolNo);
+ return plan_sp;
}
// AAPCS64 (Procedure Call Standard for the ARM 64-bit Architecture) says
diff --git a/lldb/source/Plugins/ABI/AArch64/ABISysV_arm64.h b/lldb/source/Plugins/ABI/AArch64/ABISysV_arm64.h
index 01d4af62fa6ef..2b8e608d4caab 100644
--- a/lldb/source/Plugins/ABI/AArch64/ABISysV_arm64.h
+++ b/lldb/source/Plugins/ABI/AArch64/ABISysV_arm64.h
@@ -30,10 +30,9 @@ class ABISysV_arm64 : public ABIAArch64 {
SetReturnValueObject(lldb::StackFrameSP &frame_sp,
lldb::ValueObjectSP &new_value) override;
- bool
- CreateFunctionEntryUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateFunctionEntryUnwindPlan() override;
- bool CreateDefaultUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateDefaultUnwindPlan() override;
bool RegisterIsVolatile(const lldb_private::RegisterInfo *reg_info) override;
diff --git a/lldb/source/Plugins/ABI/ARC/ABISysV_arc.cpp b/lldb/source/Plugins/ABI/ARC/ABISysV_arc.cpp
index 6f60663ca51e1..a38396dc14635 100644
--- a/lldb/source/Plugins/ABI/ARC/ABISysV_arc.cpp
+++ b/lldb/source/Plugins/ABI/ARC/ABISysV_arc.cpp
@@ -555,29 +555,23 @@ ValueObjectSP ABISysV_arc::GetReturnValueObjectImpl(Thread &thread,
value, ConstString(""));
}
-bool ABISysV_arc::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
- unwind_plan.Clear();
- unwind_plan.SetRegisterKind(eRegisterKindDWARF);
-
+UnwindPlanSP ABISysV_arc::CreateFunctionEntryUnwindPlan() {
UnwindPlan::RowSP row(new UnwindPlan::Row);
// Our Call Frame Address is the stack pointer value.
row->GetCFAValue().SetIsRegisterPlusOffset(dwarf::sp, 0);
- // The previous PC is in the BLINK.
+ // The previous PC is in the BLINK, all other registers are the same.
row->SetRegisterLocationToRegister(dwarf::pc, dwarf::blink, true);
- unwind_plan.AppendRow(row);
-
- // All other registers are the same.
- unwind_plan.SetSourceName("arc at-func-entry default");
- unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
- return true;
+ auto plan_sp = std::make_shared<UnwindPlan>(eRegisterKindDWARF);
+ plan_sp->AppendRow(row);
+ plan_sp->SetSourceName("arc at-func-entry default");
+ plan_sp->SetSourcedFromCompiler(eLazyBoolNo);
+ return plan_sp;
}
-bool ABISysV_arc::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
- return false;
-}
+UnwindPlanSP ABISysV_arc::CreateDefaultUnwindPlan() { return nullptr; }
bool ABISysV_arc::RegisterIsVolatile(const RegisterInfo *reg_info) {
if (nullptr == reg_info)
diff --git a/lldb/source/Plugins/ABI/ARC/ABISysV_arc.h b/lldb/source/Plugins/ABI/ARC/ABISysV_arc.h
index de513453f2a2c..ac0c40c58937e 100644
--- a/lldb/source/Plugins/ABI/ARC/ABISysV_arc.h
+++ b/lldb/source/Plugins/ABI/ARC/ABISysV_arc.h
@@ -49,10 +49,9 @@ class ABISysV_arc : public lldb_private::RegInfoBasedABI {
lldb::ValueObjectSP GetReturnValueObjectImpl(lldb_private::Thread &thread,
llvm::Type &type) const override;
- bool
- CreateFunctionEntryUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateFunctionEntryUnwindPlan() override;
- bool CreateDefaultUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateDefaultUnwindPlan() override;
bool RegisterIsVolatile(const lldb_private::RegisterInfo *reg_info) override;
diff --git a/lldb/source/Plugins/ABI/ARM/ABIMacOSX_arm.cpp b/lldb/source/Plugins/ABI/ARM/ABIMacOSX_arm.cpp
index 6aadf652da781..d85f4a5943acf 100644
--- a/lldb/source/Plugins/ABI/ARM/ABIMacOSX_arm.cpp
+++ b/lldb/source/Plugins/ABI/ARM/ABIMacOSX_arm.cpp
@@ -1781,10 +1781,7 @@ Status ABIMacOSX_arm::SetReturnValueObject(lldb::StackFrameSP &frame_sp,
return error;
}
-bool ABIMacOSX_arm::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
- unwind_plan.Clear();
- unwind_plan.SetRegisterKind(eRegisterKindDWARF);
-
+UnwindPlanSP ABIMacOSX_arm::CreateFunctionEntryUnwindPlan() {
uint32_t lr_reg_num = dwarf_lr;
uint32_t sp_reg_num = dwarf_sp;
uint32_t pc_reg_num = dwarf_pc;
@@ -1794,22 +1791,17 @@ bool ABIMacOSX_arm::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
// Our Call Frame Address is the stack pointer value
row->GetCFAValue().SetIsRegisterPlusOffset(sp_reg_num, 0);
- // The previous PC is in the LR
+ // The previous PC is in the LR, all other registers are the same.
row->SetRegisterLocationToRegister(pc_reg_num, lr_reg_num, true);
- unwind_plan.AppendRow(row);
-
- // All other registers are the same.
- unwind_plan.SetSourceName("arm at-func-entry default");
- unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
-
- return true;
+ auto plan_sp = std::make_shared<UnwindPlan>(eRegisterKindDWARF);
+ plan_sp->AppendRow(row);
+ plan_sp->SetSourceName("arm at-func-entry default");
+ plan_sp->SetSourcedFromCompiler(eLazyBoolNo);
+ return plan_sp;
}
-bool ABIMacOSX_arm::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
- unwind_plan.Clear();
- unwind_plan.SetRegisterKind(eRegisterKindDWARF);
-
+UnwindPlanSP ABIMacOSX_arm::CreateDefaultUnwindPlan() {
uint32_t fp_reg_num =
dwarf_r7; // apple uses r7 for all frames. Normal arm uses r11
uint32_t pc_reg_num = dwarf_pc;
@@ -1824,13 +1816,13 @@ bool ABIMacOSX_arm::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
row->SetRegisterLocationToAtCFAPlusOffset(fp_reg_num, ptr_size * -2, true);
row->SetRegisterLocationToAtCFAPlusOffset(pc_reg_num, ptr_size * -1, true);
- unwind_plan.AppendRow(row);
- unwind_plan.SetSourceName("arm-apple-ios default unwind plan");
- unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
- unwind_plan.SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
- unwind_plan.SetUnwindPlanForSignalTrap(eLazyBoolNo);
-
- return true;
+ auto plan_sp = std::make_shared<UnwindPlan>(eRegisterKindDWARF);
+ plan_sp->AppendRow(row);
+ plan_sp->SetSourceName("arm-apple-ios default unwind plan");
+ plan_sp->SetSourcedFromCompiler(eLazyBoolNo);
+ plan_sp->SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
+ plan_sp->SetUnwindPlanForSignalTrap(eLazyBoolNo);
+ return plan_sp;
}
// cf. "ARMv6 Function Calling Conventions"
diff --git a/lldb/source/Plugins/ABI/ARM/ABIMacOSX_arm.h b/lldb/source/Plugins/ABI/ARM/ABIMacOSX_arm.h
index c5ebd9717575a..fc3d04b7060d3 100644
--- a/lldb/source/Plugins/ABI/ARM/ABIMacOSX_arm.h
+++ b/lldb/source/Plugins/ABI/ARM/ABIMacOSX_arm.h
@@ -29,10 +29,9 @@ class ABIMacOSX_arm : public lldb_private::RegInfoBasedABI {
SetReturnValueObject(lldb::StackFrameSP &frame_sp,
lldb::ValueObjectSP &new_value) override;
- bool
- CreateFunctionEntryUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateFunctionEntryUnwindPlan() override;
- bool CreateDefaultUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateDefaultUnwindPlan() override;
bool RegisterIsVolatile(const lldb_private::RegisterInfo *reg_info) override;
diff --git a/lldb/source/Plugins/ABI/ARM/ABISysV_arm.cpp b/lldb/source/Plugins/ABI/ARM/ABISysV_arm.cpp
index d67591ffa109b..38f4413bb263b 100644
--- a/lldb/source/Plugins/ABI/ARM/ABISysV_arm.cpp
+++ b/lldb/source/Plugins/ABI/ARM/ABISysV_arm.cpp
@@ -1896,10 +1896,7 @@ Status ABISysV_arm::SetReturnValueObject(lldb::StackFrameSP &frame_sp,
return error;
}
-bool ABISysV_arm::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
- unwind_plan.Clear();
- unwind_plan.SetRegisterKind(eRegisterKindDWARF);
-
+UnwindPlanSP ABISysV_arm::CreateFunctionEntryUnwindPlan() {
uint32_t lr_reg_num = dwarf_lr;
uint32_t sp_reg_num = dwarf_sp;
uint32_t pc_reg_num = dwarf_pc;
@@ -1909,22 +1906,16 @@ bool ABISysV_arm::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
// Our Call Frame Address is the stack pointer value
row->GetCFAValue().SetIsRegisterPlusOffset(sp_reg_num, 0);
- // The previous PC is in the LR
+ // The previous PC is in the LR, all other registers are the same.
row->SetRegisterLocationToRegister(pc_reg_num, lr_reg_num, true);
- unwind_plan.AppendRow(row);
-
- // All other registers are the same.
-
- unwind_plan.SetSourceName("arm at-func-entry default");
- unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
-
- return true;
+ auto plan_sp = std::make_shared<UnwindPlan>(eRegisterKindDWARF);
+ plan_sp->AppendRow(row);
+ plan_sp->SetSourceName("arm at-func-entry default");
+ plan_sp->SetSourcedFromCompiler(eLazyBoolNo);
+ return plan_sp;
}
-bool ABISysV_arm::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
- unwind_plan.Clear();
- unwind_plan.SetRegisterKind(eRegisterKindDWARF);
-
+UnwindPlanSP ABISysV_arm::CreateDefaultUnwindPlan() {
// TODO: Handle thumb
uint32_t fp_reg_num = dwarf_r11;
uint32_t pc_reg_num = dwarf_pc;
@@ -1939,13 +1930,13 @@ bool ABISysV_arm::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
row->SetRegisterLocationToAtCFAPlusOffset(fp_reg_num, ptr_size * -2, true);
row->SetRegisterLocationToAtCFAPlusOffset(pc_reg_num, ptr_size * -1, true);
- unwind_plan.AppendRow(row);
- unwind_plan.SetSourceName("arm default unwind plan");
- unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
- unwind_plan.SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
- unwind_plan.SetUnwindPlanForSignalTrap(eLazyBoolNo);
-
- return true;
+ auto plan_sp = std::make_shared<UnwindPlan>(eRegisterKindDWARF);
+ plan_sp->AppendRow(row);
+ plan_sp->SetSourceName("arm default unwind plan");
+ plan_sp->SetSourcedFromCompiler(eLazyBoolNo);
+ plan_sp->SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
+ plan_sp->SetUnwindPlanForSignalTrap(eLazyBoolNo);
+ return plan_sp;
}
// cf. "ARMv6 Function Calling Conventions"
diff --git a/lldb/source/Plugins/ABI/ARM/ABISysV_arm.h b/lldb/source/Plugins/ABI/ARM/ABISysV_arm.h
index 65bc3e0b62987..cd587dd16396b 100644
--- a/lldb/source/Plugins/ABI/ARM/ABISysV_arm.h
+++ b/lldb/source/Plugins/ABI/ARM/ABISysV_arm.h
@@ -29,10 +29,9 @@ class ABISysV_arm : public lldb_private::RegInfoBasedABI {
SetReturnValueObject(lldb::StackFrameSP &frame_sp,
lldb::ValueObjectSP &new_value) override;
- bool
- CreateFunctionEntryUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateFunctionEntryUnwindPlan() override;
- bool CreateDefaultUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateDefaultUnwindPlan() override;
bool RegisterIsVolatile(const lldb_private::RegisterInfo *reg_info) override;
diff --git a/lldb/source/Plugins/ABI/Hexagon/ABISysV_hexagon.cpp b/lldb/source/Plugins/ABI/Hexagon/ABISysV_hexagon.cpp
index 5419f054cbe2d..4af9bcb8644f5 100644
--- a/lldb/source/Plugins/ABI/Hexagon/ABISysV_hexagon.cpp
+++ b/lldb/source/Plugins/ABI/Hexagon/ABISysV_hexagon.cpp
@@ -1195,11 +1195,7 @@ ValueObjectSP ABISysV_hexagon::GetReturnValueObjectImpl(
// called when we are on the first instruction of a new function for hexagon
// the return address is in RA (R31)
-bool ABISysV_hexagon::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
- unwind_plan.Clear();
- unwind_plan.SetRegisterKind(eRegisterKindGeneric);
- unwind_plan.SetReturnAddressRegister(LLDB_REGNUM_GENERIC_RA);
-
+UnwindPlanSP ABISysV_hexagon::CreateFunctionEntryUnwindPlan() {
UnwindPlan::RowSP row(new UnwindPlan::Row);
// Our Call Frame Address is the stack pointer value
@@ -1209,17 +1205,16 @@ bool ABISysV_hexagon::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
// The previous PC is in the LR
row->SetRegisterLocationToRegister(LLDB_REGNUM_GENERIC_PC,
LLDB_REGNUM_GENERIC_RA, true);
- unwind_plan.AppendRow(row);
- unwind_plan.SetSourceName("hexagon at-func-entry default");
- unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
- return true;
+ auto plan_sp = std::make_shared<UnwindPlan>(eRegisterKindGeneric);
+ plan_sp->AppendRow(row);
+ plan_sp->SetReturnAddressRegister(LLDB_REGNUM_GENERIC_RA);
+ plan_sp->SetSourceName("hexagon at-func-entry default");
+ plan_sp->SetSourcedFromCompiler(eLazyBoolNo);
+ return plan_sp;
}
-bool ABISysV_hexagon::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
- unwind_plan.Clear();
- unwind_plan.SetRegisterKind(eRegisterKindGeneric);
-
+UnwindPlanSP ABISysV_hexagon::CreateDefaultUnwindPlan() {
uint32_t fp_reg_num = LLDB_REGNUM_GENERIC_FP;
uint32_t sp_reg_num = LLDB_REGNUM_GENERIC_SP;
uint32_t pc_reg_num = LLDB_REGNUM_GENERIC_PC;
@@ -1233,12 +1228,13 @@ bool ABISysV_hexagon::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
row->SetRegisterLocationToAtCFAPlusOffset(pc_reg_num, -4, true);
row->SetRegisterLocationToIsCFAPlusOffset(sp_reg_num, 0, true);
- unwind_plan.AppendRow(row);
- unwind_plan.SetSourceName("hexagon default unwind plan");
- unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
- unwind_plan.SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
- unwind_plan.SetUnwindPlanForSignalTrap(eLazyBoolNo);
- return true;
+ auto plan_sp = std::make_shared<UnwindPlan>(eRegisterKindGeneric);
+ plan_sp->AppendRow(row);
+ plan_sp->SetSourceName("hexagon default unwind plan");
+ plan_sp->SetSourcedFromCompiler(eLazyBoolNo);
+ plan_sp->SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
+ plan_sp->SetUnwindPlanForSignalTrap(eLazyBoolNo);
+ return plan_sp;
}
/*
diff --git a/lldb/source/Plugins/ABI/Hexagon/ABISysV_hexagon.h b/lldb/source/Plugins/ABI/Hexagon/ABISysV_hexagon.h
index df7016926d797..87d394a4097f1 100644
--- a/lldb/source/Plugins/ABI/Hexagon/ABISysV_hexagon.h
+++ b/lldb/source/Plugins/ABI/Hexagon/ABISysV_hexagon.h
@@ -46,10 +46,9 @@ class ABISysV_hexagon : public lldb_private::RegInfoBasedABI {
lldb::ValueObjectSP GetReturnValueObjectImpl(lldb_private::Thread &thread,
llvm::Type &type) const override;
- bool
- CreateFunctionEntryUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateFunctionEntryUnwindPlan() override;
- bool CreateDefaultUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateDefaultUnwindPlan() override;
bool RegisterIsVolatile(const lldb_private::RegisterInfo *reg_info) override;
diff --git a/lldb/source/Plugins/ABI/LoongArch/ABISysV_loongarch.cpp b/lldb/source/Plugins/ABI/LoongArch/ABISysV_loongarch.cpp
index b8d40501ec13a..1dd6070ec29c5 100644
--- a/lldb/source/Plugins/ABI/LoongArch/ABISysV_loongarch.cpp
+++ b/lldb/source/Plugins/ABI/LoongArch/ABISysV_loongarch.cpp
@@ -533,10 +533,7 @@ ValueObjectSP ABISysV_loongarch::GetReturnValueObjectImpl(
return GetReturnValueObjectSimple(thread, return_compiler_type);
}
-bool ABISysV_loongarch::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
- unwind_plan.Clear();
- unwind_plan.SetRegisterKind(eRegisterKindDWARF);
-
+UnwindPlanSP ABISysV_loongarch::CreateFunctionEntryUnwindPlan() {
uint32_t pc_reg_num = loongarch_dwarf::dwarf_gpr_pc;
uint32_t sp_reg_num = loongarch_dwarf::dwarf_gpr_sp;
uint32_t ra_reg_num = loongarch_dwarf::dwarf_gpr_ra;
@@ -547,19 +544,16 @@ bool ABISysV_loongarch::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
row->GetCFAValue().SetIsRegisterPlusOffset(sp_reg_num, 0);
// Previous frame's pc is in ra
-
row->SetRegisterLocationToRegister(pc_reg_num, ra_reg_num, true);
- unwind_plan.AppendRow(row);
- unwind_plan.SetSourceName("loongarch function-entry unwind plan");
- unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
- return true;
+ auto plan_sp = std::make_shared<UnwindPlan>(eRegisterKindDWARF);
+ plan_sp->AppendRow(row);
+ plan_sp->SetSourceName("loongarch function-entry unwind plan");
+ plan_sp->SetSourcedFromCompiler(eLazyBoolNo);
+ return plan_sp;
}
-bool ABISysV_loongarch::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
- unwind_plan.Clear();
- unwind_plan.SetRegisterKind(eRegisterKindGeneric);
-
+UnwindPlanSP ABISysV_loongarch::CreateDefaultUnwindPlan() {
uint32_t pc_reg_num = LLDB_REGNUM_GENERIC_PC;
uint32_t fp_reg_num = LLDB_REGNUM_GENERIC_FP;
@@ -578,11 +572,12 @@ bool ABISysV_loongarch::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
row->SetRegisterLocationToAtCFAPlusOffset(fp_reg_num, reg_size * -2, true);
row->SetRegisterLocationToAtCFAPlusOffset(pc_reg_num, reg_size * -1, true);
- unwind_plan.AppendRow(row);
- unwind_plan.SetSourceName("loongarch default unwind plan");
- unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
- unwind_plan.SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
- return true;
+ auto plan_sp = std::make_shared<UnwindPlan>(eRegisterKindGeneric);
+ plan_sp->AppendRow(row);
+ plan_sp->SetSourceName("loongarch default unwind plan");
+ plan_sp->SetSourcedFromCompiler(eLazyBoolNo);
+ plan_sp->SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
+ return plan_sp;
}
bool ABISysV_loongarch::RegisterIsVolatile(const RegisterInfo *reg_info) {
diff --git a/lldb/source/Plugins/ABI/LoongArch/ABISysV_loongarch.h b/lldb/source/Plugins/ABI/LoongArch/ABISysV_loongarch.h
index 144af041331d4..80cf4680319ec 100644
--- a/lldb/source/Plugins/ABI/LoongArch/ABISysV_loongarch.h
+++ b/lldb/source/Plugins/ABI/LoongArch/ABISysV_loongarch.h
@@ -40,10 +40,9 @@ class ABISysV_loongarch : public lldb_private::RegInfoBasedABI {
GetReturnValueObjectImpl(lldb_private::Thread &thread,
lldb_private::CompilerType &type) const override;
- bool
- CreateFunctionEntryUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateFunctionEntryUnwindPlan() override;
- bool CreateDefaultUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateDefaultUnwindPlan() override;
bool RegisterIsVolatile(const lldb_private::RegisterInfo *reg_info) override;
diff --git a/lldb/source/Plugins/ABI/MSP430/ABISysV_msp430.cpp b/lldb/source/Plugins/ABI/MSP430/ABISysV_msp430.cpp
index 6f0fd3a6e8f6f..2cc1bbbcef11b 100644
--- a/lldb/source/Plugins/ABI/MSP430/ABISysV_msp430.cpp
+++ b/lldb/source/Plugins/ABI/MSP430/ABISysV_msp430.cpp
@@ -305,10 +305,7 @@ ValueObjectSP ABISysV_msp430::GetReturnValueObjectImpl(
}
// called when we are on the first instruction of a new function
-bool ABISysV_msp430::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
- unwind_plan.Clear();
- unwind_plan.SetRegisterKind(eRegisterKindDWARF);
-
+UnwindPlanSP ABISysV_msp430::CreateFunctionEntryUnwindPlan() {
uint32_t sp_reg_num = dwarf_sp;
uint32_t pc_reg_num = dwarf_pc;
@@ -317,16 +314,14 @@ bool ABISysV_msp430::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
row->SetRegisterLocationToAtCFAPlusOffset(pc_reg_num, -2, true);
row->SetRegisterLocationToIsCFAPlusOffset(sp_reg_num, 0, true);
- unwind_plan.AppendRow(row);
- unwind_plan.SetSourceName("msp430 at-func-entry default");
- unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
- return true;
+ auto plan_sp = std::make_shared<UnwindPlan>(eRegisterKindDWARF);
+ plan_sp->AppendRow(row);
+ plan_sp->SetSourceName("msp430 at-func-entry default");
+ plan_sp->SetSourcedFromCompiler(eLazyBoolNo);
+ return plan_sp;
}
-bool ABISysV_msp430::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
- unwind_plan.Clear();
- unwind_plan.SetRegisterKind(eRegisterKindDWARF);
-
+UnwindPlanSP ABISysV_msp430::CreateDefaultUnwindPlan() {
uint32_t fp_reg_num = dwarf_fp;
uint32_t sp_reg_num = dwarf_sp;
uint32_t pc_reg_num = dwarf_pc;
@@ -337,11 +332,12 @@ bool ABISysV_msp430::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
row->SetRegisterLocationToIsCFAPlusOffset(sp_reg_num, 0, true);
row->SetRegisterLocationToUnspecified(fp_reg_num, true);
- unwind_plan.AppendRow(row);
- unwind_plan.SetSourceName("msp430 default unwind plan");
- unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
- unwind_plan.SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
- return true;
+ auto plan_sp = std::make_shared<UnwindPlan>(eRegisterKindDWARF);
+ plan_sp->AppendRow(row);
+ plan_sp->SetSourceName("msp430 default unwind plan");
+ plan_sp->SetSourcedFromCompiler(eLazyBoolNo);
+ plan_sp->SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
+ return plan_sp;
}
bool ABISysV_msp430::RegisterIsVolatile(const RegisterInfo *reg_info) {
diff --git a/lldb/source/Plugins/ABI/MSP430/ABISysV_msp430.h b/lldb/source/Plugins/ABI/MSP430/ABISysV_msp430.h
index 8ef39e7aa1bb7..3a383e43a765a 100644
--- a/lldb/source/Plugins/ABI/MSP430/ABISysV_msp430.h
+++ b/lldb/source/Plugins/ABI/MSP430/ABISysV_msp430.h
@@ -35,10 +35,9 @@ class ABISysV_msp430 : public lldb_private::RegInfoBasedABI {
GetReturnValueObjectImpl(lldb_private::Thread &thread,
lldb_private::CompilerType &type) const override;
- bool
- CreateFunctionEntryUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateFunctionEntryUnwindPlan() override;
- bool CreateDefaultUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateDefaultUnwindPlan() override;
bool RegisterIsVolatile(const lldb_private::RegisterInfo *reg_info) override;
diff --git a/lldb/source/Plugins/ABI/Mips/ABISysV_mips.cpp b/lldb/source/Plugins/ABI/Mips/ABISysV_mips.cpp
index 9c7312b975c4b..d7ebe22c90261 100644
--- a/lldb/source/Plugins/ABI/Mips/ABISysV_mips.cpp
+++ b/lldb/source/Plugins/ABI/Mips/ABISysV_mips.cpp
@@ -954,31 +954,24 @@ ValueObjectSP ABISysV_mips::GetReturnValueObjectImpl(
return return_valobj_sp;
}
-bool ABISysV_mips::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
- unwind_plan.Clear();
- unwind_plan.SetRegisterKind(eRegisterKindDWARF);
-
+UnwindPlanSP ABISysV_mips::CreateFunctionEntryUnwindPlan() {
UnwindPlan::RowSP row(new UnwindPlan::Row);
// Our Call Frame Address is the stack pointer value
row->GetCFAValue().SetIsRegisterPlusOffset(dwarf_r29, 0);
- // The previous PC is in the RA
+ // The previous PC is in the RA, all other registers are the same.
row->SetRegisterLocationToRegister(dwarf_pc, dwarf_r31, true);
- unwind_plan.AppendRow(row);
-
- // All other registers are the same.
- unwind_plan.SetSourceName("mips at-func-entry default");
- unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
- unwind_plan.SetReturnAddressRegister(dwarf_r31);
- return true;
+ auto plan_sp = std::make_shared<UnwindPlan>(eRegisterKindDWARF);
+ plan_sp->AppendRow(row);
+ plan_sp->SetSourceName("mips at-func-entry default");
+ plan_sp->SetSourcedFromCompiler(eLazyBoolNo);
+ plan_sp->SetReturnAddressRegister(dwarf_r31);
+ return plan_sp;
}
-bool ABISysV_mips::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
- unwind_plan.Clear();
- unwind_plan.SetRegisterKind(eRegisterKindDWARF);
-
+UnwindPlanSP ABISysV_mips::CreateDefaultUnwindPlan() {
UnwindPlan::RowSP row(new UnwindPlan::Row);
row->SetUnspecifiedRegistersAreUndefined(true);
@@ -986,12 +979,13 @@ bool ABISysV_mips::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
row->SetRegisterLocationToRegister(dwarf_pc, dwarf_r31, true);
- unwind_plan.AppendRow(row);
- unwind_plan.SetSourceName("mips default unwind plan");
- unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
- unwind_plan.SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
- unwind_plan.SetUnwindPlanForSignalTrap(eLazyBoolNo);
- return true;
+ auto plan_sp = std::make_shared<UnwindPlan>(eRegisterKindDWARF);
+ plan_sp->AppendRow(row);
+ plan_sp->SetSourceName("mips default unwind plan");
+ plan_sp->SetSourcedFromCompiler(eLazyBoolNo);
+ plan_sp->SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
+ plan_sp->SetUnwindPlanForSignalTrap(eLazyBoolNo);
+ return plan_sp;
}
bool ABISysV_mips::RegisterIsVolatile(const RegisterInfo *reg_info) {
diff --git a/lldb/source/Plugins/ABI/Mips/ABISysV_mips.h b/lldb/source/Plugins/ABI/Mips/ABISysV_mips.h
index e77a8bfc0ab64..0cab96559a64c 100644
--- a/lldb/source/Plugins/ABI/Mips/ABISysV_mips.h
+++ b/lldb/source/Plugins/ABI/Mips/ABISysV_mips.h
@@ -34,10 +34,9 @@ class ABISysV_mips : public lldb_private::RegInfoBasedABI {
GetReturnValueObjectImpl(lldb_private::Thread &thread,
lldb_private::CompilerType &type) const override;
- bool
- CreateFunctionEntryUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateFunctionEntryUnwindPlan() override;
- bool CreateDefaultUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateDefaultUnwindPlan() override;
bool RegisterIsVolatile(const lldb_private::RegisterInfo *reg_info) override;
diff --git a/lldb/source/Plugins/ABI/Mips/ABISysV_mips64.cpp b/lldb/source/Plugins/ABI/Mips/ABISysV_mips64.cpp
index 4cc37dd7acf09..dcaef20b1a036 100644
--- a/lldb/source/Plugins/ABI/Mips/ABISysV_mips64.cpp
+++ b/lldb/source/Plugins/ABI/Mips/ABISysV_mips64.cpp
@@ -1127,31 +1127,24 @@ ValueObjectSP ABISysV_mips64::GetReturnValueObjectImpl(
return return_valobj_sp;
}
-bool ABISysV_mips64::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
- unwind_plan.Clear();
- unwind_plan.SetRegisterKind(eRegisterKindDWARF);
-
+UnwindPlanSP ABISysV_mips64::CreateFunctionEntryUnwindPlan() {
UnwindPlan::RowSP row(new UnwindPlan::Row);
// Our Call Frame Address is the stack pointer value
row->GetCFAValue().SetIsRegisterPlusOffset(dwarf_r29, 0);
- // The previous PC is in the RA
+ // The previous PC is in the RA, all other registers are the same.
row->SetRegisterLocationToRegister(dwarf_pc, dwarf_r31, true);
- unwind_plan.AppendRow(row);
-
- // All other registers are the same.
- unwind_plan.SetSourceName("mips64 at-func-entry default");
- unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
- unwind_plan.SetReturnAddressRegister(dwarf_r31);
- return true;
+ auto plan_sp = std::make_shared<UnwindPlan>(eRegisterKindDWARF);
+ plan_sp->AppendRow(row);
+ plan_sp->SetSourceName("mips64 at-func-entry default");
+ plan_sp->SetSourcedFromCompiler(eLazyBoolNo);
+ plan_sp->SetReturnAddressRegister(dwarf_r31);
+ return plan_sp;
}
-bool ABISysV_mips64::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
- unwind_plan.Clear();
- unwind_plan.SetRegisterKind(eRegisterKindDWARF);
-
+UnwindPlanSP ABISysV_mips64::CreateDefaultUnwindPlan() {
UnwindPlan::RowSP row(new UnwindPlan::Row);
row->SetUnspecifiedRegistersAreUndefined(true);
@@ -1159,12 +1152,13 @@ bool ABISysV_mips64::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
row->SetRegisterLocationToRegister(dwarf_pc, dwarf_r31, true);
- unwind_plan.AppendRow(row);
- unwind_plan.SetSourceName("mips64 default unwind plan");
- unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
- unwind_plan.SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
- unwind_plan.SetUnwindPlanForSignalTrap(eLazyBoolNo);
- return true;
+ auto plan_sp = std::make_shared<UnwindPlan>(eRegisterKindDWARF);
+ plan_sp->AppendRow(row);
+ plan_sp->SetSourceName("mips64 default unwind plan");
+ plan_sp->SetSourcedFromCompiler(eLazyBoolNo);
+ plan_sp->SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
+ plan_sp->SetUnwindPlanForSignalTrap(eLazyBoolNo);
+ return plan_sp;
}
bool ABISysV_mips64::RegisterIsVolatile(const RegisterInfo *reg_info) {
diff --git a/lldb/source/Plugins/ABI/Mips/ABISysV_mips64.h b/lldb/source/Plugins/ABI/Mips/ABISysV_mips64.h
index 3eda3992e65e9..82d3c81fb0af7 100644
--- a/lldb/source/Plugins/ABI/Mips/ABISysV_mips64.h
+++ b/lldb/source/Plugins/ABI/Mips/ABISysV_mips64.h
@@ -34,10 +34,9 @@ class ABISysV_mips64 : public lldb_private::RegInfoBasedABI {
GetReturnValueObjectImpl(lldb_private::Thread &thread,
lldb_private::CompilerType &type) const override;
- bool
- CreateFunctionEntryUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateFunctionEntryUnwindPlan() override;
- bool CreateDefaultUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateDefaultUnwindPlan() override;
bool RegisterIsVolatile(const lldb_private::RegisterInfo *reg_info) override;
diff --git a/lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc.cpp b/lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc.cpp
index e482b8d4c4c46..405ba57deba83 100644
--- a/lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc.cpp
+++ b/lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc.cpp
@@ -857,10 +857,7 @@ ValueObjectSP ABISysV_ppc::GetReturnValueObjectImpl(
return return_valobj_sp;
}
-bool ABISysV_ppc::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
- unwind_plan.Clear();
- unwind_plan.SetRegisterKind(eRegisterKindDWARF);
-
+UnwindPlanSP ABISysV_ppc::CreateFunctionEntryUnwindPlan() {
uint32_t lr_reg_num = dwarf_lr;
uint32_t sp_reg_num = dwarf_r1;
uint32_t pc_reg_num = dwarf_pc;
@@ -870,21 +867,17 @@ bool ABISysV_ppc::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
// Our Call Frame Address is the stack pointer value
row->GetCFAValue().SetIsRegisterPlusOffset(sp_reg_num, 0);
- // The previous PC is in the LR
+ // The previous PC is in the LR, all other registers are the same.
row->SetRegisterLocationToRegister(pc_reg_num, lr_reg_num, true);
- unwind_plan.AppendRow(row);
-
- // All other registers are the same.
-
- unwind_plan.SetSourceName("ppc at-func-entry default");
- unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
- return true;
+ auto plan_sp = std::make_shared<UnwindPlan>(eRegisterKindDWARF);
+ plan_sp->AppendRow(row);
+ plan_sp->SetSourceName("ppc at-func-entry default");
+ plan_sp->SetSourcedFromCompiler(eLazyBoolNo);
+ return plan_sp;
}
-bool ABISysV_ppc::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
- unwind_plan.Clear();
- unwind_plan.SetRegisterKind(eRegisterKindDWARF);
+UnwindPlanSP ABISysV_ppc::CreateDefaultUnwindPlan() {
uint32_t sp_reg_num = dwarf_r1;
uint32_t pc_reg_num = dwarf_lr;
@@ -898,13 +891,14 @@ bool ABISysV_ppc::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
row->SetRegisterLocationToAtCFAPlusOffset(pc_reg_num, ptr_size * 1, true);
row->SetRegisterLocationToIsCFAPlusOffset(sp_reg_num, 0, true);
- unwind_plan.AppendRow(row);
- unwind_plan.SetSourceName("ppc default unwind plan");
- unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
- unwind_plan.SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
- unwind_plan.SetUnwindPlanForSignalTrap(eLazyBoolNo);
- unwind_plan.SetReturnAddressRegister(dwarf_lr);
- return true;
+ auto plan_sp = std::make_shared<UnwindPlan>(eRegisterKindDWARF);
+ plan_sp->AppendRow(row);
+ plan_sp->SetSourceName("ppc default unwind plan");
+ plan_sp->SetSourcedFromCompiler(eLazyBoolNo);
+ plan_sp->SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
+ plan_sp->SetUnwindPlanForSignalTrap(eLazyBoolNo);
+ plan_sp->SetReturnAddressRegister(dwarf_lr);
+ return plan_sp;
}
bool ABISysV_ppc::RegisterIsVolatile(const RegisterInfo *reg_info) {
diff --git a/lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc.h b/lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc.h
index 21b970f87934a..1f736f15e1113 100644
--- a/lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc.h
+++ b/lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc.h
@@ -34,10 +34,9 @@ class ABISysV_ppc : public lldb_private::RegInfoBasedABI {
GetReturnValueObjectImpl(lldb_private::Thread &thread,
lldb_private::CompilerType &type) const override;
- bool
- CreateFunctionEntryUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateFunctionEntryUnwindPlan() override;
- bool CreateDefaultUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateDefaultUnwindPlan() override;
bool RegisterIsVolatile(const lldb_private::RegisterInfo *reg_info) override;
diff --git a/lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc64.cpp b/lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc64.cpp
index 0aa51ef654274..0392dab3f118b 100644
--- a/lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc64.cpp
+++ b/lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc64.cpp
@@ -954,9 +954,7 @@ ValueObjectSP ABISysV_ppc64::GetReturnValueObjectImpl(
return GetReturnValueObjectSimple(thread, return_compiler_type);
}
-bool ABISysV_ppc64::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
- unwind_plan.Clear();
- unwind_plan.SetRegisterKind(eRegisterKindDWARF);
+UnwindPlanSP ABISysV_ppc64::CreateFunctionEntryUnwindPlan() {
uint32_t lr_reg_num;
uint32_t sp_reg_num;
@@ -977,22 +975,17 @@ bool ABISysV_ppc64::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
// Our Call Frame Address is the stack pointer value
row->GetCFAValue().SetIsRegisterPlusOffset(sp_reg_num, 0);
- // The previous PC is in the LR
+ // The previous PC is in the LR. All other registers are the same.
row->SetRegisterLocationToRegister(pc_reg_num, lr_reg_num, true);
- unwind_plan.AppendRow(row);
- // All other registers are the same.
-
- unwind_plan.SetSourceName("ppc64 at-func-entry default");
- unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
-
- return true;
+ auto plan_sp = std::make_shared<UnwindPlan>(eRegisterKindDWARF);
+ plan_sp->AppendRow(row);
+ plan_sp->SetSourceName("ppc64 at-func-entry default");
+ plan_sp->SetSourcedFromCompiler(eLazyBoolNo);
+ return plan_sp;
}
-bool ABISysV_ppc64::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
- unwind_plan.Clear();
- unwind_plan.SetRegisterKind(eRegisterKindDWARF);
-
+UnwindPlanSP ABISysV_ppc64::CreateDefaultUnwindPlan() {
uint32_t sp_reg_num;
uint32_t pc_reg_num;
uint32_t cr_reg_num;
@@ -1016,13 +1009,14 @@ bool ABISysV_ppc64::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
row->SetRegisterLocationToIsCFAPlusOffset(sp_reg_num, 0, true);
row->SetRegisterLocationToAtCFAPlusOffset(cr_reg_num, ptr_size, true);
- unwind_plan.AppendRow(row);
- unwind_plan.SetSourceName("ppc64 default unwind plan");
- unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
- unwind_plan.SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
- unwind_plan.SetUnwindPlanForSignalTrap(eLazyBoolNo);
- unwind_plan.SetReturnAddressRegister(pc_reg_num);
- return true;
+ auto plan_sp = std::make_shared<UnwindPlan>(eRegisterKindDWARF);
+ plan_sp->AppendRow(row);
+ plan_sp->SetSourceName("ppc64 default unwind plan");
+ plan_sp->SetSourcedFromCompiler(eLazyBoolNo);
+ plan_sp->SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
+ plan_sp->SetUnwindPlanForSignalTrap(eLazyBoolNo);
+ plan_sp->SetReturnAddressRegister(pc_reg_num);
+ return plan_sp;
}
bool ABISysV_ppc64::RegisterIsVolatile(const RegisterInfo *reg_info) {
diff --git a/lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc64.h b/lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc64.h
index bfa96cc0df703..c7885eb7bb100 100644
--- a/lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc64.h
+++ b/lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc64.h
@@ -10,6 +10,7 @@
#define LLDB_SOURCE_PLUGINS_ABI_POWERPC_ABISYSV_PPC64_H
#include "lldb/Target/ABI.h"
+#include "lldb/lldb-forward.h"
#include "lldb/lldb-private.h"
class ABISysV_ppc64 : public lldb_private::RegInfoBasedABI {
@@ -34,10 +35,9 @@ class ABISysV_ppc64 : public lldb_private::RegInfoBasedABI {
GetReturnValueObjectImpl(lldb_private::Thread &thread,
lldb_private::CompilerType &type) const override;
- bool
- CreateFunctionEntryUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateFunctionEntryUnwindPlan() override;
- bool CreateDefaultUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateDefaultUnwindPlan() override;
bool RegisterIsVolatile(const lldb_private::RegisterInfo *reg_info) override;
diff --git a/lldb/source/Plugins/ABI/RISCV/ABISysV_riscv.cpp b/lldb/source/Plugins/ABI/RISCV/ABISysV_riscv.cpp
index c463bd006b3db..06415a6e7f52c 100644
--- a/lldb/source/Plugins/ABI/RISCV/ABISysV_riscv.cpp
+++ b/lldb/source/Plugins/ABI/RISCV/ABISysV_riscv.cpp
@@ -718,10 +718,7 @@ ValueObjectSP ABISysV_riscv::GetReturnValueObjectImpl(
return GetReturnValueObjectSimple(thread, return_compiler_type);
}
-bool ABISysV_riscv::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
- unwind_plan.Clear();
- unwind_plan.SetRegisterKind(eRegisterKindDWARF);
-
+UnwindPlanSP ABISysV_riscv::CreateFunctionEntryUnwindPlan() {
uint32_t pc_reg_num = riscv_dwarf::dwarf_gpr_pc;
uint32_t sp_reg_num = riscv_dwarf::dwarf_gpr_sp;
uint32_t ra_reg_num = riscv_dwarf::dwarf_gpr_ra;
@@ -732,19 +729,16 @@ bool ABISysV_riscv::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
row->GetCFAValue().SetIsRegisterPlusOffset(sp_reg_num, 0);
// Previous frame's pc is in ra
-
row->SetRegisterLocationToRegister(pc_reg_num, ra_reg_num, true);
- unwind_plan.AppendRow(row);
- unwind_plan.SetSourceName("riscv function-entry unwind plan");
- unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
- return true;
+ auto plan_sp = std::make_shared<UnwindPlan>(eRegisterKindDWARF);
+ plan_sp->AppendRow(row);
+ plan_sp->SetSourceName("riscv function-entry unwind plan");
+ plan_sp->SetSourcedFromCompiler(eLazyBoolNo);
+ return plan_sp;
}
-bool ABISysV_riscv::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
- unwind_plan.Clear();
- unwind_plan.SetRegisterKind(eRegisterKindGeneric);
-
+UnwindPlanSP ABISysV_riscv::CreateDefaultUnwindPlan() {
uint32_t pc_reg_num = LLDB_REGNUM_GENERIC_PC;
uint32_t fp_reg_num = LLDB_REGNUM_GENERIC_FP;
@@ -763,11 +757,12 @@ bool ABISysV_riscv::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
row->SetRegisterLocationToAtCFAPlusOffset(fp_reg_num, reg_size * -2, true);
row->SetRegisterLocationToAtCFAPlusOffset(pc_reg_num, reg_size * -1, true);
- unwind_plan.AppendRow(row);
- unwind_plan.SetSourceName("riscv default unwind plan");
- unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
- unwind_plan.SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
- return true;
+ auto plan_sp = std::make_shared<UnwindPlan>(eRegisterKindGeneric);
+ plan_sp->AppendRow(row);
+ plan_sp->SetSourceName("riscv default unwind plan");
+ plan_sp->SetSourcedFromCompiler(eLazyBoolNo);
+ plan_sp->SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
+ return plan_sp;
}
bool ABISysV_riscv::RegisterIsVolatile(const RegisterInfo *reg_info) {
diff --git a/lldb/source/Plugins/ABI/RISCV/ABISysV_riscv.h b/lldb/source/Plugins/ABI/RISCV/ABISysV_riscv.h
index d8cf008dbb0bf..539a45de5ee77 100644
--- a/lldb/source/Plugins/ABI/RISCV/ABISysV_riscv.h
+++ b/lldb/source/Plugins/ABI/RISCV/ABISysV_riscv.h
@@ -51,10 +51,9 @@ class ABISysV_riscv : public lldb_private::RegInfoBasedABI {
lldb::ValueObjectSP GetReturnValueObjectImpl(lldb_private::Thread &thread,
llvm::Type &type) const override;
- bool
- CreateFunctionEntryUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateFunctionEntryUnwindPlan() override;
- bool CreateDefaultUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateDefaultUnwindPlan() override;
bool RegisterIsVolatile(const lldb_private::RegisterInfo *reg_info) override;
diff --git a/lldb/source/Plugins/ABI/SystemZ/ABISysV_s390x.cpp b/lldb/source/Plugins/ABI/SystemZ/ABISysV_s390x.cpp
index 82853c96a0f74..a88a3b0e0825d 100644
--- a/lldb/source/Plugins/ABI/SystemZ/ABISysV_s390x.cpp
+++ b/lldb/source/Plugins/ABI/SystemZ/ABISysV_s390x.cpp
@@ -617,10 +617,7 @@ ValueObjectSP ABISysV_s390x::GetReturnValueObjectImpl(
return return_valobj_sp;
}
-bool ABISysV_s390x::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
- unwind_plan.Clear();
- unwind_plan.SetRegisterKind(eRegisterKindDWARF);
-
+UnwindPlanSP ABISysV_s390x::CreateFunctionEntryUnwindPlan() {
UnwindPlan::RowSP row(new UnwindPlan::Row);
// Our Call Frame Address is the stack pointer value + 160
@@ -630,16 +627,17 @@ bool ABISysV_s390x::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
row->SetRegisterLocationToRegister(dwarf_pswa_s390x, dwarf_r14_s390x, true);
// All other registers are the same.
- unwind_plan.AppendRow(row);
- unwind_plan.SetSourceName("s390x at-func-entry default");
- unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
- return true;
+ auto plan_sp = std::make_shared<UnwindPlan>(eRegisterKindDWARF);
+ plan_sp->AppendRow(row);
+ plan_sp->SetSourceName("s390x at-func-entry default");
+ plan_sp->SetSourcedFromCompiler(eLazyBoolNo);
+ return plan_sp;
}
-bool ABISysV_s390x::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
+UnwindPlanSP ABISysV_s390x::CreateDefaultUnwindPlan() {
// There's really no default way to unwind on s390x. Trust the .eh_frame CFI,
// which should always be good.
- return false;
+ return nullptr;
}
bool ABISysV_s390x::GetFallbackRegisterLocation(
diff --git a/lldb/source/Plugins/ABI/SystemZ/ABISysV_s390x.h b/lldb/source/Plugins/ABI/SystemZ/ABISysV_s390x.h
index ecf3e3906dd7b..318be99dd7012 100644
--- a/lldb/source/Plugins/ABI/SystemZ/ABISysV_s390x.h
+++ b/lldb/source/Plugins/ABI/SystemZ/ABISysV_s390x.h
@@ -34,10 +34,9 @@ class ABISysV_s390x : public lldb_private::RegInfoBasedABI {
GetReturnValueObjectImpl(lldb_private::Thread &thread,
lldb_private::CompilerType &type) const override;
- bool
- CreateFunctionEntryUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateFunctionEntryUnwindPlan() override;
- bool CreateDefaultUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateDefaultUnwindPlan() override;
bool RegisterIsVolatile(const lldb_private::RegisterInfo *reg_info) override;
diff --git a/lldb/source/Plugins/ABI/X86/ABIMacOSX_i386.cpp b/lldb/source/Plugins/ABI/X86/ABIMacOSX_i386.cpp
index f03acbcedb351..d484b781a5136 100644
--- a/lldb/source/Plugins/ABI/X86/ABIMacOSX_i386.cpp
+++ b/lldb/source/Plugins/ABI/X86/ABIMacOSX_i386.cpp
@@ -356,10 +356,7 @@ ABIMacOSX_i386::GetReturnValueObjectImpl(Thread &thread,
// the saved pc is at CFA-4 (i.e. esp+0)
// The saved esp is CFA+0
-bool ABIMacOSX_i386::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
- unwind_plan.Clear();
- unwind_plan.SetRegisterKind(eRegisterKindDWARF);
-
+UnwindPlanSP ABIMacOSX_i386::CreateFunctionEntryUnwindPlan() {
uint32_t sp_reg_num = dwarf_esp;
uint32_t pc_reg_num = dwarf_eip;
@@ -367,10 +364,12 @@ bool ABIMacOSX_i386::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
row->GetCFAValue().SetIsRegisterPlusOffset(sp_reg_num, 4);
row->SetRegisterLocationToAtCFAPlusOffset(pc_reg_num, -4, false);
row->SetRegisterLocationToIsCFAPlusOffset(sp_reg_num, 0, true);
- unwind_plan.AppendRow(row);
- unwind_plan.SetSourceName("i386 at-func-entry default");
- unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
- return true;
+
+ auto plan_sp = std::make_shared<UnwindPlan>(eRegisterKindDWARF);
+ plan_sp->AppendRow(row);
+ plan_sp->SetSourceName("i386 at-func-entry default");
+ plan_sp->SetSourcedFromCompiler(eLazyBoolNo);
+ return plan_sp;
}
// This defines the CFA as ebp+8
@@ -378,10 +377,7 @@ bool ABIMacOSX_i386::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
// The saved ebp is at CFA-8 (i.e. ebp+0)
// The saved esp is CFA+0
-bool ABIMacOSX_i386::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
- unwind_plan.Clear();
- unwind_plan.SetRegisterKind(eRegisterKindDWARF);
-
+UnwindPlanSP ABIMacOSX_i386::CreateDefaultUnwindPlan() {
uint32_t fp_reg_num = dwarf_ebp;
uint32_t sp_reg_num = dwarf_esp;
uint32_t pc_reg_num = dwarf_eip;
@@ -397,12 +393,13 @@ bool ABIMacOSX_i386::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
row->SetRegisterLocationToAtCFAPlusOffset(pc_reg_num, ptr_size * -1, true);
row->SetRegisterLocationToIsCFAPlusOffset(sp_reg_num, 0, true);
- unwind_plan.AppendRow(row);
- unwind_plan.SetSourceName("i386 default unwind plan");
- unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
- unwind_plan.SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
- unwind_plan.SetUnwindPlanForSignalTrap(eLazyBoolNo);
- return true;
+ auto plan_sp = std::make_shared<UnwindPlan>(eRegisterKindDWARF);
+ plan_sp->AppendRow(row);
+ plan_sp->SetSourceName("i386 default unwind plan");
+ plan_sp->SetSourcedFromCompiler(eLazyBoolNo);
+ plan_sp->SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
+ plan_sp->SetUnwindPlanForSignalTrap(eLazyBoolNo);
+ return plan_sp;
}
bool ABIMacOSX_i386::RegisterIsVolatile(const RegisterInfo *reg_info) {
diff --git a/lldb/source/Plugins/ABI/X86/ABIMacOSX_i386.h b/lldb/source/Plugins/ABI/X86/ABIMacOSX_i386.h
index 8c637b7671f6b..a72ee8ba17847 100644
--- a/lldb/source/Plugins/ABI/X86/ABIMacOSX_i386.h
+++ b/lldb/source/Plugins/ABI/X86/ABIMacOSX_i386.h
@@ -30,10 +30,9 @@ class ABIMacOSX_i386 : public ABIX86_i386 {
SetReturnValueObject(lldb::StackFrameSP &frame_sp,
lldb::ValueObjectSP &new_value) override;
- bool
- CreateFunctionEntryUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateFunctionEntryUnwindPlan() override;
- bool CreateDefaultUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateDefaultUnwindPlan() override;
bool RegisterIsVolatile(const lldb_private::RegisterInfo *reg_info) override;
diff --git a/lldb/source/Plugins/ABI/X86/ABISysV_i386.cpp b/lldb/source/Plugins/ABI/X86/ABISysV_i386.cpp
index 19ec5fa49bbea..f6b3666632728 100644
--- a/lldb/source/Plugins/ABI/X86/ABISysV_i386.cpp
+++ b/lldb/source/Plugins/ABI/X86/ABISysV_i386.cpp
@@ -623,10 +623,7 @@ ValueObjectSP ABISysV_i386::GetReturnValueObjectImpl(
// The saved pc is at CFA-4 (i.e. esp+0)
// The saved esp is CFA+0
-bool ABISysV_i386::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
- unwind_plan.Clear();
- unwind_plan.SetRegisterKind(eRegisterKindDWARF);
-
+UnwindPlanSP ABISysV_i386::CreateFunctionEntryUnwindPlan() {
uint32_t sp_reg_num = dwarf_esp;
uint32_t pc_reg_num = dwarf_eip;
@@ -634,10 +631,12 @@ bool ABISysV_i386::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
row->GetCFAValue().SetIsRegisterPlusOffset(sp_reg_num, 4);
row->SetRegisterLocationToAtCFAPlusOffset(pc_reg_num, -4, false);
row->SetRegisterLocationToIsCFAPlusOffset(sp_reg_num, 0, true);
- unwind_plan.AppendRow(row);
- unwind_plan.SetSourceName("i386 at-func-entry default");
- unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
- return true;
+
+ auto plan_sp = std::make_shared<UnwindPlan>(eRegisterKindDWARF);
+ plan_sp->AppendRow(row);
+ plan_sp->SetSourceName("i386 at-func-entry default");
+ plan_sp->SetSourcedFromCompiler(eLazyBoolNo);
+ return plan_sp;
}
// This defines CFA as ebp+8
@@ -645,10 +644,7 @@ bool ABISysV_i386::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
// The saved ebp is at CFA-8 (i.e. ebp+0)
// The saved esp is CFA+0
-bool ABISysV_i386::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
- unwind_plan.Clear();
- unwind_plan.SetRegisterKind(eRegisterKindDWARF);
-
+UnwindPlanSP ABISysV_i386::CreateDefaultUnwindPlan() {
uint32_t fp_reg_num = dwarf_ebp;
uint32_t sp_reg_num = dwarf_esp;
uint32_t pc_reg_num = dwarf_eip;
@@ -664,12 +660,13 @@ bool ABISysV_i386::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
row->SetRegisterLocationToAtCFAPlusOffset(pc_reg_num, ptr_size * -1, true);
row->SetRegisterLocationToIsCFAPlusOffset(sp_reg_num, 0, true);
- unwind_plan.AppendRow(row);
- unwind_plan.SetSourceName("i386 default unwind plan");
- unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
- unwind_plan.SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
- unwind_plan.SetUnwindPlanForSignalTrap(eLazyBoolNo);
- return true;
+ auto plan_sp = std::make_shared<UnwindPlan>(eRegisterKindDWARF);
+ plan_sp->AppendRow(row);
+ plan_sp->SetSourceName("i386 default unwind plan");
+ plan_sp->SetSourcedFromCompiler(eLazyBoolNo);
+ plan_sp->SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
+ plan_sp->SetUnwindPlanForSignalTrap(eLazyBoolNo);
+ return plan_sp;
}
// According to "Register Usage" in reference document (specified on top of
diff --git a/lldb/source/Plugins/ABI/X86/ABISysV_i386.h b/lldb/source/Plugins/ABI/X86/ABISysV_i386.h
index a19c8ddb5b645..b602729ebb6e6 100644
--- a/lldb/source/Plugins/ABI/X86/ABISysV_i386.h
+++ b/lldb/source/Plugins/ABI/X86/ABISysV_i386.h
@@ -36,10 +36,9 @@ class ABISysV_i386 : public ABIX86_i386 {
GetReturnValueObjectImpl(lldb_private::Thread &thread,
lldb_private::CompilerType &type) const override;
- bool
- CreateFunctionEntryUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateFunctionEntryUnwindPlan() override;
- bool CreateDefaultUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateDefaultUnwindPlan() override;
bool RegisterIsVolatile(const lldb_private::RegisterInfo *reg_info) override {
return !RegisterIsCalleeSaved(reg_info);
diff --git a/lldb/source/Plugins/ABI/X86/ABISysV_x86_64.cpp b/lldb/source/Plugins/ABI/X86/ABISysV_x86_64.cpp
index 83b01b14aedc5..a224b3b9d4c23 100644
--- a/lldb/source/Plugins/ABI/X86/ABISysV_x86_64.cpp
+++ b/lldb/source/Plugins/ABI/X86/ABISysV_x86_64.cpp
@@ -858,10 +858,7 @@ ValueObjectSP ABISysV_x86_64::GetReturnValueObjectImpl(
// the saved pc is at CFA-8 (i.e. rsp+0)
// The saved rsp is CFA+0
-bool ABISysV_x86_64::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
- unwind_plan.Clear();
- unwind_plan.SetRegisterKind(eRegisterKindDWARF);
-
+UnwindPlanSP ABISysV_x86_64::CreateFunctionEntryUnwindPlan() {
uint32_t sp_reg_num = dwarf_rsp;
uint32_t pc_reg_num = dwarf_rip;
@@ -869,10 +866,12 @@ bool ABISysV_x86_64::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
row->GetCFAValue().SetIsRegisterPlusOffset(sp_reg_num, 8);
row->SetRegisterLocationToAtCFAPlusOffset(pc_reg_num, -8, false);
row->SetRegisterLocationToIsCFAPlusOffset(sp_reg_num, 0, true);
- unwind_plan.AppendRow(row);
- unwind_plan.SetSourceName("x86_64 at-func-entry default");
- unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
- return true;
+
+ auto plan_sp = std::make_shared<UnwindPlan>(eRegisterKindDWARF);
+ plan_sp->AppendRow(row);
+ plan_sp->SetSourceName("x86_64 at-func-entry default");
+ plan_sp->SetSourcedFromCompiler(eLazyBoolNo);
+ return plan_sp;
}
// This defines the CFA as rbp+16
@@ -880,10 +879,7 @@ bool ABISysV_x86_64::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
// The saved rbp is at CFA-16 (i.e. rbp+0)
// The saved rsp is CFA+0
-bool ABISysV_x86_64::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
- unwind_plan.Clear();
- unwind_plan.SetRegisterKind(eRegisterKindDWARF);
-
+UnwindPlanSP ABISysV_x86_64::CreateDefaultUnwindPlan() {
uint32_t fp_reg_num = dwarf_rbp;
uint32_t sp_reg_num = dwarf_rsp;
uint32_t pc_reg_num = dwarf_rip;
@@ -899,12 +895,13 @@ bool ABISysV_x86_64::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
row->SetRegisterLocationToAtCFAPlusOffset(pc_reg_num, ptr_size * -1, true);
row->SetRegisterLocationToIsCFAPlusOffset(sp_reg_num, 0, true);
- unwind_plan.AppendRow(row);
- unwind_plan.SetSourceName("x86_64 default unwind plan");
- unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
- unwind_plan.SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
- unwind_plan.SetUnwindPlanForSignalTrap(eLazyBoolNo);
- return true;
+ auto plan_sp = std::make_shared<UnwindPlan>(eRegisterKindDWARF);
+ plan_sp->AppendRow(row);
+ plan_sp->SetSourceName("x86_64 default unwind plan");
+ plan_sp->SetSourcedFromCompiler(eLazyBoolNo);
+ plan_sp->SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
+ plan_sp->SetUnwindPlanForSignalTrap(eLazyBoolNo);
+ return plan_sp;
}
bool ABISysV_x86_64::RegisterIsVolatile(const RegisterInfo *reg_info) {
diff --git a/lldb/source/Plugins/ABI/X86/ABISysV_x86_64.h b/lldb/source/Plugins/ABI/X86/ABISysV_x86_64.h
index ce0357dfa331f..efc493a38f1a5 100644
--- a/lldb/source/Plugins/ABI/X86/ABISysV_x86_64.h
+++ b/lldb/source/Plugins/ABI/X86/ABISysV_x86_64.h
@@ -33,10 +33,9 @@ class ABISysV_x86_64 : public ABIX86_64 {
GetReturnValueObjectImpl(lldb_private::Thread &thread,
lldb_private::CompilerType &type) const override;
- bool
- CreateFunctionEntryUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateFunctionEntryUnwindPlan() override;
- bool CreateDefaultUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateDefaultUnwindPlan() override;
bool RegisterIsVolatile(const lldb_private::RegisterInfo *reg_info) override;
diff --git a/lldb/source/Plugins/ABI/X86/ABIWindows_x86_64.cpp b/lldb/source/Plugins/ABI/X86/ABIWindows_x86_64.cpp
index 098293c1d6046..8c6cea679fbd2 100644
--- a/lldb/source/Plugins/ABI/X86/ABIWindows_x86_64.cpp
+++ b/lldb/source/Plugins/ABI/X86/ABIWindows_x86_64.cpp
@@ -738,10 +738,7 @@ ValueObjectSP ABIWindows_x86_64::GetReturnValueObjectImpl(
// the saved pc is at CFA-8 (i.e. rsp+0)
// The saved rsp is CFA+0
-bool ABIWindows_x86_64::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
- unwind_plan.Clear();
- unwind_plan.SetRegisterKind(eRegisterKindDWARF);
-
+UnwindPlanSP ABIWindows_x86_64::CreateFunctionEntryUnwindPlan() {
uint32_t sp_reg_num = dwarf_rsp;
uint32_t pc_reg_num = dwarf_rip;
@@ -749,19 +746,18 @@ bool ABIWindows_x86_64::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
row->GetCFAValue().SetIsRegisterPlusOffset(sp_reg_num, 8);
row->SetRegisterLocationToAtCFAPlusOffset(pc_reg_num, -8, false);
row->SetRegisterLocationToIsCFAPlusOffset(sp_reg_num, 0, true);
- unwind_plan.AppendRow(row);
- unwind_plan.SetSourceName("x86_64 at-func-entry default");
- unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
- return true;
+
+ auto plan_sp = std::make_shared<UnwindPlan>(eRegisterKindDWARF);
+ plan_sp->AppendRow(row);
+ plan_sp->SetSourceName("x86_64 at-func-entry default");
+ plan_sp->SetSourcedFromCompiler(eLazyBoolNo);
+ return plan_sp;
}
// Windows-x86_64 doesn't use %rbp
// No available Unwind information for Windows-x86_64 (section .pdata)
// Let's use SysV-x86_64 one for now
-bool ABIWindows_x86_64::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
- unwind_plan.Clear();
- unwind_plan.SetRegisterKind(eRegisterKindDWARF);
-
+UnwindPlanSP ABIWindows_x86_64::CreateDefaultUnwindPlan() {
uint32_t fp_reg_num = dwarf_rbp;
uint32_t sp_reg_num = dwarf_rsp;
uint32_t pc_reg_num = dwarf_rip;
@@ -777,12 +773,12 @@ bool ABIWindows_x86_64::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
row->SetRegisterLocationToAtCFAPlusOffset(pc_reg_num, ptr_size * -1, true);
row->SetRegisterLocationToIsCFAPlusOffset(sp_reg_num, 0, true);
- unwind_plan.AppendRow(row);
- unwind_plan.SetSourceName("x86_64 default unwind plan");
- unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
- unwind_plan.SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
-
- return true;
+ auto plan_sp = std::make_shared<UnwindPlan>(eRegisterKindDWARF);
+ plan_sp->AppendRow(row);
+ plan_sp->SetSourceName("x86_64 default unwind plan");
+ plan_sp->SetSourcedFromCompiler(eLazyBoolNo);
+ plan_sp->SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
+ return plan_sp;
}
bool ABIWindows_x86_64::RegisterIsVolatile(const RegisterInfo *reg_info) {
diff --git a/lldb/source/Plugins/ABI/X86/ABIWindows_x86_64.h b/lldb/source/Plugins/ABI/X86/ABIWindows_x86_64.h
index 2fab0fd61ea3e..2485e4dd20909 100644
--- a/lldb/source/Plugins/ABI/X86/ABIWindows_x86_64.h
+++ b/lldb/source/Plugins/ABI/X86/ABIWindows_x86_64.h
@@ -33,10 +33,9 @@ class ABIWindows_x86_64 : public ABIX86_64 {
GetReturnValueObjectImpl(lldb_private::Thread &thread,
lldb_private::CompilerType &type) const override;
- bool
- CreateFunctionEntryUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateFunctionEntryUnwindPlan() override;
- bool CreateDefaultUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+ lldb::UnwindPlanSP CreateDefaultUnwindPlan() override;
bool RegisterIsVolatile(const lldb_private::RegisterInfo *reg_info) override;
diff --git a/lldb/source/Plugins/UnwindAssembly/x86/UnwindAssembly-x86.cpp b/lldb/source/Plugins/UnwindAssembly/x86/UnwindAssembly-x86.cpp
index 5c846bafc24df..89125a3656141 100644
--- a/lldb/source/Plugins/UnwindAssembly/x86/UnwindAssembly-x86.cpp
+++ b/lldb/source/Plugins/UnwindAssembly/x86/UnwindAssembly-x86.cpp
@@ -193,9 +193,11 @@ bool UnwindAssembly_x86::GetFastUnwindPlan(AddressRange &func, Thread &thread,
0 ||
memcmp(opcode_data.data(), x86_64_push_mov,
sizeof(x86_64_push_mov)) == 0) {
- ABISP abi_sp = process_sp->GetABI();
- if (abi_sp) {
- return abi_sp->CreateDefaultUnwindPlan(unwind_plan);
+ if (ABISP abi_sp = process_sp->GetABI()) {
+ if (UnwindPlanSP plan_sp = abi_sp->CreateDefaultUnwindPlan()) {
+ unwind_plan = std::move(*plan_sp);
+ return true;
+ }
}
}
}
diff --git a/lldb/source/Symbol/FuncUnwinders.cpp b/lldb/source/Symbol/FuncUnwinders.cpp
index d01a899e4f3c6..f92e2e472e778 100644
--- a/lldb/source/Symbol/FuncUnwinders.cpp
+++ b/lldb/source/Symbol/FuncUnwinders.cpp
@@ -468,17 +468,10 @@ UnwindPlanSP FuncUnwinders::GetUnwindPlanArchitectureDefault(Thread &thread) {
m_tried_unwind_arch_default = true;
- Address current_pc;
ProcessSP process_sp(thread.CalculateProcess());
if (process_sp) {
- ABI *abi = process_sp->GetABI().get();
- if (abi) {
- m_unwind_plan_arch_default_sp =
- std::make_shared<UnwindPlan>(lldb::eRegisterKindGeneric);
- if (!abi->CreateDefaultUnwindPlan(*m_unwind_plan_arch_default_sp)) {
- m_unwind_plan_arch_default_sp.reset();
- }
- }
+ if (ABI *abi = process_sp->GetABI().get())
+ m_unwind_plan_arch_default_sp = abi->CreateDefaultUnwindPlan();
}
return m_unwind_plan_arch_default_sp;
@@ -496,14 +489,9 @@ FuncUnwinders::GetUnwindPlanArchitectureDefaultAtFunctionEntry(Thread &thread) {
Address current_pc;
ProcessSP process_sp(thread.CalculateProcess());
if (process_sp) {
- ABI *abi = process_sp->GetABI().get();
- if (abi) {
+ if (ABI *abi = process_sp->GetABI().get()) {
m_unwind_plan_arch_default_at_func_entry_sp =
- std::make_shared<UnwindPlan>(lldb::eRegisterKindGeneric);
- if (!abi->CreateFunctionEntryUnwindPlan(
- *m_unwind_plan_arch_default_at_func_entry_sp)) {
- m_unwind_plan_arch_default_at_func_entry_sp.reset();
- }
+ abi->CreateFunctionEntryUnwindPlan();
}
}
diff --git a/lldb/source/Target/RegisterContextUnwind.cpp b/lldb/source/Target/RegisterContextUnwind.cpp
index dbe885e286ff7..25c0d4b4b5f2a 100644
--- a/lldb/source/Target/RegisterContextUnwind.cpp
+++ b/lldb/source/Target/RegisterContextUnwind.cpp
@@ -431,9 +431,7 @@ void RegisterContextUnwind::InitializeNonZerothFrame() {
if (abi_sp) {
m_fast_unwind_plan_sp.reset();
- m_full_unwind_plan_sp =
- std::make_shared<UnwindPlan>(lldb::eRegisterKindGeneric);
- abi_sp->CreateDefaultUnwindPlan(*m_full_unwind_plan_sp);
+ m_full_unwind_plan_sp = abi_sp->CreateDefaultUnwindPlan();
if (m_frame_type != eSkipFrame) // don't override eSkipFrame
{
m_frame_type = eNormalFrame;
@@ -801,9 +799,7 @@ UnwindPlanSP RegisterContextUnwind::GetFullUnwindPlanForFrame() {
Process *process = exe_ctx.GetProcessPtr();
ABI *abi = process ? process->GetABI().get() : nullptr;
if (abi) {
- arch_default_unwind_plan_sp =
- std::make_shared<UnwindPlan>(lldb::eRegisterKindGeneric);
- abi->CreateDefaultUnwindPlan(*arch_default_unwind_plan_sp);
+ arch_default_unwind_plan_sp = abi->CreateDefaultUnwindPlan();
} else {
UnwindLogMsg(
"unable to get architectural default UnwindPlan from ABI plugin");
@@ -836,9 +832,7 @@ UnwindPlanSP RegisterContextUnwind::GetFullUnwindPlanForFrame() {
process->GetLoadAddressPermissions(current_pc_addr, permissions) &&
(permissions & ePermissionsExecutable) == 0)) {
if (abi) {
- unwind_plan_sp =
- std::make_shared<UnwindPlan>(lldb::eRegisterKindGeneric);
- abi->CreateFunctionEntryUnwindPlan(*unwind_plan_sp);
+ unwind_plan_sp = abi->CreateFunctionEntryUnwindPlan();
m_frame_type = eNormalFrame;
return unwind_plan_sp;
}
More information about the lldb-commits
mailing list