From 084061f97e5e3fa5e811a63e7d6d8181a7a9ef52 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Sat, 29 Aug 2026 17:53:40 +0800 Subject: [PATCH] =?UTF-8?q?debug(kernel):=20[STK]=20rbp=20=E9=93=BE?= =?UTF-8?q?=E5=9B=9E=E6=BA=AF=E6=89=A9=E5=B1=95=E5=88=B0=E6=89=80=E6=9C=89?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=EF=BC=88=E5=90=AB=20#UD=20int=206=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 本次崩溃为 int=6 rip=0x7bada(执行流跳栈地址),走 [EX] 分支未打印链。统一 [PF]/[EX] 均输出 [STK] rbp 链。 --- VKernel/Kernel/intr/idt.vp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/VKernel/Kernel/intr/idt.vp b/VKernel/Kernel/intr/idt.vp index d00ed2d..1686761 100644 --- a/VKernel/Kernel/intr/idt.vp +++ b/VKernel/Kernel/intr/idt.vp @@ -177,6 +177,31 @@ def isrCommonhandler(interrupt: t.CInt): ex_buf: t.CArray[t.CChar, 100] viperlib.snprintf(c.Addr(ex_buf), 100, "[EX] int=%d rip=0x%lx rsp=0x%lx\n", interrupt, ex_rip, ex_rsp) serial.puts(ex_buf) + # [STK] rbp 链回溯(与 #PF 分支一致,定位栈损坏源) + fr0: t.CUInt64T = 0 + fr1: t.CUInt64T = 0 + fr2: t.CUInt64T = 0 + fr3: t.CUInt64T = 0 + fr4: t.CUInt64T = 0 + c.Asm(f"""mov rax, [_fault_rbp] + mov {c.AsmOut(fr0, t.ASM_DESCR.OUTPUT_REG)}, rax + mov rax, [rax + 8] + mov {c.AsmOut(fr1, t.ASM_DESCR.OUTPUT_REG)}, rax + mov rax, [_fault_rbp] + mov rax, [rax] + mov {c.AsmOut(fr2, t.ASM_DESCR.OUTPUT_REG)}, rax + mov rax, [rax + 8] + mov {c.AsmOut(fr3, t.ASM_DESCR.OUTPUT_REG)}, rax + mov rax, [_fault_rbp] + mov rax, [rax] + mov rax, [rax] + mov rax, [rax + 8] + mov {c.AsmOut(fr4, t.ASM_DESCR.OUTPUT_REG)}, rax""", + op=[t.ASM_DESCR.CLOBBER_RAX]) + stk_buf: t.CArray[t.CChar, 160] + viperlib.snprintf(c.Addr(stk_buf), 160, "[STK] rbp=0x%lx ret: 0x%lx 0x%lx 0x%lx 0x%lx\n", + fr0, fr1, fr2, fr3, fr4) + serial.puts(stk_buf) s: sched.Scheduler | t.CPtr = sched._sched_ptr # 如果调度器未初始化,直接进入安全停机状态 if s == 0: