spike difftest可能存在bug
czlx-github opened this issue · 2 comments
czlx-github commented
在开启difftest的情况下,执行如下指令(放在init_difftest()
最后)后,NEMU sdb si
后会crash(在QEMU时则正常)。
// 模拟让ref执行任意指令
word_t inst = 0x800003b7; // lui t2, 0x80000
ref_difftest_memcpy(PMEM_LEFT, &inst, 4, DIFFTEST_TO_REF);
ref_difftest_exec(1);
// recover environment
ref_difftest_memcpy(RESET_VECTOR, guest_to_host(RESET_VECTOR), img_size, DIFFTEST_TO_REF);
ref_difftest_regcpy(&cpu, DIFFTEST_TO_REF);
初步排查后,在sim_t::diff_memcpy()
里加上mmu->flush_icache()
后会正常。但无法确认是否spike底层实现有问题,还是sim_t::diff_memcpy()
代码有问题。
sashimi-yzh commented
你说的crash是指difftest报错, 还是NEMU自身崩溃(例如段错误)?
如果是前者, 那这个现象是符合预期的, 更多信息可以参考RISC-V的fence.i
指令.
czlx-github commented
是前者。已确认加上fence.i
后正确运行,那代码的确没问题(看手册不仔细,排查问题两行泪😂)。