[lldb] Modernize ABI-based unwind plan creation (#128505)
Replace the by-ref return value with an actual result.
diff --git a/lldb/include/lldb/Symbol/UnwindPlan.h b/lldb/include/lldb/Symbol/UnwindPlan.h
index de120c4..462c1a5 100644
--- a/lldb/include/lldb/Symbol/UnwindPlan.h
+++ b/lldb/include/lldb/Symbol/UnwindPlan.h
@@ -452,6 +452,11 @@
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 dd941d1..1a1f172 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 @@
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 bd9470b..c77bddb 100644
--- a/lldb/source/Commands/CommandObjectTarget.cpp
+++ b/lldb/source/Commands/CommandObjectTarget.cpp
@@ -3763,20 +3763,18 @@
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 cb121c1..d208c6f 100644
--- a/lldb/source/Plugins/ABI/AArch64/ABIMacOSX_arm64.cpp
+++ b/lldb/source/Plugins/ABI/AArch64/ABIMacOSX_arm64.cpp
@@ -343,10 +343,7 @@
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 @@
// 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 @@
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 025a7a3..94a6032 100644
--- a/lldb/source/Plugins/ABI/AArch64/ABIMacOSX_arm64.h
+++ b/lldb/source/Plugins/ABI/AArch64/ABIMacOSX_arm64.h
@@ -27,10 +27,9 @@
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 74047ea..280ec5b 100644
--- a/lldb/source/Plugins/ABI/AArch64/ABISysV_arm64.cpp
+++ b/lldb/source/Plugins/ABI/AArch64/ABISysV_arm64.cpp
@@ -391,35 +391,27 @@
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 @@
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 01d4af6..2b8e608 100644
--- a/lldb/source/Plugins/ABI/AArch64/ABISysV_arm64.h
+++ b/lldb/source/Plugins/ABI/AArch64/ABISysV_arm64.h
@@ -30,10 +30,9 @@
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 6f60663..a38396d 100644
--- a/lldb/source/Plugins/ABI/ARC/ABISysV_arc.cpp
+++ b/lldb/source/Plugins/ABI/ARC/ABISysV_arc.cpp
@@ -555,29 +555,23 @@
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 de51345..ac0c40c 100644
--- a/lldb/source/Plugins/ABI/ARC/ABISysV_arc.h
+++ b/lldb/source/Plugins/ABI/ARC/ABISysV_arc.h
@@ -49,10 +49,9 @@
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 6aadf65..d85f4a5 100644
--- a/lldb/source/Plugins/ABI/ARM/ABIMacOSX_arm.cpp
+++ b/lldb/source/Plugins/ABI/ARM/ABIMacOSX_arm.cpp
@@ -1781,10 +1781,7 @@
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 @@
// 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 @@
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 c5ebd97..fc3d04b 100644
--- a/lldb/source/Plugins/ABI/ARM/ABIMacOSX_arm.h
+++ b/lldb/source/Plugins/ABI/ARM/ABIMacOSX_arm.h
@@ -29,10 +29,9 @@
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 d67591f..38f4413 100644
--- a/lldb/source/Plugins/ABI/ARM/ABISysV_arm.cpp
+++ b/lldb/source/Plugins/ABI/ARM/ABISysV_arm.cpp
@@ -1896,10 +1896,7 @@
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 @@
// 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 @@
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 65bc3e0..cd587dd 100644
--- a/lldb/source/Plugins/ABI/ARM/ABISysV_arm.h
+++ b/lldb/source/Plugins/ABI/ARM/ABISysV_arm.h
@@ -29,10 +29,9 @@
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 5419f05..4af9bcb 100644
--- a/lldb/source/Plugins/ABI/Hexagon/ABISysV_hexagon.cpp
+++ b/lldb/source/Plugins/ABI/Hexagon/ABISysV_hexagon.cpp
@@ -1195,11 +1195,7 @@
// 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 @@
// 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 @@
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 df70169..87d394a 100644
--- a/lldb/source/Plugins/ABI/Hexagon/ABISysV_hexagon.h
+++ b/lldb/source/Plugins/ABI/Hexagon/ABISysV_hexagon.h
@@ -46,10 +46,9 @@
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 b8d4050..1dd6070 100644
--- a/lldb/source/Plugins/ABI/LoongArch/ABISysV_loongarch.cpp
+++ b/lldb/source/Plugins/ABI/LoongArch/ABISysV_loongarch.cpp
@@ -533,10 +533,7 @@
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 @@
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 @@
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 144af04..80cf468 100644
--- a/lldb/source/Plugins/ABI/LoongArch/ABISysV_loongarch.h
+++ b/lldb/source/Plugins/ABI/LoongArch/ABISysV_loongarch.h
@@ -40,10 +40,9 @@
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 6f0fd3a..2cc1bbb 100644
--- a/lldb/source/Plugins/ABI/MSP430/ABISysV_msp430.cpp
+++ b/lldb/source/Plugins/ABI/MSP430/ABISysV_msp430.cpp
@@ -305,10 +305,7 @@
}
// 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 @@
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 @@
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 8ef39e7..3a383e4 100644
--- a/lldb/source/Plugins/ABI/MSP430/ABISysV_msp430.h
+++ b/lldb/source/Plugins/ABI/MSP430/ABISysV_msp430.h
@@ -35,10 +35,9 @@
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 9c7312b..d7ebe22 100644
--- a/lldb/source/Plugins/ABI/Mips/ABISysV_mips.cpp
+++ b/lldb/source/Plugins/ABI/Mips/ABISysV_mips.cpp
@@ -954,31 +954,24 @@
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 @@
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 e77a8bf..0cab965 100644
--- a/lldb/source/Plugins/ABI/Mips/ABISysV_mips.h
+++ b/lldb/source/Plugins/ABI/Mips/ABISysV_mips.h
@@ -34,10 +34,9 @@
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 4cc37dd..dcaef20 100644
--- a/lldb/source/Plugins/ABI/Mips/ABISysV_mips64.cpp
+++ b/lldb/source/Plugins/ABI/Mips/ABISysV_mips64.cpp
@@ -1127,31 +1127,24 @@
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 @@
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 3eda399..82d3c81 100644
--- a/lldb/source/Plugins/ABI/Mips/ABISysV_mips64.h
+++ b/lldb/source/Plugins/ABI/Mips/ABISysV_mips64.h
@@ -34,10 +34,9 @@
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 e482b8d..405ba57 100644
--- a/lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc.cpp
+++ b/lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc.cpp
@@ -857,10 +857,7 @@
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 @@
// 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 @@
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 21b970f..1f736f1 100644
--- a/lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc.h
+++ b/lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc.h
@@ -34,10 +34,9 @@
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 0aa51ef..0392dab 100644
--- a/lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc64.cpp
+++ b/lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc64.cpp
@@ -954,9 +954,7 @@
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 @@
// 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 @@
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 bfa96cc..c7885eb 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 @@
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 c463bd0..06415a6 100644
--- a/lldb/source/Plugins/ABI/RISCV/ABISysV_riscv.cpp
+++ b/lldb/source/Plugins/ABI/RISCV/ABISysV_riscv.cpp
@@ -718,10 +718,7 @@
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 @@
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 @@
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 d8cf008..539a45d 100644
--- a/lldb/source/Plugins/ABI/RISCV/ABISysV_riscv.h
+++ b/lldb/source/Plugins/ABI/RISCV/ABISysV_riscv.h
@@ -51,10 +51,9 @@
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 82853c9..a88a3b0 100644
--- a/lldb/source/Plugins/ABI/SystemZ/ABISysV_s390x.cpp
+++ b/lldb/source/Plugins/ABI/SystemZ/ABISysV_s390x.cpp
@@ -617,10 +617,7 @@
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 @@
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 ecf3e39..318be99 100644
--- a/lldb/source/Plugins/ABI/SystemZ/ABISysV_s390x.h
+++ b/lldb/source/Plugins/ABI/SystemZ/ABISysV_s390x.h
@@ -34,10 +34,9 @@
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 f03acbc..d484b78 100644
--- a/lldb/source/Plugins/ABI/X86/ABIMacOSX_i386.cpp
+++ b/lldb/source/Plugins/ABI/X86/ABIMacOSX_i386.cpp
@@ -356,10 +356,7 @@
// 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 @@
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 @@
// 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 @@
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 8c637b7..a72ee8ba 100644
--- a/lldb/source/Plugins/ABI/X86/ABIMacOSX_i386.h
+++ b/lldb/source/Plugins/ABI/X86/ABIMacOSX_i386.h
@@ -30,10 +30,9 @@
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 19ec5fa..f6b3666 100644
--- a/lldb/source/Plugins/ABI/X86/ABISysV_i386.cpp
+++ b/lldb/source/Plugins/ABI/X86/ABISysV_i386.cpp
@@ -623,10 +623,7 @@
// 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 @@
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 @@
// 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 @@
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 a19c8dd..b602729 100644
--- a/lldb/source/Plugins/ABI/X86/ABISysV_i386.h
+++ b/lldb/source/Plugins/ABI/X86/ABISysV_i386.h
@@ -36,10 +36,9 @@
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 83b01b1..a224b3b 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 @@
// 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 @@
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 @@
// 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 @@
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 ce0357d..efc493a 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 @@
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 098293c..8c6cea6 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 @@
// 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 @@
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 @@
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 2fab0fd..2485e4d 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 @@
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 89a20ee..5f0a863 100644
--- a/lldb/source/Plugins/UnwindAssembly/x86/UnwindAssembly-x86.cpp
+++ b/lldb/source/Plugins/UnwindAssembly/x86/UnwindAssembly-x86.cpp
@@ -193,9 +193,11 @@
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 0695f0d..2449c82 100644
--- a/lldb/source/Symbol/FuncUnwinders.cpp
+++ b/lldb/source/Symbol/FuncUnwinders.cpp
@@ -468,17 +468,10 @@
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 @@
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 b970cb7..a035c57 100644
--- a/lldb/source/Target/RegisterContextUnwind.cpp
+++ b/lldb/source/Target/RegisterContextUnwind.cpp
@@ -431,9 +431,7 @@
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 @@
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 @@
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;
}