Author: lupus
Date: 2007-10-15 04:23:45 -0400 (Mon, 15 Oct 2007)
New Revision: 87482

Modified:
   trunk/mono/mono/mini/ChangeLog
   trunk/mono/mono/mini/mini-x86.c
   trunk/mono/mono/mini/mini-x86.h
Log:


Mon Oct 15 10:39:26 CEST 2007 Paolo Molaro <[EMAIL PROTECTED]>

        * mini-x86.c, mini-x86.h: x86 support for the common vtable
        trampoline.



Modified: trunk/mono/mono/mini/ChangeLog
===================================================================
--- trunk/mono/mono/mini/ChangeLog      2007-10-15 08:21:41 UTC (rev 87481)
+++ trunk/mono/mono/mini/ChangeLog      2007-10-15 08:23:45 UTC (rev 87482)
@@ -1,4 +1,9 @@
 
+Mon Oct 15 10:39:26 CEST 2007 Paolo Molaro <[EMAIL PROTECTED]>
+
+       * mini-x86.c, mini-x86.h: x86 support for the common vtable
+       trampoline.
+
 Mon Oct 15 10:37:15 CEST 2007 Paolo Molaro <[EMAIL PROTECTED]>
 
        * mini-trampolines.c: changed the magic rampoline to understand

Modified: trunk/mono/mono/mini/mini-x86.c
===================================================================
--- trunk/mono/mono/mini/mini-x86.c     2007-10-15 08:21:41 UTC (rev 87481)
+++ trunk/mono/mono/mini/mini-x86.c     2007-10-15 08:23:45 UTC (rev 87482)
@@ -4445,12 +4445,14 @@
        }
 }
 
-gpointer*
-mono_arch_get_vcall_slot_addr (guint8 *code, gpointer *regs)
+gpointer
+mono_arch_get_vcall_slot (guint8 *code, gpointer *regs, int *displacement)
 {
        guint8 reg = 0;
        gint32 disp = 0;
 
+       *displacement = 0;
+
        /* go to the start of the call instruction
         *
         * address_byte = (m << 6) | (o << 3) | reg
@@ -4504,9 +4506,21 @@
                        return NULL;
        }
 
-       return (gpointer*)(((gint32)(regs [reg])) + disp);
+       *displacement = disp;
+       return regs [reg];
 }
 
+gpointer*
+mono_arch_get_vcall_slot_addr (guint8 *code, gpointer *regs)
+{
+       gpointer vt;
+       int displacement;
+       vt = mono_arch_get_vcall_slot (code, regs, &displacement);
+       if (!vt)
+               return NULL;
+       return (gpointer*)((char*)vt + displacement);
+}
+
 gpointer
 mono_arch_get_this_arg_from_call (MonoMethodSignature *sig, gssize *regs, 
guint8 *code)
 {

Modified: trunk/mono/mono/mini/mini-x86.h
===================================================================
--- trunk/mono/mono/mini/mini-x86.h     2007-10-15 08:21:41 UTC (rev 87481)
+++ trunk/mono/mono/mini/mini-x86.h     2007-10-15 08:23:45 UTC (rev 87482)
@@ -265,6 +265,7 @@
 #define MONO_ARCH_HAVE_CREATE_VARS 1
 #define MONO_ARCH_HAVE_IMT 1
 #define MONO_ARCH_IMT_REG X86_EDX
+#define MONO_ARCH_COMMON_VTABLE_TRAMPOLINE 1
 
 #define MONO_ARCH_AOT_SUPPORTED 1
 

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to