diff --git a/components/lwp/arch/risc-v/rv64/lwp_gcc.S b/components/lwp/arch/risc-v/rv64/lwp_gcc.S index 61db9b24e5..c0936623bf 100644 --- a/components/lwp/arch/risc-v/rv64/lwp_gcc.S +++ b/components/lwp/arch/risc-v/rv64/lwp_gcc.S @@ -174,6 +174,9 @@ arch_thread_signal_enter: /* dummy a2 */ mv a2, a1 + /* restore user GP */ + LOAD gp, FRAME_OFF_GP(s3) + /** * handler(signo, psi, ucontext); */ diff --git a/libcpu/risc-v/t-head/c906/stackframe.h b/libcpu/risc-v/t-head/c906/stackframe.h index d6fd0c3c5e..6e8ab0c7bd 100644 --- a/libcpu/risc-v/t-head/c906/stackframe.h +++ b/libcpu/risc-v/t-head/c906/stackframe.h @@ -16,6 +16,7 @@ #define BYTES(idx) ((idx) * REGBYTES) #define FRAME_OFF_SSTATUS BYTES(2) #define FRAME_OFF_SP BYTES(32) +#define FRAME_OFF_GP BYTES(3) #include "cpuport.h" #include "encoding.h" diff --git a/libcpu/risc-v/virt64/stackframe.h b/libcpu/risc-v/virt64/stackframe.h index 550fa8947e..4caf3bc7ab 100644 --- a/libcpu/risc-v/virt64/stackframe.h +++ b/libcpu/risc-v/virt64/stackframe.h @@ -21,6 +21,7 @@ #define BYTES(idx) ((idx) * REGBYTES) #define FRAME_OFF_SSTATUS BYTES(2) #define FRAME_OFF_SP BYTES(32) +#define FRAME_OFF_GP BYTES(3) #ifdef __ASSEMBLY__