debug(kernel): 保存并打印崩溃时 RAX(验证 cr2=rax-偏移 关系)
[STK] 显示崩溃帧 rbp=0x7d640 正常,但 cr2=0x0 需 rax=0x6f0——矛盾待解。isr.s 新增 _fault_rax,异常打印 [RAX] 行确认崩溃时 rax 真实值。
This commit is contained in:
1 parent
084061f97e
commit
25af08ecf4
2 files changed
+17
No files matched your search
@@ -124,6 +124,13 @@ def isrCommonhandler(interrupt: t.CInt):
|
||||
buf: t.CArray[t.CChar, 100]
|
||||
viperlib.snprintf(c.Addr(buf), 100, "[PF] cr2=0x%lx rip=0x%lx err=0x%lx rsp=0x%lx\n", cr2, fault_rip, fault_err, fault_rsp)
|
||||
serial.puts(buf)
|
||||
# [RAX] 崩溃时 rax(isr.s 保存):定位 cr2 与 rax 关系(rax-偏移=cr2)
|
||||
f_rax: t.CUInt64T = 0
|
||||
c.Asm(f"""mov {c.AsmOut(f_rax, t.ASM_DESCR.OUTPUT_REG)}, [_fault_rax]""",
|
||||
op=[t.ASM_DESCR.CLOBBER_RAX])
|
||||
rax_buf: t.CArray[t.CChar, 80]
|
||||
viperlib.snprintf(c.Addr(rax_buf), 80, "[RAX] rax=0x%lx\n", f_rax)
|
||||
serial.puts(rax_buf)
|
||||
# [STK] rbp 链回溯(定位栈损坏源:崩溃帧 + 4 级调用链的返回地址)
|
||||
fr0: t.CUInt64T = 0
|
||||
fr1: t.CUInt64T = 0
|
||||
@@ -177,6 +184,13 @@ 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)
|
||||
# [RAX] 崩溃时 rax(isr.s 保存)
|
||||
f_rax: t.CUInt64T = 0
|
||||
c.Asm(f"""mov {c.AsmOut(f_rax, t.ASM_DESCR.OUTPUT_REG)}, [_fault_rax]""",
|
||||
op=[t.ASM_DESCR.CLOBBER_RAX])
|
||||
rax_buf: t.CArray[t.CChar, 80]
|
||||
viperlib.snprintf(c.Addr(rax_buf), 80, "[RAX] rax=0x%lx\n", f_rax)
|
||||
serial.puts(rax_buf)
|
||||
# [STK] rbp 链回溯(与 #PF 分支一致,定位栈损坏源)
|
||||
fr0: t.CUInt64T = 0
|
||||
fr1: t.CUInt64T = 0
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
.comm _fault_err, 8, 8
|
||||
.comm _fault_rsp, 8, 8
|
||||
.comm _fault_rbp, 8, 8
|
||||
.comm _fault_rax, 8, 8
|
||||
|
||||
.section .text
|
||||
.intel_syntax noprefix
|
||||
@@ -92,6 +93,7 @@ isr\num\()_frame_ready:
|
||||
|
||||
# Push all general-purpose registers
|
||||
push rax
|
||||
mov [_fault_rax], rax
|
||||
push rbx
|
||||
push rdx
|
||||
push rsi
|
||||
@@ -277,6 +279,7 @@ isr\num\()_frame_ready:
|
||||
|
||||
# Push all general-purpose registers
|
||||
push rax
|
||||
mov [_fault_rax], rax
|
||||
push rbx
|
||||
push rsi
|
||||
push rdi
|
||||
|
||||
Reference in new issue
Block a user