Message ID | 20220326132534.543738-2-richard.henderson@linaro.org |
---|---|
State | New |
Headers | show |
Series | Logging cleanup and per-thread logfiles | expand |
On 3/26/22 07:24, Richard Henderson wrote: > Note that this advance *should* be done by the translator, as > that's the pc value that's supposed to be generated by hardware. > However, that's a much larger change across sysemu as well. > > In the meantime, produce the correct PC for any signals raised > by the trap instruction. > > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Gah, sorry for the extra noise with the repeat of the nios2 patch set. I failed to clean out a temp directory properly. r~
diff --git a/linux-user/nios2/cpu_loop.c b/linux-user/nios2/cpu_loop.c index 1e93ef34e6..2768ae61dd 100644 --- a/linux-user/nios2/cpu_loop.c +++ b/linux-user/nios2/cpu_loop.c @@ -40,6 +40,12 @@ 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->regs[R_PC] += 4; + switch (env->error_code) { case 0: qemu_log_mask(CPU_LOG_INT, "\nSyscall\n"); @@ -56,7 +62,6 @@ void cpu_loop(CPUNios2State *env) env->regs[2] = abs(ret); /* Return value is 0..4096 */ env->regs[7] = ret > 0xfffff000u; - env->regs[R_PC] += 4; break; case 1: @@ -99,7 +104,6 @@ void cpu_loop(CPUNios2State *env) o = env->regs[5]; n = env->regs[6]; env->regs[2] = qatomic_cmpxchg(h, o, n) - o; - env->regs[R_PC] += 4; } break; }
Note that this advance *should* be done by the translator, as that's the pc value that's supposed to be generated by hardware. However, that's a much larger change across sysemu as well. In the meantime, produce the correct PC for any signals raised by the trap instruction. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- linux-user/nios2/cpu_loop.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)