eatvector
eatvector
### RT-Thread Version 8a71f41 ### Hardware Type/Architectures riscv64 ### Develop Toolchain GCC ### Describe the bug 1.问题复现 下面程序在linux上运行,线程终止且不会打印任何数据,但是在qemu-riscv64上运行 rt-smart,线程会一直循环打印“should not reach here“ ``` #include #include #include #include #include #include int...
### RT-Thread Version ece19e9 ### Hardware Type/Architectures riscv64 qemu ### Develop Toolchain GCC ### Describe the bug components/lwp/arch/risc-v/rv64/lwp_gcc.S 中的arch_signal_quit中将内核栈中的地址保存到用户栈中,之后又从用户栈中的保存值恢复sp,在多核环境下,如果另外一个核心运行的其他线程(属于同一进程)通过修改当前线程用户栈里保存的内核栈地址,可能导致内核崩溃,需要考虑该函数更安全的实现方案。 ``` arch_signal_quit: LOAD a0, FRAME_OFF_SP(sp) addi a1, sp, CTX_REG_NR * REGBYTES...
## 拉取/合并请求描述:(PR description) 参考aarch64架构下的系统调用重启实现riscv64架构下的系统调用重启,关联问题#9761 [ #### 为什么提交这份PR (why to submit this PR) #### 你的解决方案是什么 (what is your solution) 可重启的系统调用如果由于接受到信号中断导致执行失败,则在信号退出处理时,根据用户栈保存的exception frame 恢复寄存器(包括epc以及存储系统调用号和系统调用参数的寄存器等),并跳转到 trap_entry,以重新启动系统调用。 **系统调用功能函数执行前阶段** 1. 在 syscall_handler 中,将系统调用第一个参数(a0,同时作为返回值寄存器)备份至内核栈的 t0 上下文槽位。RISC-V ABI...