DragonOS/user
aLinChe cb6237403a
fix(syscall): 修复cputime, sys_rt_sigtimedwait and sys_rt_sigreturn (#1406)
1. **修复:** 进程 CPU 时间统UserUContext 计精度,将统计基准调整为扣除 IRQ 和 Steal 时间后的净时间(accounted_cputime),避免将硬件中断处理时间错误计入进程的 utime/stime
2. **修复:** `sys_rt_sigtimedwait`: 
- 修复了信号等待逻辑,确保即使 等待信号集 为空也能正确进入 do_kernel_rt_sigtimedwait,符合 Linux 行为。
- 修复潜在的无限睡眠问题:当线程被非目标信号或非超时事件唤醒时,将正确返回 EINTR,避免进程一直挂起。
- 修复了bitflags错误移除的bug,应该使用remove()。
3. **修复:** `sys_rt_sigreturn:`:
- 当从信号处理函数返回用户态时,内核错误地使用 sysretq 来处理 sys_rt_sigreturn 的返回,%rcx 和 %r11 这两个寄存器被意外破坏。
- 修复:如果待恢复的 %rcx / %r11 与 sysretq 的行为冲突,则强制跳转到 .L_syscall_must_use_iret 分支,使用 iretq 指令精确恢复完整的上下文。

TODO: 目标线程的 TGID 没有正确设置为 leader 的 PID,导致还有两个sys_rt_sigtimedwait的测例无法通过。
```sh
Value of: tgkill(getpid(), tid, kSigno)
Expected: not -1 (success)
  Actual: -1 (of type int), with errno PosixError(errno=3 No such process)
```

---------

Signed-off-by: aLinChe <1129332011@qq.com>
2025-11-26 00:21:03 +08:00
..
apps fix(syscall): 修复cputime, sys_rt_sigtimedwait and sys_rt_sigreturn (#1406) 2025-11-26 00:21:03 +08:00
dadk/config feat: 实现线程组退出机制&添加go语言演示程序 (#1387) 2025-11-19 23:32:23 +08:00
sysconfig feat: support ssh app(dropbear). (#1392) 2025-11-22 14:49:12 +08:00
.gitignore 移除relibc和old libc以及旧的shell (#529) 2024-03-04 14:20:01 +08:00
Makefile feat(ci): 添加测试结果上传功能并优化构建流程 (#1380) 2025-11-17 22:01:13 +08:00