Author: zoltan
Date: 2008-01-25 21:49:26 -0500 (Fri, 25 Jan 2008)
New Revision: 93972
Modified:
trunk/mono/mono/mini/ChangeLog
trunk/mono/mono/mini/mini-arm.c
Log:
2008-01-26 Zoltan Varga <[EMAIL PROTECTED]>
* mini-arm.c (arm_patch): Add support for patching the blx calling
sequence.
Modified: trunk/mono/mono/mini/ChangeLog
===================================================================
--- trunk/mono/mono/mini/ChangeLog 2008-01-26 02:00:52 UTC (rev 93971)
+++ trunk/mono/mono/mini/ChangeLog 2008-01-26 02:49:26 UTC (rev 93972)
@@ -1,3 +1,7 @@
+2008-01-26 Zoltan Varga <[EMAIL PROTECTED]>
+
+ * mini-arm.c (arm_patch): Add support for patching the blx calling
sequence.
+
2008-01-25 Zoltan Varga <[EMAIL PROTECTED]>
* cpu-*.md: Get rid of unused opcodes.
Modified: trunk/mono/mono/mini/mini-arm.c
===================================================================
--- trunk/mono/mono/mini/mini-arm.c 2008-01-26 02:00:52 UTC (rev 93971)
+++ trunk/mono/mono/mini/mini-arm.c 2008-01-26 02:49:26 UTC (rev 93972)
@@ -1908,6 +1908,24 @@
return;
}
g_assert_not_reached ();
+ } else if ((ins & 0x0ffffff0) == 0x12fff30) {
+ /*
+ * ldr ip, [pc, #0]
+ * b 0xc
+ * .word code_ptr
+ * blx ip
+ */
+ guint32 ccode [4];
+ guint8 *emit = (guint8*)ccode;
+ ARM_LDR_IMM (emit, ARMREG_IP, ARMREG_PC, 0);
+ ARM_B (emit, 0);
+ ARM_BLX_REG (emit, ARMREG_IP);
+
+ g_assert (code32 [-3] == ccode [0]);
+ g_assert (code32 [-2] == ccode [1]);
+ g_assert (code32 [0] == ccode [2]);
+
+ code32 [-1] = (guint32)target;
} else {
guint32 ccode [4];
guint32 *tmp = ccode;
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches