2008-09-21 Mark Probst <mark.probst@gmail.com>
authorMark Probst <mark.probst@gmail.com>
Sun, 21 Sep 2008 14:58:32 +0000 (14:58 -0000)
committerMark Probst <mark.probst@gmail.com>
Sun, 21 Sep 2008 14:58:32 +0000 (14:58 -0000)
* exceptions-ppc.c (mono_arch_get_call_filter): Fixed stack frame
linking.

svn path=/trunk/mono/; revision=113657

mono/mini/ChangeLog
mono/mini/exceptions-ppc.c

index b21aba7787729bcc3be5bb7fe93ecd07f0bcd13a..05bafe3c0224edfbf5c673a03f12e8012be774bc 100644 (file)
@@ -1,3 +1,8 @@
+2008-09-21  Mark Probst  <mark.probst@gmail.com>
+
+       * exceptions-ppc.c (mono_arch_get_call_filter): Fixed stack frame
+       linking.
+
 2008-09-19  Rodrigo Kumpera  <rkumpera@novell.com>
 
        * method-to-ir.c: Extract stloc micro-optimization to a
index c79ffa27c6118a5ba7b490236aeb3a0717e7ef88..b6b8c89f86c64b486be00a3d99f6f96d89c3c9d5 100644 (file)
@@ -237,8 +237,11 @@ mono_arch_get_call_filter (void)
        alloc_size += PPC_STACK_ALIGNMENT - 1;
        alloc_size &= ~(PPC_STACK_ALIGNMENT - 1);
 
+       /* allocate stack frame and set link from sp in ctx */
        g_assert ((alloc_size & (PPC_STACK_ALIGNMENT-1)) == 0);
-       ppc_stwu (code, ppc_sp, -alloc_size, ppc_sp);
+       ppc_lwz (code, ppc_r0, G_STRUCT_OFFSET (MonoContext, sc_sp), ppc_r3);
+       ppc_lwzx (code, ppc_r0, ppc_r0, ppc_r0);
+       ppc_stwu (code, ppc_r0, -alloc_size, ppc_sp);
 
        /* restore all the regs from ctx (in r3), but not r1, the stack pointer */
        restore_regs_from_context (ppc_r3, ppc_r6, ppc_r7);