From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58021) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZwjeQ-0000bZ-Hc for qemu-devel@nongnu.org; Wed, 11 Nov 2015 23:38:40 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZwjeJ-0001Fq-Kn for qemu-devel@nongnu.org; Wed, 11 Nov 2015 23:38:22 -0500 From: David Gibson Date: Thu, 12 Nov 2015 15:38:31 +1100 Message-Id: <1447303123-4446-4-git-send-email-david@gibson.dropbear.id.au> In-Reply-To: <1447303123-4446-1-git-send-email-david@gibson.dropbear.id.au> References: <1447303123-4446-1-git-send-email-david@gibson.dropbear.id.au> Subject: [Qemu-devel] [PULL 02/14] PPC: Fix lswx bounds checks List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: peter.maydell@linaro.org Cc: lvivier@redhat.com, thuth@redhat.com, qemu-devel@nongnu.org, aik@ozlabs.ru, Mark Cave-Ayland , agraf@suse.de, mdroth@linux.vnet.ibm.com, qemu-ppc@nongnu.org, David Gibson From: Alexander Graf The lswx instruction checks whether the desired string actually fits into all defined registers. Unfortunately it does the calculation wrong, resulting in illegal instruction traps for loads that really should fit. Fix it up, making Mac OS happier. Signed-off-by: Alexander Graf Signed-off-by: Mark Cave-Ayland Reviewed-by: David Gibson Signed-off-by: David Gibson --- target-ppc/mem_helper.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/target-ppc/mem_helper.c b/target-ppc/mem_helper.c index 6d37dae..7e1f234 100644 --- a/target-ppc/mem_helper.c +++ b/target-ppc/mem_helper.c @@ -100,8 +100,9 @@ void helper_lswx(CPUPPCState *env, target_ulong addr, uint32_t reg, uint32_t ra, uint32_t rb) { if (likely(xer_bc != 0)) { - if (unlikely((ra != 0 && reg < ra && (reg + xer_bc) > ra) || - (reg < rb && (reg + xer_bc) > rb))) { + int num_used_regs = (xer_bc + 3) / 4; + if (unlikely((ra != 0 && reg < ra && (reg + num_used_regs) > ra) || + (reg < rb && (reg + num_used_regs) > rb))) { helper_raise_exception_err(env, POWERPC_EXCP_PROGRAM, POWERPC_EXCP_INVAL | POWERPC_EXCP_INVAL_LSWX); -- 2.5.0