Skip to content

Commit

Permalink
target-alpha: Set PC correctly for floating-point exceptions
Browse files Browse the repository at this point in the history
PC should be one past the faulting insn.  Add better commentary
for the machine-check exception path.

Reported-by: Al Viro <viro@ZenIV.linux.org.uk>
Signed-off-by: Richard Henderson <rth@twiddle.net>
  • Loading branch information
rth7680 committed May 18, 2015
1 parent 9d5a626 commit ba9c5de
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 1 deletion.
2 changes: 2 additions & 0 deletions target-alpha/helper.c
Expand Up @@ -571,6 +571,8 @@ void QEMU_NORETURN dynamic_excp(CPUAlphaState *env, uintptr_t retaddr,
env->error_code = error;
if (retaddr) {
cpu_restore_state(cs, retaddr);
/* Floating-point exceptions (our only users) point to the next PC. */
env->pc += 4;
}
cpu_loop_exit(cs);
}
Expand Down
9 changes: 8 additions & 1 deletion target-alpha/mem_helper.c
Expand Up @@ -128,7 +128,14 @@ void alpha_cpu_unassigned_access(CPUState *cs, hwaddr addr,

env->trap_arg0 = addr;
env->trap_arg1 = is_write ? 1 : 0;
dynamic_excp(env, 0, EXCP_MCHK, 0);
cs->exception_index = EXCP_MCHK;
env->error_code = 0;

/* ??? We should cpu_restore_state to the faulting insn, but this hook
does not have access to the retaddr value from the orignal helper.
It's all moot until the QEMU PALcode grows an MCHK handler. */

cpu_loop_exit(cs);
}

/* try to fill the TLB and return an exception if error. If retaddr is
Expand Down

0 comments on commit ba9c5de

Please sign in to comment.