From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52609) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aqhYf-00047q-7Z for qemu-devel@nongnu.org; Thu, 14 Apr 2016 09:43:49 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aqhYd-000248-AC for qemu-devel@nongnu.org; Thu, 14 Apr 2016 09:43:45 -0400 Received: from chuckie.co.uk ([82.165.15.123]:49877 helo=s16892447.onlinehome-server.info) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aqhYd-00023w-41 for qemu-devel@nongnu.org; Thu, 14 Apr 2016 09:43:43 -0400 References: <1d5b26fed5e9648e4672545085509ea5ad8a9a60.1460625412.git.atar4qemu@gmail.com> From: Mark Cave-Ayland Message-ID: <570F9E6A.6050100@ilande.co.uk> Date: Thu, 14 Apr 2016 14:43:06 +0100 MIME-Version: 1.0 In-Reply-To: <1d5b26fed5e9648e4672545085509ea5ad8a9a60.1460625412.git.atar4qemu@gmail.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 2/2 for-2.6] target-sparc: fix Trap Based Address Register behavior for sparc64 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Artyom Tarasenko , qemu-devel@nongnu.org Cc: rth@twiddle.net 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 > --- > 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.