Browse Source

Attempt to read instruction from mbadaddr

pull/53/head
Andrew Waterman 9 years ago
parent
commit
6f407a8d54
  1. 14
      machine/emulation.c

14
machine/emulation.c

@ -128,11 +128,15 @@ void illegal_insn_trap(uintptr_t* regs, uintptr_t mcause, uintptr_t mepc)
" .word truly_illegal_insn\n"
" .popsection");
uintptr_t mstatus;
insn_t insn = get_insn(mepc, &mstatus);
if ((insn & 3) != 3)
return emulate_rvc(regs, mcause, mepc, mstatus, insn);
uintptr_t mstatus = read_csr(mstatus);
insn_t insn = read_csr(mbadaddr);
if (unlikely((insn & 3) != 3)) {
if (insn == 0)
insn = get_insn(mepc, &mstatus);
if ((insn & 3) != 3)
return emulate_rvc(regs, mcause, mepc, mstatus, insn);
}
write_csr(mepc, mepc + 4);

Loading…
Cancel
Save