用户线程入口的第一个形参在 rdi,但 drop_to_user_mode 这条路径从未设置过 rdi, thread_create(fn, arg) 的 arg 在用户侧一直是垃圾值。iretq 只恢复 RIP/CS/RFLAGS/RSP/SS,因此在 iretq 前显式 mov rdi 即可。
用户线程入口的第一个形参在 rdi,但 drop_to_user_mode 这条路径从未设置过 rdi, thread_create(fn, arg) 的 arg 在用户侧一直是垃圾值。iretq 只恢复 RIP/CS/RFLAGS/RSP/SS,因此在 iretq 前显式 mov rdi 即可。