ksco 的工作日志
记一下,明天继续 debug。
还是没有头绪,我决定走 hard way,在 native 和 dr 之间,逐条指令比对结果,看看透明性到底在哪里遭到了破坏。
ksco 的工作日志
还是没有头绪,我决定走 hard way,在 native 和 dr 之间,逐条指令比对结果,看看透明性到底在哪里遭到了破坏。
解决了!!!!问题是 AUIPC 在 decode 的时候,imm 没有做 sign extend,所以如果 imm 是个负数,就会算出来错误的地址,导致 segfault。这么蠢的问题我竟然找了两天,JIT 真的好难 debug 🥹
This media is not supported in your browser
VIEW IN TELEGRAM
为了不带键盘鼠标显示器去北京,造了个 RISC-V 笔记本准备峰会上演示用。
极少在自己城市打车,今天我爸没空送我,所以叫了个网约车。上车之后发现司机把后座铺了整张垫子,直接把安全带插口盖住了,我费了好大的劲才抠出来。小城市的司机和乘客都太可怕了😱
卧槽为什么执行
j pc + 0x110b4 spike 往 reg write log 里面记了一个 write to x0 with value 4 啊!要用 Spike,甚至还要处理这种灵车
.
do {
commit_log_reset(&processor);
pc = fetch.func(&processor, fetch.insn, state->pc);
if (pc & 1) {
// some weird Spike mechanics that we need to bypass.
switch (pc) {
case PC_SERIALIZE_BEFORE:
state->serialized = true;
break;
case PC_SERIALIZE_AFTER:
break;
default:
CHECK_S(false) << fmt::format("invalid pc (0x{:08X}).", pc);
}
} else
break;
} while (true);
state->pc = pc;