2006-01-03 Zoltan Varga <vargaz@gmail.com>
[mono.git] / mono / mini / tramp-x86.c
index 447c5d853b7584cf4edb3c2f5f8ca6fe28ce3bd4..8dbd010d84287d5b285de45f424be6b0a744c1e9 100644 (file)
@@ -146,8 +146,14 @@ mono_arch_patch_delegate_trampoline (guint8 *code, guint8 *tramp, gssize *regs,
                disp = *(guint8*)(code - 1);
                //printf ("B: [%%r%d+0x%x]\n", reg, disp);
        }
-       else
+       else {
+               int i;
+
+               for (i = -16; i < 0; ++i)
+                       printf ("%d ", code [i]);
+               printf ("\n");
                g_assert_not_reached ();
+       }
 
        *(gpointer*)(((guint32)(regs [reg])) + disp) = addr;
 }
@@ -237,6 +243,11 @@ mono_arch_create_trampoline_code (MonoTrampolineType tramp_type)
        x86_alu_reg_imm (buf, X86_ADD, X86_ESP, 4);             
        /* restore LMF end */
 
+       /* Restore caller saved registers */
+       x86_mov_reg_membase (buf, X86_ECX, X86_ESP, 1 * 4, 4);
+       x86_mov_reg_membase (buf, X86_EDX, X86_ESP, 2 * 4, 4);
+
+       /* Pop saved reg array + method ptr */
        x86_alu_reg_imm (buf, X86_ADD, X86_ESP, 9 * 4);
 
        if (tramp_type == MONO_TRAMPOLINE_CLASS_INIT)