|
From: <sv...@va...> - 2011-02-09 14:21:53
|
Author: sewardj
Date: 2011-02-09 14:21:45 +0000 (Wed, 09 Feb 2011)
New Revision: 2087
Log:
Handle moves from TPIDRURO to integer registers in Thumb mode.
Fixes #263877. (Jani Monoses, ja...@ub...)
Modified:
trunk/priv/guest_arm_toIR.c
Modified: trunk/priv/guest_arm_toIR.c
===================================================================
--- trunk/priv/guest_arm_toIR.c 2011-02-02 13:35:01 UTC (rev 2086)
+++ trunk/priv/guest_arm_toIR.c 2011-02-09 14:21:45 UTC (rev 2087)
@@ -17746,6 +17746,24 @@
}
}
+ /* -------------- read CP15 TPIDRURO register ------------- */
+ /* mrc p15, 0, r0, c13, c0, 3 up to
+ mrc p15, 0, r14, c13, c0, 3
+ */
+ /* I don't know whether this is really v7-only. But anyway, we
+ have to support it since arm-linux uses TPIDRURO as a thread
+ state register. */
+
+ if ((INSN0(15,0) == 0xEE1D) && (INSN1(11,0) == 0x0F70)) {
+ UInt rD = INSN1(15,12);
+ if (!isBadRegT(rD)) {
+ putIRegT(rD, IRExpr_Get(OFFB_TPIDRURO, Ity_I32), IRTemp_INVALID);
+ DIP("mrc p15,0, r%u, c13, c0, 3\n", rD);
+ goto decode_success;
+ }
+ /* fall through */
+ }
+
/* ------------------- NOP ------------------ */
if (INSN0(15,0) == 0xF3AF && INSN1(15,0) == 0x8000) {
DIP("nop\n");
|