From 62c688693bf2f0355fc5bad5dcc59c1cd2a51f1a Mon Sep 17 00:00:00 2001 From: Leon Alrae Date: Mon, 16 Mar 2015 16:54:42 +0000 Subject: 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. Signed-off-by: Leon Alrae --- target-mips/translate.c | 1 + 1 file changed, 1 insertion(+) (limited to 'target-mips') diff --git a/target-mips/translate.c b/target-mips/translate.c index 9059bfd9f1..0e2443a032 100644 --- a/target-mips/translate.c +++ b/target-mips/translate.c @@ -18438,6 +18438,7 @@ static void decode_opc(CPUMIPSState *env, DisasContext *ctx) if (ctx->pc & 0x3) { env->CP0_BadVAddr = ctx->pc; generate_exception_err(ctx, EXCP_AdEL, EXCP_INST_NOTAVAIL); + ctx->bstate = BS_STOP; return; } -- cgit v1.2.3