From b48f52a25d58c433bf74b6cb6498fd6bbb7ac708 Mon Sep 17 00:00:00 2001 From: Julian Seward Date: Tue, 1 Apr 2014 11:00:36 +0000 Subject: [PATCH] Bug 332658 - ldrd.w r1, r2, [PC, #imm] does not adjust for 32bit alignment (dimitry@google.com) git-svn-id: svn://svn.valgrind.org/vex/trunk@2843 --- VEX/priv/guest_arm_toIR.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/VEX/priv/guest_arm_toIR.c b/VEX/priv/guest_arm_toIR.c index 39d8ef8400..e3fc4b9924 100644 --- a/VEX/priv/guest_arm_toIR.c +++ b/VEX/priv/guest_arm_toIR.c @@ -20455,7 +20455,9 @@ DisResult disInstr_THUMB_WRK ( if (valid) { IRTemp preAddr = newTemp(Ity_I32); - assign(preAddr, getIRegT(rN)); + assign(preAddr, 15 == rN + ? binop(Iop_And32, getIRegT(15), mkU32(~3U)) + : getIRegT(rN)); IRTemp postAddr = newTemp(Ity_I32); assign(postAddr, binop(bU == 1 ? Iop_Add32 : Iop_Sub32, -- 2.47.2