From c0d53191a1d07e12b8edbe30150acc14e51acfa1 Mon Sep 17 00:00:00 2001 From: Eric Gustafson Date: Fri, 7 Dec 2018 17:24:23 -0800 Subject: [PATCH] Per the docs, PC used in ADR should have a +4 added --- priv/guest_arm_toIR.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/priv/guest_arm_toIR.c b/priv/guest_arm_toIR.c index 098896fed..cb85b7178 100644 --- a/priv/guest_arm_toIR.c +++ b/priv/guest_arm_toIR.c @@ -20387,8 +20387,13 @@ DisResult disInstr_THUMB_WRK ( /* rD = align4(PC) + imm8 * 4 */ UInt rD = INSN0(10,8); UInt imm8 = INSN0(7,0); + /* EDG says: Per the ARM Docs, PC-rel instructions need a +4 here! */ putIRegT(rD, binop(Iop_Add32, - binop(Iop_And32, getIRegT(15), mkU32(~3U)), + binop(Iop_And32, + binop(Iop_Add32, + getIRegT(15), + mkU32(4U)), + mkU32(~3U)), mkU32(imm8 * 4)), condT); DIP("add r%u, pc, #%u\n", rD, imm8 * 4);