浏览代码

[rv]信号处理进入用户态前恢复gp (#9072)

* [rv/virt/stackframe.h]添加GP寄存器保存偏移量宏

* 【rv/c906/stackframe.h]定义GP寄存器存储偏移量

* [rv]信号处理切换到用户态前恢复gp
heyuanjie87 10 月之前
父节点
当前提交
06ad67d549

+ 3 - 0
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);
      */

+ 1 - 0
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"

+ 1 - 0
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__