mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00
target/nios2: Advance pc when raising exceptions
The exception return address for nios2 is the instruction after the one that was executing at the time of the exception. We have so far implemented this by advancing the pc during the process of raising the exception. It is perhaps a little less confusing to do this advance in the translator (and helpers) when raising the exception in the first place, so that we may more closely match kernel sources. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Message-Id: <20220421151735.31996-58-richard.henderson@linaro.org>
This commit is contained in:
parent
a25c4eff32
commit
e84f176844
5 changed files with 30 additions and 17 deletions
|
@ -39,6 +39,8 @@ void cpu_loop(CPUNios2State *env)
|
|||
break;
|
||||
|
||||
case EXCP_DIV:
|
||||
/* Match kernel's handle_diverror_c(). */
|
||||
env->pc -= 4;
|
||||
force_sig_fault(TARGET_SIGFPE, TARGET_FPE_INTDIV, env->pc);
|
||||
break;
|
||||
|
||||
|
@ -49,12 +51,6 @@ void cpu_loop(CPUNios2State *env)
|
|||
break;
|
||||
|
||||
case EXCP_TRAP:
|
||||
/*
|
||||
* TODO: This advance should be done in the translator, as
|
||||
* hardware produces an advanced pc as part of all exceptions.
|
||||
*/
|
||||
env->pc += 4;
|
||||
|
||||
switch (env->error_code) {
|
||||
case 0:
|
||||
qemu_log_mask(CPU_LOG_INT, "\nSyscall\n");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue