On 14/04/16 10:29, Artyom Tarasenko wrote: > Accoding the chapter 7.6 Trap Processing of the SPARC Architecture Manual v9, > the Trap Based Address Register is not modified as a trap is taken. > > This fix allows booting FreeBSD-10.3-RELEASE-sparc64. > > Signed-off-by: Artyom Tarasenko <atar4q...@gmail.com> > --- > target-sparc/int64_helper.c | 5 ++--- > 1 file changed, 2 insertions(+), 3 deletions(-) > > diff --git a/target-sparc/int64_helper.c b/target-sparc/int64_helper.c > index aa876cd..29360fa 100644 > --- a/target-sparc/int64_helper.c > +++ b/target-sparc/int64_helper.c > @@ -158,9 +158,8 @@ void sparc_cpu_do_interrupt(CPUState *cs) > } else if ((intno & 0x1c0) == TT_FILL) { > cpu_set_cwp(env, cpu_cwp_inc(env, env->cwp + 1)); > } > - env->tbr &= ~0x7fffULL; > - env->tbr |= ((env->tl > 1) ? 1 << 14 : 0) | (intno << 5); > - env->pc = env->tbr; > + env->pc = env->tbr & ~0x7fffULL; > + env->pc |= ((env->tl > 1) ? 1 << 14 : 0) | (intno << 5); > env->npc = env->pc + 4; > cs->exception_index = -1; > } >
Gosh yes, this is entirely obvious when you consider that taking a trap shouldn't actually alter the register containing the address of the trap table in memory :( Again the patch applies with fuzz and checkpatch.pl complains about line-endings but if you can rebase/resend then you can add my Reviewed-by. Given that such a trivial fix unlocks FreeBSD then I'm okay with this in 2.6 too. ATB, Mark.