2009-04-19 Zoltan Varga <vargaz@gmail.com>
authorZoltan Varga <vargaz@gmail.com>
Sun, 19 Apr 2009 18:21:34 +0000 (18:21 -0000)
committerZoltan Varga <vargaz@gmail.com>
Sun, 19 Apr 2009 18:21:34 +0000 (18:21 -0000)
* mini-trampolines.c (mono_get_vcall_slot_addr): New helper function.

* mini-trampolines.c tramp-amd64.c tramp-x86.c: Use it.

* mini-<ARCH>.c: Get rid of the identical mono_arch_get_vcall_slot_addr ()
functions.

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

14 files changed:
mono/mini/ChangeLog
mono/mini/mini-amd64.c
mono/mini/mini-arm.c
mono/mini/mini-ia64.c
mono/mini/mini-ppc.c
mono/mini/mini-sparc.c
mono/mini/mini-trampolines.c
mono/mini/mini-x86.c
mono/mini/mini.h
mono/mini/tramp-amd64.c
mono/mini/tramp-mips.c
mono/mini/tramp-s390.c
mono/mini/tramp-s390x.c
mono/mini/tramp-x86.c

index 311a7a05faf01296dc4c1c4394325b6bb18b3706..c1af74c71ddf0d5507dfc67b54f619d1c3aaa399 100644 (file)
@@ -1,5 +1,12 @@
 2009-04-19  Zoltan Varga  <vargaz@gmail.com>
 
+       * mini-trampolines.c (mono_get_vcall_slot_addr): New helper function.
+
+       * mini-trampolines.c tramp-amd64.c tramp-x86.c: Use it.
+       
+       * mini-<ARCH>.c: Get rid of the identical mono_arch_get_vcall_slot_addr ()
+       functions.
+
        * mini-<ARCH>.h mini-trampolines.c mini.c: Get rid of 
        MONO_ARCH_COMMON_VTABLE_TRAMPOLINE, it is supported by all archs.
 
index c60be9781c55e8df2239bf3eae1a863448d05726..becd4af5f29fa0be22ecd5d8c6b113ba489288d6 100644 (file)
@@ -5664,17 +5664,6 @@ mono_arch_get_vcall_slot (guint8 *code, gpointer *regs, int *displacement)
        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);
-}
-
 int
 mono_arch_get_this_arg_reg (MonoMethodSignature *sig, MonoGenericSharingContext *gsctx, guint8 *code)
 {
index 16b6c259cfd5ee0384e2ce1b5bd17668a313c02d..7c23e51e307073dd02ae6d525bbae7f41a0115f6 100644 (file)
@@ -342,17 +342,6 @@ mono_arch_get_vcall_slot (guint8 *code_ptr, gpointer *regs, int *displacement)
        return NULL;
 }
 
-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);
-}
-
 #define MAX_ARCH_DELEGATE_PARAMS 3
 
 static gpointer
index 7b956d6447c2c787950fcb154b81c2de4b9cb156..ef9a6cf2915fb436272e22424f62d7b8fde6be85 100644 (file)
@@ -4568,17 +4568,6 @@ mono_arch_get_vcall_slot (guint8* code, gpointer *regs, int *displacement)
        return NULL;
 }
 
-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*)(gpointer)((char*)vt + displacement);
-}
-
 gpointer*
 mono_arch_get_delegate_method_ptr_addr (guint8* code, gpointer *regs)
 {
index f1149abd8b7e0a2ae1070b27bce3ac1002814f17..ff48ce0aa99e465bca4677c18bf40393abc2f21d 100644 (file)
@@ -373,17 +373,6 @@ mono_arch_get_vcall_slot (guint8 *code_ptr, gpointer *regs, int *displacement)
        return o;
 }
 
-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);
-}
-
 #define MAX_ARCH_DELEGATE_PARAMS 7
 
 gpointer
index e44f8ffdb579bc89458cdd7e86df65b082c06225..8f23987434d9893815e72e6fa8f9e21b18d7cf4c 100644 (file)
@@ -2317,17 +2317,6 @@ mono_arch_get_vcall_slot (guint8 *code8, gpointer *regs, int *displacement)
        return NULL;
 }
 
-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);
-}
-
 #define CMP_SIZE 3
 #define BR_SMALL_SIZE 2
 #define BR_LARGE_SIZE 2
