target-mips: fix CP0.BadVAddr by stopping translation on Address Error

CP0.BadVAddr is supposed to capture the most recent virtual address that caused
the exception. Currently this does not work correctly for unaligned instruction
fetch as translation is not stopped and CP0.BadVAddr is updated with subsequent
addresses.

Backports commit 62c688693bf2f0355fc5bad5dcc59c1cd2a51f1a from qemu
This commit is contained in:
Leon Alrae 2018-02-12 16:21:55 -05:00 committed by Lioncash
parent 6bd44fb70a
commit cdc72c7db1
No known key found for this signature in database
GPG key ID: 4E3C3CC1031BA9C7

View file

@ -18606,6 +18606,7 @@ static void decode_opc(CPUMIPSState *env, DisasContext *ctx, bool *insn_need_pat
if (ctx->pc & 0x3) {
env->CP0_BadVAddr = ctx->pc;
generate_exception_err(ctx, EXCP_AdEL, EXCP_INST_NOTAVAIL);
ctx->bstate = BS_STOP;
return;
}