[Lldb-commits] [lldb] [lldb] Modernize ABI-based unwind plan creation (PR #128505)
via lldb-commits
lldb-commits at lists.llvm.org
Mon Feb 24 04:44:47 PST 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-lldb
Author: Pavel Labath (labath)
<details>
<summary>Changes</summary>
Replace the by-ref return value with an actual result.
---
Patch is 68.65 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/128505.diff
42 Files Affected:
- (modified) lldb/include/lldb/Symbol/UnwindPlan.h (+5)
- (modified) lldb/include/lldb/Target/ABI.h (+3-2)
- (modified) lldb/source/Commands/CommandObjectTarget.cpp (+6-8)
- (modified) lldb/source/Plugins/ABI/AArch64/ABIMacOSX_arm64.cpp (+15-23)
- (modified) lldb/source/Plugins/ABI/AArch64/ABIMacOSX_arm64.h (+2-3)
- (modified) lldb/source/Plugins/ABI/AArch64/ABISysV_arm64.cpp (+19-27)
- (modified) lldb/source/Plugins/ABI/AArch64/ABISysV_arm64.h (+2-3)
- (modified) lldb/source/Plugins/ABI/ARC/ABISysV_arc.cpp (+8-14)
- (modified) lldb/source/Plugins/ABI/ARC/ABISysV_arc.h (+2-3)
- (modified) lldb/source/Plugins/ABI/ARM/ABIMacOSX_arm.cpp (+15-23)
- (modified) lldb/source/Plugins/ABI/ARM/ABIMacOSX_arm.h (+2-3)
- (modified) lldb/source/Plugins/ABI/ARM/ABISysV_arm.cpp (+15-24)
- (modified) lldb/source/Plugins/ABI/ARM/ABISysV_arm.h (+2-3)
- (modified) lldb/source/Plugins/ABI/Hexagon/ABISysV_hexagon.cpp (+15-19)
- (modified) lldb/source/Plugins/ABI/Hexagon/ABISysV_hexagon.h (+2-3)
- (modified) lldb/source/Plugins/ABI/LoongArch/ABISysV_loongarch.cpp (+13-18)
- (modified) lldb/source/Plugins/ABI/LoongArch/ABISysV_loongarch.h (+2-3)
- (modified) lldb/source/Plugins/ABI/MSP430/ABISysV_msp430.cpp (+13-17)
- (modified) lldb/source/Plugins/ABI/MSP430/ABISysV_msp430.h (+2-3)
- (modified) lldb/source/Plugins/ABI/Mips/ABISysV_mips.cpp (+16-22)
- (modified) lldb/source/Plugins/ABI/Mips/ABISysV_mips.h (+2-3)
- (modified) lldb/source/Plugins/ABI/Mips/ABISysV_mips64.cpp (+16-22)
- (modified) lldb/source/Plugins/ABI/Mips/ABISysV_mips64.h (+2-3)
- (modified) lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc.cpp (+16-22)
- (modified) lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc.h (+2-3)
- (modified) lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc64.cpp (+16-22)
- (modified) lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc64.h (+3-3)
- (modified) lldb/source/Plugins/ABI/RISCV/ABISysV_riscv.cpp (+13-18)
- (modified) lldb/source/Plugins/ABI/RISCV/ABISysV_riscv.h (+2-3)
- (modified) lldb/source/Plugins/ABI/SystemZ/ABISysV_s390x.cpp (+8-10)
- (modified) lldb/source/Plugins/ABI/SystemZ/ABISysV_s390x.h (+2-3)
- (modified) lldb/source/Plugins/ABI/X86/ABIMacOSX_i386.cpp (+15-18)
- (modified) lldb/source/Plugins/ABI/X86/ABIMacOSX_i386.h (+2-3)
- (modified) lldb/source/Plugins/ABI/X86/ABISysV_i386.cpp (+15-18)
- (modified) lldb/source/Plugins/ABI/X86/ABISysV_i386.h (+2-3)
- (modified) lldb/source/Plugins/ABI/X86/ABISysV_x86_64.cpp (+15-18)
- (modified) lldb/source/Plugins/ABI/X86/ABISysV_x86_64.h (+2-3)
- (modified) lldb/source/Plugins/ABI/X86/ABIWindows_x86_64.cpp (+14-18)
- (modified) lldb/source/Plugins/ABI/X86/ABIWindows_x86_64.h (+2-3)
- (modified) lldb/source/Plugins/UnwindAssembly/x86/UnwindAssembly-x86.cpp (+5-3)
- (modified) lldb/source/Symbol/FuncUnwinders.cpp (+4-16)
- (modified) lldb/source/Target/RegisterContextUnwind.cpp (+3-9)
``````````diff
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/...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/128505
More information about the lldb-commits
mailing list