File tree Expand file tree Collapse file tree 2 files changed +27
-4
lines changed
lldb/source/Plugins/Instruction/RISCV Expand file tree Collapse file tree 2 files changed +27
-4
lines changed Original file line number Diff line number Diff line change @@ -1899,4 +1899,24 @@ RISCVSingleStepBreakpointLocationsPredictor::HandleAtomicSequence(
18991899 return bp_addrs;
19001900}
19011901
1902+ bool EmulateInstructionRISCV::CreateFunctionEntryUnwind (
1903+ UnwindPlan &unwind_plan) {
1904+ unwind_plan.Clear ();
1905+ unwind_plan.SetRegisterKind (eRegisterKindLLDB);
1906+
1907+ UnwindPlan::Row row;
1908+
1909+ // Our previous Call Frame Address is the stack pointer
1910+ row.GetCFAValue ().SetIsRegisterPlusOffset (gpr_sp_riscv, 0 );
1911+ row.SetRegisterLocationToSame (gpr_fp_riscv, /* must_replace=*/ false );
1912+
1913+ unwind_plan.AppendRow (std::move (row));
1914+ unwind_plan.SetSourceName (" EmulateInstructionRISCV" );
1915+ unwind_plan.SetSourcedFromCompiler (eLazyBoolNo);
1916+ unwind_plan.SetUnwindPlanValidAtAllInstructions (eLazyBoolYes);
1917+ unwind_plan.SetUnwindPlanForSignalTrap (eLazyBoolNo);
1918+ unwind_plan.SetReturnAddressRegister (gpr_ra_riscv);
1919+ return true ;
1920+ }
1921+
19021922} // namespace lldb_private
Original file line number Diff line number Diff line change @@ -57,11 +57,12 @@ class EmulateInstructionRISCV : public EmulateInstruction {
5757
5858 static bool SupportsThisInstructionType (InstructionType inst_type) {
5959 switch (inst_type) {
60- case eInstructionTypeAny:
61- case eInstructionTypePCModifying :
60+ case lldb_private:: eInstructionTypeAny:
61+ case lldb_private::eInstructionTypePrologueEpilogue :
6262 return true ;
63- case eInstructionTypePrologueEpilogue:
64- case eInstructionTypeAll:
63+
64+ case lldb_private::eInstructionTypePCModifying:
65+ case lldb_private::eInstructionTypeAll:
6566 return false ;
6667 }
6768 llvm_unreachable (" Fully covered switch above!" );
@@ -94,6 +95,8 @@ class EmulateInstructionRISCV : public EmulateInstruction {
9495 std::optional<RegisterInfo> GetRegisterInfo (lldb::RegisterKind reg_kind,
9596 uint32_t reg_num) override ;
9697
98+ bool CreateFunctionEntryUnwind (UnwindPlan &unwind_plan) override ;
99+
97100 std::optional<DecodeResult> ReadInstructionAt (lldb::addr_t addr);
98101 std::optional<DecodeResult> Decode (uint32_t inst);
99102 bool Execute (DecodeResult inst, bool ignore_cond);
You can’t perform that action at this time.
0 commit comments