bugfix: 在内核线程中,rflags未按照预期值进行设置的问题

This commit is contained in:
fslongjin
2022-07-30 13:12:29 +08:00
parent 54f9d98f71
commit 5963c45116
2 changed files with 6 additions and 2 deletions

View File

@ -27,8 +27,10 @@ ENTRY(kernel_thread_func)
popq %rax
movq %rax, %es
popq %rax
addq $0x38, %rsp
movq %rdx, %rdi
addq $0x20, %rsp
popfq
addq $0x10, %rsp
movq %rdx, %rdi
callq *%rbx
movq %rax, %rdi
callq process_do_exit

View File

@ -422,6 +422,8 @@ ul initial_kernel_thread(ul arg)
// 准备切换到用户态
struct pt_regs *regs;
// 若在后面这段代码中触发中断return时会导致段选择子错误从而触发#GP因此这里需要cli
cli();
current_pcb->thread->rip = (ul)ret_from_system_call;
current_pcb->thread->rsp = (ul)current_pcb + STACK_SIZE - sizeof(struct pt_regs);
current_pcb->thread->fs = USER_DS | 0x3;