From 0cde243f935b64ffa18b07f8c6ffde07c5c51ba0 Mon Sep 17 00:00:00 2001 From: Blue Swirl Date: Sun, 11 Apr 2010 19:47:49 +0000 Subject: [PATCH] Sparc: fix exceptions in delay slot Fix a case where an exception happens with the instruction in the delay slot. Recovery of branch condition in the exception handling code was not converted to TCG. Because the condition was bogus, wrong NPC could be selected from the two candidates. A nice bug report with a test case can be found in: https://bugs.launchpad.net/qemu/+bug/551814 Fix based on patch by Fabrice Bellard. Signed-off-by: Blue Swirl --- target-sparc/translate.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/target-sparc/translate.c b/target-sparc/translate.c index 8b988fb..2c07385 100644 --- a/target-sparc/translate.c +++ b/target-sparc/translate.c @@ -4932,12 +4932,12 @@ void gen_pc_load(CPUState *env, TranslationBlock *tb, if (npc == 1) { /* dynamic NPC: already stored */ } else if (npc == 2) { - target_ulong t2 = (target_ulong)(unsigned long)puc; - /* jump PC: use T2 and the jump targets of the translation */ - if (t2) + /* jump PC: use 'cond' and the jump targets of the translation */ + if (env->cond) { env->npc = gen_opc_jump_pc[0]; - else + } else { env->npc = gen_opc_jump_pc[1]; + } } else { env->npc = npc; } -- 2.7.4