From ff802c2eed2c0b52775685b14b8a4dc47c96dce8 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Wed, 26 Aug 2026 19:40:13 +0800 Subject: [PATCH] =?UTF-8?q?debug(intr):=20#GP=20=E6=89=93=E5=8D=B0=20CR0/C?= =?UTF-8?q?R4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit movaps 地址 0x7d780 16 对齐仍 #GP——需确认 SSE 是否真启用(CR4.OSFXSR bit9) 与 CR0.EM(bit2)。若 OSFXSR=0 则 enable_sse 未生效(可能是 stub 解析问题)。 --- VKernel/Kernel/intr/idt.vp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) 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 # 如果调度器未初始化,直接进入安全停机状态