index 5422a1c015a19059fce9dc4508cd60d92b437e32..72dcf1a01205c0a8ddfc622f011f2c25eb961c19 100644 (file)
@@ -88,6 +88,17 @@ mono_create_static_rgctx_trampoline (MonoMethod *m, gpointer addr)
 }
 #endif
 
+gpointer*
+mono_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);
+}
+
 #ifdef MONO_ARCH_HAVE_IMT
 
 static gpointer*
@@ -206,7 +217,7 @@ mono_magic_trampoline (gssize *regs, guint8 *code, MonoMethod *m, guint8* tramp)
                        /* Avoid loading metadata or creating a generic vtable if possible */
                        addr = mono_aot_get_method_from_vt_slot (mono_domain_get (), vt, displacement);
                        if (addr && !vt->klass->valuetype) {
-                               vtable_slot = mono_arch_get_vcall_slot_addr (code, (gpointer*)regs);
+                               vtable_slot = mono_get_vcall_slot_addr (code, (gpointer*)regs);
                                if (mono_aot_is_got_entry (code, (guint8*)vtable_slot) || mono_domain_owns_vtable_slot (mono_domain_get (), vtable_slot)) {
                                        *vtable_slot = mono_get_addr_from_ftnptr (addr);
                                }
@@ -234,7 +245,7 @@ mono_magic_trampoline (gssize *regs, guint8 *code, MonoMethod *m, guint8* tramp)
                 * needs the signature to be able to find the this argument
                 */
                m = mono_arch_find_imt_method ((gpointer*)regs, code);
-               vtable_slot = mono_arch_get_vcall_slot_addr (code, (gpointer*)regs);
+               vtable_slot = mono_get_vcall_slot_addr (code, (gpointer*)regs);
                g_assert (vtable_slot);
 
                gsctx = mono_get_generic_context_from_code (code);
@@ -329,7 +340,7 @@ mono_magic_trampoline (gssize *regs, guint8 *code, MonoMethod *m, guint8* tramp)
                                mono_get_generic_context_from_code (code));
 
                        vt = this_argument->vtable;
-                       vtable_slot = mono_arch_get_vcall_slot_addr (code, (gpointer*)regs);
+                       vtable_slot = mono_get_vcall_slot_addr (code, (gpointer*)regs);
 
                        g_assert (this_argument->vtable->klass->inited);
                        //mono_class_init (this_argument->vtable->klass);
@@ -414,7 +425,7 @@ mono_magic_trampoline (gssize *regs, guint8 *code, MonoMethod *m, guint8* tramp)
                int displacement;
                MonoVTable *vt = mono_arch_get_vcall_slot (code, (gpointer*)regs, &displacement);
 
-               vtable_slot = mono_arch_get_vcall_slot_addr (code, (gpointer*)regs);
+               vtable_slot = mono_get_vcall_slot_addr (code, (gpointer*)regs);
                g_assert (vtable_slot);
 
                if (vt->klass->valuetype)
@@ -455,7 +466,7 @@ mono_magic_trampoline (gssize *regs, guint8 *code, MonoMethod *m, guint8* tramp)
                return addr;
        }
 
