diff options
| author | heyuanjie87 <[email protected]> | 2024-06-24 21:36:32 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-06-24 21:36:32 +0800 |
| commit | a5a89c439f905f68fee98f7b329b348a1c2171b3 (patch) | |
| tree | 520c1736efc5f4ffadf8ff636aa1058d8ba71aee /libcpu | |
| parent | 5e04d8b3c17c29ef85a8fab7e338847736b388ce (diff) | |
[rv]修正signal退出后用户态sp少8的问题 (#9080)
Diffstat (limited to 'libcpu')
| -rw-r--r-- | libcpu/risc-v/virt64/context_gcc.S | 2 | ||||
| -rw-r--r-- | libcpu/risc-v/virt64/cpuport.c | 1 | ||||
| -rw-r--r-- | libcpu/risc-v/virt64/cpuport.h | 4 | ||||
| -rw-r--r-- | libcpu/risc-v/virt64/stack.h | 1 |
4 files changed, 6 insertions, 2 deletions
diff --git a/libcpu/risc-v/virt64/context_gcc.S b/libcpu/risc-v/virt64/context_gcc.S index 733d15890c..486a787e61 100644 --- a/libcpu/risc-v/virt64/context_gcc.S +++ b/libcpu/risc-v/virt64/context_gcc.S @@ -44,9 +44,11 @@ li s10, (SSTATUS_SPP) or s11, s11, s10 PUSH_8 s11 + addi sp, sp, -8 .endm .macro RESTORE_CONTEXT + addi sp, sp, 8 POP_8 s11 csrw sstatus, s11 POP_8 s11 diff --git a/libcpu/risc-v/virt64/cpuport.c b/libcpu/risc-v/virt64/cpuport.c index 126ec9f825..92394bcc22 100644 --- a/libcpu/risc-v/virt64/cpuport.c +++ b/libcpu/risc-v/virt64/cpuport.c @@ -52,6 +52,7 @@ void *_rt_hw_stack_init(rt_ubase_t *sp, rt_ubase_t ra, rt_ubase_t sstatus) (*--sp) = 0; /* s10 */ (*--sp) = 0; /* s11 */ (*--sp) = sstatus; /* sstatus */ + --sp; /* align to 16bytes */ return (void *)sp; } diff --git a/libcpu/risc-v/virt64/cpuport.h b/libcpu/risc-v/virt64/cpuport.h index 92a3af32d7..8caccd100c 100644 --- a/libcpu/risc-v/virt64/cpuport.h +++ b/libcpu/risc-v/virt64/cpuport.h @@ -23,8 +23,8 @@ #error "Not supported XLEN" #endif -/* 33 general register */ -#define CTX_GENERAL_REG_NR 33 +/* 33 general register + 1 padding */ +#define CTX_GENERAL_REG_NR 34 #ifdef ENABLE_FPU /* 32 fpu register */ diff --git a/libcpu/risc-v/virt64/stack.h b/libcpu/risc-v/virt64/stack.h index d619d3fd35..4899c6f2c8 100644 --- a/libcpu/risc-v/virt64/stack.h +++ b/libcpu/risc-v/virt64/stack.h @@ -47,6 +47,7 @@ struct rt_hw_stack_frame rt_ubase_t t5; /* x30 - t5 - temporary register 5 */ rt_ubase_t t6; /* x31 - t6 - temporary register 6 */ rt_ubase_t user_sp_exc_stack; /* sscratch - user mode sp/exception stack */ + rt_ubase_t __padding; /* align to 16bytes */ #ifdef ENABLE_FPU rt_ubase_t f[CTX_FPU_REG_NR]; /* f0~f31 */ #endif |
