异常与中断
先解读陷阱原因,再按需补充状态 CSR、通用寄存器现场和逐级 PTE。选择实际接收陷阱的模式;XLEN 指所选陷阱寄存器的宽度。所有计算在本地完成,不上传现场。
原因可从下拉框选择,也可在原因寄存器中填写自定义编码;下拉选择中断时自动设置 XLEN 最高位。原因寄存器必填;epc、tval 和其他现场可留空,表示未知而不是零。支持十进制、0x、0b、0o 及数字间下划线分组(如 0x0000_0001_0000_0000),只接受 XLEN 范围内完整非负整数,切换位宽不截断输入。默认现场留空;可主动加载 example.tc 的 Loop 72 故障示例,缺失字段不补零。
已加载示例:example.tc · seed 0xb7f1e2d4766c3919 · THREAD_ID=3。原日志 X0 非零,架构 x0 仍固定为零;STATUS 与 MSTATUS 不同,来源/时点待核实。SSTATUS 填在“HS sstatus”。已从 thread3.asm:12 补入 0x020ce827(vse32.v v16,(s9)),同 seed 归属仍需核实。反汇编与地址不一致分析见外部证据备注。
仅传递已填写且有效的寄存器 / PTE;寄存器位域页保留完整目录,并标明本次同步的现场值。数据仅通过当前标签页临时存储传递,不上传、不写入链接。
解读结果
定位链路与缺失证据
状态与路由上下文 可选
中断使能、挂起与委托 按需提供
异常后 MPP / SPP、MPV / SPV 和 xPIE 已由硬件更新;陷入后的 MIE / SIE=0 不能证明异常前未开中断。M 态 MPRV 访问的原始 MPP / MPV 可能已被覆盖,需结合异常前记录。外部中断设备还需 PLIC / AIA 等控制器现场。
故障指令与通用寄存器分析 x0–x31
填写 trap 入口汇编保存的被中断程序现场,不是 C handler 当前寄存器。x0 固定为 0;空白表示未知。当前自动计算仅支持基础整数 load / store;压缩、AMO、浮点和向量访存需另行分析。
页故障 · 逐级 PTE 分析
输入真实 PTE 快照后才向下寻址,遇到缺失即停止。支持 Sv32 / Sv39 / Sv48 / Sv57 及对应 G-stage x4 模式;不模拟两阶段嵌套内存读取。
SUM / MXR 填访问时的有效值,而不是无条件复制当前 status:VS-stage MXR = HS.MXR OR VS.MXR;G-stage 仅使用 HS.MXR,且按 U 权限检查、不使用 SUM。这里的“写 / AMO”检查页表写权限,不模拟原子访问的其他约束。
| 级别 | 索引与 PTE 寻址 | PTE 原始值 | 字段与检查结果 |
|---|
已知条件仅覆盖基础页表规则,不覆盖 PMP / PMA、扩展权限、TLB 陈旧或 SFENCE.VMA / HFENCE 时序。读取 PTE 本身失败不能自动归为页故障,需要区分访问故障和两阶段翻译失败。
外部证据与平台检查
三个脚本放同一目录:node parse-trap-log.cjs trap.log --xlen 64 --target M --asm thread3.asm --output evidence.json;多份现场用 --record 1 选择。
JSON 格式说明与示例
必填 version=1、xlen、target、registers。所有寄存器、地址和种子使用字符串,空缺字段省略,不用零代替未知。寄存器名使用小写;原日志 STATUS / 非零 X0 使用 log-status / log-x0。source 为来源,instruction 为原始机器码,snapshot 声明采样时点,translation 为一次独立页表遍历,physical 为物理访问证据,notes 保存补充说明。未知字段和超宽数值会报错。
{
"version": 1, "xlen": 64, "target": "M",
"source": {"file":"trap.log", "hart":"3", "seed":"0x1234"},
"registers": {"mcause":"0x7", "mepc":"0x9c600010", "mtval":"0x1158095", "mstatus":"0x8a00282b80", "x25":"0x8ac04ae0"},
"instruction": {"epc":"0x9c600010", "word":"0x020ce827", "assembly":"vse32.v v16,(s9)"},
"snapshot": {"timing":"unknown", "gprSource":"unknown"},
"translation": {"stage":"g", "root":"0x901610000008bc00", "access":"write", "ptes":{}},
"physical": {"trace":"请填写真实 trace 出处;未知 PA 不要猜填"},
"notes":"来源是否同一轮仍待核实"
}填写备注仅表示已记录线索,不表示这些证据已核实,更不代表根因已经确定。