From cdc72c7db1c3031085f44294bf1bfcb404708e9a Mon Sep 17 00:00:00 2001 From: Leon Alrae Date: Mon, 12 Feb 2018 16:21:55 -0500 Subject: [PATCH] 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 --- qemu/target-mips/translate.c | 1 + 1 file changed, 1 insertion(+) diff --git a/qemu/target-mips/translate.c b/qemu/target-mips/translate.c index fed7eae3..ded40d46 100644 --- a/qemu/target-mips/translate.c +++ b/qemu/target-mips/translate.c @@ -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; }