-       vtable_slot = mono_arch_get_vcall_slot_addr (code, (gpointer*)regs);
+       vtable_slot = mono_get_vcall_slot_addr (code, (gpointer*)regs);
 
        if (vtable_slot) {
                if (m->klass->valuetype)
@@ -567,7 +578,7 @@ mono_aot_trampoline (gssize *regs, guint8 *code, guint8 *token_info,
                return mono_magic_trampoline (regs, code, method, tramp);
        }
 
-       vtable_slot = mono_arch_get_vcall_slot_addr (code, (gpointer*)regs);
+       vtable_slot = mono_get_vcall_slot_addr (code, (gpointer*)regs);
        g_assert (!vtable_slot);
 
        /* This is a normal call through a PLT entry */
index 8d73588e50820e72278505d5972da544fc034077..17182ee3d9e721656d4336b64152b49df2080b64 100644 (file)
@@ -5320,17 +5320,6 @@ mono_arch_get_vcall_slot (guint8 *code, gpointer *regs, int *displacement)
        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 (MonoGenericSharingContext *gsctx, MonoMethodSignature *sig,
                gssize *regs, guint8 *code)
index bbc20b54bbadef02280fee02b4c4d0878046540c..b1d6c9667e1c48c7f414d0f36b9a693d6fd0fc76 100644 (file)
@@ -1415,6 +1415,7 @@ void              mono_monitor_enter_trampoline (gssize *regs, guint8 *code, Mon
 void              mono_monitor_exit_trampoline (gssize *regs, guint8 *code, MonoObject *obj, guint8 *tramp) MONO_INTERNAL;
 gconstpointer     mono_get_trampoline_func (MonoTrampolineType tramp_type);
 gpointer          mini_get_vtable_trampoline (void) MONO_INTERNAL;
+gpointer*         mono_get_vcall_slot_addr (guint8* code, gpointer *regs) MONO_INTERNAL;
 
 gboolean          mono_running_on_valgrind (void) MONO_INTERNAL;
 void*             mono_global_codeman_reserve (int size) MONO_INTERNAL;
@@ -1542,7 +1543,6 @@ MonoInst* mono_arch_get_thread_intrinsic        (MonoCompile* cfg) MONO_INTERNAL
 gboolean mono_arch_is_int_overflow              (void *sigctx, void *info) MONO_INTERNAL;
 void     mono_arch_invalidate_method            (MonoJitInfo *ji, void *func, gpointer func_arg) MONO_INTERNAL;
 guint32  mono_arch_get_patch_offset             (guint8 *code) MONO_INTERNAL;
-gpointer*mono_arch_get_vcall_slot_addr          (guint8* code, gpointer *regs) MONO_INTERNAL;
 gpointer mono_arch_get_vcall_slot               (guint8 *code, gpointer *regs, int *displacement) MONO_INTERNAL;
 gpointer*mono_arch_get_delegate_method_ptr_addr (guint8* code, gpointer *regs) MONO_INTERNAL;
 void     mono_arch_create_vars                  (MonoCompile *cfg) MONO_INTERNAL;
index d71e433fa623c0366e17b38ebaa83b75caab3ab9..254fae05ec23d15b40b1bf0b56c5ca2b0c2cfe84 100644 (file)
@@ -189,7 +189,7 @@ mono_arch_nullify_class_init_trampoline (guint8 *code, gssize *regs)
                gpointer *vtable_slot;
 
                /* call *<OFFSET>(%rip) */
-               vtable_slot = mono_arch_get_vcall_slot_addr (code + 3, (gpointer*)regs);
+               vtable_slot = mono_get_vcall_slot_addr (code + 3, (gpointer*)regs);
                g_assert (vtable_slot);
 
                *vtable_slot = nullified_class_init_trampoline;
index 60cbbbbe70afebc60f8c7ae1f86f7bb62ae73177..b2947d385e2d090aaa50845699047a5c24b46c7f 100644 (file)
@@ -176,17 +176,6 @@ mono_arch_get_vcall_slot (guint8 *code_ptr, gpointer *regs, int *displacement)
        return o;
 }
 
-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);
-}
-
 void
 mono_arch_nullify_plt_entry (guint8 *code)
 {
index c71dd61108f60d11840214675861cc888bbecfe2..1fc75f48ba61bec93e5c3d2a6afc702d7849e97e 100644 (file)
@@ -253,19 +253,6 @@ mono_arch_get_vcall_slot (guint8 *code, gpointer *regs, int *displacement)
 
 /*========================= End of Function ========================*/
 
-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);
-}
-
-/*========================= End of Function ========================*/
-
 /*------------------------------------------------------------------*/
 /*                                                                  */
 /* Name                - mono_arch_create_trampoline_code                      */
index 69c569fef6e57cb78e0960b3847f1b1aadedc515..3abe460f15c3b35156c26329478b7959778d9c75 100644 (file)
@@ -277,19 +277,6 @@ mono_arch_get_vcall_slot (guint8 *code, gpointer *regs, int *displacement)
 
 /*========================= End of Function ========================*/
 
-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);
-}
-
-/*========================= End of Function ========================*/
-
 /*------------------------------------------------------------------*/
 /*                                                                  */
 /* Name                - mono_arch_create_trampoline_code                            */
index 9f41cf05b6415dca1bb51688515313e7638dd7e7..d32f3d7f9cc1645a0cdab20862fec5f44623be00 100644 (file)
@@ -174,7 +174,7 @@ mono_arch_nullify_class_init_trampoline (guint8 *code, gssize *regs)
                /* call *<OFFSET>(<REG>) -> Call made from AOT code */
                gpointer *vtable_slot;
 
-               vtable_slot = mono_arch_get_vcall_slot_addr (code + 5, (gpointer*)regs);
+               vtable_slot = mono_get_vcall_slot_addr (code + 5, (gpointer*)regs);
                g_assert (vtable_slot);
 
                *vtable_slot = nullified_class_init_trampoline;