From ead0d10b32fae58c1731b1684e8bcb1112be951b Mon Sep 17 00:00:00 2001 From: t-mustafin <66252296+t-mustafin@users.noreply.github.com> Date: Mon, 24 Jun 2024 22:09:05 +0300 Subject: [PATCH] [RISC-V] Fix context restoration as #101709 describes (#101865) * [RISCV-V] Fix context restoration as 101709 * Feedback --- src/coreclr/pal/src/arch/riscv64/context2.S | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/coreclr/pal/src/arch/riscv64/context2.S b/src/coreclr/pal/src/arch/riscv64/context2.S index 20273eb87d809..725e4ec9f139a 100644 --- a/src/coreclr/pal/src/arch/riscv64/context2.S +++ b/src/coreclr/pal/src/arch/riscv64/context2.S @@ -105,10 +105,15 @@ LOCAL_LABEL(No_Restore_CONTEXT_INTEGER): beqz t1, LOCAL_LABEL(No_Restore_CONTEXT_CONTROL) ld ra, (CONTEXT_Ra)(t4) + ld t1, (CONTEXT_T4)(t4) + ld fp, (CONTEXT_Sp)(t4) + sd t1, -8(fp) ld fp, (CONTEXT_Fp)(t4) - ld sp, (CONTEXT_Sp)(t4) ld t1, (CONTEXT_Pc)(t4) // Since we cannot control $pc directly, we're going to corrupt t1 - ld t4, (CONTEXT_T4)(t4) + ld t4, (CONTEXT_Sp)(t4) + addi sp, t4, -8 + ld t4, (sp) + addi sp, sp, 8 jr t1 LOCAL_LABEL(No_Restore_CONTEXT_CONTROL):