From abdfd9500e07fab7d6ffd4385fa30a065c329a39 Mon Sep 17 00:00:00 2001 From: "Edgar E. Iglesias" Date: Thu, 16 Sep 2010 15:40:27 +0200 Subject: cris: Avoid spurios hw_abort on recursive bus faults Signed-off-by: Edgar E. Iglesias --- target-cris/helper.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'target-cris') diff --git a/target-cris/helper.c b/target-cris/helper.c index 053ed4ab2a..83b25c14da 100644 --- a/target-cris/helper.c +++ b/target-cris/helper.c @@ -235,9 +235,15 @@ void do_interrupt(CPUState *env) /* Apply the CRIS CCS shift. Clears U if set. */ cris_shift_ccs(env); - /* Now that we are in kernel mode, load the handlers address. */ + /* Now that we are in kernel mode, load the handlers address. + This load may not fault, real hw leaves that behaviour as + undefined. */ env->pc = ldl_code(env->pregs[PR_EBP] + ex_vec * 4); + /* Clear the excption_index to avoid spurios hw_aborts for recursive + bus faults. */ + env->exception_index = -1; + D_LOG("%s isr=%x vec=%x ccs=%x pid=%d erp=%x\n", __func__, env->pc, ex_vec, env->pregs[PR_CCS], -- cgit v1.2.3