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