|
From: <sv...@va...> - 2011-09-23 15:09:14
|
Author: sewardj
Date: 2011-09-23 16:04:29 +0100 (Fri, 23 Sep 2011)
New Revision: 2206
Log:
Add a couple of spec rules for MI and PL after LOGIC. These are
important for avoiding false positives in Android syscall handlers.
Modified:
trunk/priv/guest_arm_helpers.c
Modified: trunk/priv/guest_arm_helpers.c
===================================================================
--- trunk/priv/guest_arm_helpers.c 2011-09-23 10:12:19 UTC (rev 2205)
+++ trunk/priv/guest_arm_helpers.c 2011-09-23 15:04:29 UTC (rev 2206)
@@ -676,6 +676,21 @@
binop(Iop_CmpNE32, cc_dep1, mkU32(0)));
}
+ if (isU32(cond_n_op, (ARMCondPL << 4) | ARMG_CC_OP_LOGIC)) {
+ /* PL after LOGIC --> test (res >> 31) == 0 */
+ return unop(Iop_1Uto32,
+ binop(Iop_CmpEQ32,
+ binop(Iop_Shr32, cc_dep1, mkU8(31)),
+ mkU32(0)));
+ }
+ if (isU32(cond_n_op, (ARMCondMI << 4) | ARMG_CC_OP_LOGIC)) {
+ /* MI after LOGIC --> test (res >> 31) == 1 */
+ return unop(Iop_1Uto32,
+ binop(Iop_CmpEQ32,
+ binop(Iop_Shr32, cc_dep1, mkU8(31)),
+ mkU32(1)));
+ }
+
/*----------------- AL -----------------*/
/* A critically important case for Thumb code.
|