diff --git a/VKernel/Kernel/intr/idt.vp b/VKernel/Kernel/intr/idt.vp index 7cf5911..bba6858 100644 --- a/VKernel/Kernel/intr/idt.vp +++ b/VKernel/Kernel/intr/idt.vp @@ -128,12 +128,19 @@ def isrCommonhandler(interrupt: t.CInt): gp_rip: t.CUInt64T = 0 gp_err: t.CUInt64T = 0 gp_rsp: t.CUInt64T = 0 + gp_cr4: t.CUInt64T = 0 + gp_cr0: t.CUInt64T = 0 c.Asm(f"""mov {c.AsmOut(gp_rip, t.ASM_DESCR.OUTPUT_REG)}, [_fault_rip] mov {c.AsmOut(gp_err, t.ASM_DESCR.OUTPUT_REG)}, [_fault_err] - mov {c.AsmOut(gp_rsp, t.ASM_DESCR.OUTPUT_REG)}, [_fault_rsp]""", + mov {c.AsmOut(gp_rsp, t.ASM_DESCR.OUTPUT_REG)}, [_fault_rsp] + mov rax, cr4 + mov {c.AsmOut(gp_cr4, t.ASM_DESCR.OUTPUT_REG)}, rax + mov rax, cr0 + mov {c.AsmOut(gp_cr0, t.ASM_DESCR.OUTPUT_REG)}, rax""", op=[t.ASM_DESCR.CLOBBER_RAX]) - gp_buf: t.CArray[t.CChar, 100] - viperlib.snprintf(c.Addr(gp_buf), 100, "[GP] rip=0x%lx err=0x%lx rsp=0x%lx\n", gp_rip, gp_err, gp_rsp) + gp_buf: t.CArray[t.CChar, 140] + viperlib.snprintf(c.Addr(gp_buf), 140, "[GP] rip=0x%lx err=0x%lx rsp=0x%lx cr4=0x%lx cr0=0x%lx\n", + gp_rip, gp_err, gp_rsp, gp_cr4, gp_cr0) serial.puts(gp_buf) s: sched.Scheduler | t.CPtr = sched._sched_ptr # 如果调度器未初始化,直接进入安全停机状态