2004-11-05 Zoltan Varga <vargaz@freemail.hu>
authorZoltan Varga <vargaz@gmail.com>
Fri, 5 Nov 2004 13:59:43 +0000 (13:59 -0000)
committerZoltan Varga <vargaz@gmail.com>
Fri, 5 Nov 2004 13:59:43 +0000 (13:59 -0000)
* mini.h mini.c tramp-*.c: Moved xp parts of JIT trampoline creation
into a new function mono_create_jit_trampoline ().

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

mono/mini/ChangeLog
mono/mini/mini.c
mono/mini/mini.h
mono/mini/tramp-amd64.c
mono/mini/tramp-ppc.c
mono/mini/tramp-s390.c
mono/mini/tramp-s390x.c
mono/mini/tramp-sparc.c

index 99d25961bb229f149e9a90dad9bd79f012be7e37..018b860ca87dad617330d8fbe57ebc4dea913281 100644 (file)
@@ -1,3 +1,8 @@
+2004-11-05  Zoltan Varga  <vargaz@freemail.hu>
+
+       * mini.h mini.c tramp-*.c: Moved xp parts of JIT trampoline creation
+       into a new function mono_create_jit_trampoline ().
+
 2004-11-02  Zoltan Varga  <vargaz@freemail.hu>
 
        * trace.c (get_spec): Allow tracing of classes without a namespace.
index 90d0e948e4294bc4189865dd3910ad40a02c6983..2bc903e4c512e9c33a77b4082bc372a8c0df53c0 100644 (file)
@@ -6201,6 +6201,27 @@ mono_create_jump_trampoline (MonoDomain *domain, MonoMethod *method,
        return ji->code_start;
 }
 
+gpointer
+mono_create_jit_trampoline (MonoMethod *method)
+{
+       MonoJitInfo *ji;
+       MonoDomain *domain = mono_domain_get ();
+       gpointer tramp;
+
+       /* Trampoline are domain specific, so cache only the one used in the root domain */
+       if ((domain == mono_get_root_domain ()) && method->info)
+               return method->info;
+
+       if (method->iflags & METHOD_IMPL_ATTRIBUTE_SYNCHRONIZED)
+               return mono_create_jit_trampoline (mono_marshal_get_synchronized_wrapper (method));
+
+       tramp = mono_arch_create_jit_trampoline (method);
+       if (domain == mono_get_root_domain ())
+               method->info = tramp;
+
+       return tramp;
+}      
+
 MonoVTable*
 mono_find_class_init_trampoline_by_addr (gconstpointer addr)
 {
@@ -6611,7 +6632,7 @@ mono_resolve_patch_target (MonoMethod *method, MonoDomain *domain, guint8 *code,
                        target = code;
                } else
                        /* get the trampoline to the method from the domain */
-                       target = mono_arch_create_jit_trampoline (patch_info->data.method);
+                       target = mono_create_jit_trampoline (patch_info->data.method);
                break;
        case MONO_PATCH_INFO_SWITCH: {
                gpointer *jump_table;
@@ -8377,7 +8398,7 @@ mini_init (const char *filename)
 #ifdef JIT_TRAMPOLINES_WORK
        mono_install_compile_method (mono_jit_compile_method);
        mono_install_free_method (mono_jit_free_method);
-       mono_install_trampoline (mono_arch_create_jit_trampoline);
+       mono_install_trampoline (mono_create_jit_trampoline);
        mono_install_remoting_trampoline (mono_jit_create_remoting_trampoline);
 #endif
 #define JIT_INVOKE_WORKS
index e2db6c1de6b6db0aa3b46ca9cf1271dfd9701042..e36a0e4f721c1df9b3a3f7bd3e347e74504fae5c 100644 (file)
@@ -742,6 +742,7 @@ gpointer          mono_create_jump_trampoline (MonoDomain *domain,
                                                                                           MonoMethod *method, 
                                                                                           gboolean add_sync_wrapper);
 gpointer          mono_create_class_init_trampoline (MonoVTable *vtable);
+gpointer          mono_create_jit_trampoline (MonoMethod *method);
 MonoVTable*       mono_find_class_init_trampoline_by_addr (gconstpointer addr);
 gboolean          mono_running_on_valgrind (void);
 
index 6c17d3ed5a9763acca32e6d1598596ca12b5dad8..7cfb6887708e89a0ca88ec875f1abfd03026afd3 100644 (file)
@@ -413,21 +413,13 @@ gpointer
 mono_arch_create_jit_trampoline (MonoMethod *method)
 {
        MonoJitInfo *ji;
-       MonoDomain *domain = mono_domain_get ();
-
-       /* Trampoline are domain specific, so cache only the one used in the root domain */
-       if ((domain == mono_get_root_domain ()) && method->info)
-               return method->info;
-
-       if (method->iflags & METHOD_IMPL_ATTRIBUTE_SYNCHRONIZED)
-               return mono_arch_create_jit_trampoline (mono_marshal_get_synchronized_wrapper (method));
+       gpointer code_start;
 
        ji = create_specific_trampoline (method, MONO_TRAMPOLINE_GENERIC, domain);
-       if (domain == mono_get_root_domain ())
-               method->info = ji->code_start;
+       code_start = ji->code_start;
        g_free (ji);
 
-       return ji->code_start;
+       return code_start;
 }
 
 /**
index b304600e59d9b217fd1c1c9dfd4cbedf37a92b11..24fc71b6e9a2594bb190c45ba8dac2c27eba1995 100644 (file)
@@ -489,20 +489,15 @@ mono_arch_create_jit_trampoline (MonoMethod *method)
        guint8 *tramp;
        MonoJitInfo *ji;
        MonoDomain* domain = mono_domain_get ();
-
-       /* previously created trampoline code */
-       if (method->info)
-               return method->info;
-
-       if (method->iflags & METHOD_IMPL_ATTRIBUTE_SYNCHRONIZED)
-               return mono_arch_create_jit_trampoline (mono_marshal_get_synchronized_wrapper (method));
+       gpointer code_start;
 
        tramp = create_trampoline_code (MONO_TRAMPOLINE_GENERIC);
-       /* FIXME: should pass the domain down tohis function */
+       /* FIXME: should pass the domain down to this function */
        ji = create_specific_tramp (method, tramp, domain);
-       /* Store trampoline address */
-       method->info = ji->code_start;
-       return ji->code_start;
+       code_start = ji->code_start;
+       g_free (ji);
+
+       return code_start;
 }
 
 /**
index f814d0f4141c9c3cca47e3957ddf41f73e74d0c6..fe465ef6a9e097d064473d630aa9aa94a5b3ed9d 100644 (file)
@@ -482,13 +482,6 @@ mono_arch_create_jit_trampoline (MonoMethod *method)
        static guint8 *vc = NULL;
        gint32 displace;
 
-       /* previously created trampoline code */
-       if (method->info)
-               return method->info;
-
-       if (method->iflags & METHOD_IMPL_ATTRIBUTE_SYNCHRONIZED)
-               return mono_arch_create_jit_trampoline (mono_marshal_get_synchronized_wrapper (method));
-
        vc = create_trampoline_code (MONO_TRAMPOLINE_GENERIC);
 
        /* This is the method-specific part of the trampoline. Its purpose is
@@ -511,9 +504,6 @@ mono_arch_create_jit_trampoline (MonoMethod *method)
        /* Sanity check */
        g_assert ((buf - code) <= METHOD_TRAMPOLINE_SIZE);
        
-       /* Store trampoline address */
-       method->info = code;
-
        mono_jit_stats.method_trampolines++;
 
        return code;
index df1b26fb0d211e5a4d4f8e58f996534185eff16d..3b91fbe808772f166858f31d717773d5b630dd0e 100644 (file)
@@ -471,13 +471,6 @@ mono_arch_create_jit_trampoline (MonoMethod *method)
        static guint8 *vc = NULL;
        gint32 displace;
 
-       /* previously created trampoline code */
-       if (method->info)
-               return method->info;
-
-       if (method->iflags & METHOD_IMPL_ATTRIBUTE_SYNCHRONIZED)
-               return mono_arch_create_jit_trampoline (mono_marshal_get_synchronized_wrapper (method));
-
        vc = create_trampoline_code (MONO_TRAMPOLINE_GENERIC);
 
        /* This is the method-specific part of the trampoline. Its purpose is
@@ -500,9 +493,6 @@ mono_arch_create_jit_trampoline (MonoMethod *method)
        /* Sanity check */
        g_assert ((buf - code) <= METHOD_TRAMPOLINE_SIZE);
        
-       /* Store trampoline address */
-       method->info = code;
-
        mono_jit_stats.method_trampolines++;
 
        return code;
index 149178029a5c24552690304143d6e5068a2861f7..c8745825c7f1934feb7e5872d4978efd44020b01 100644 (file)
@@ -336,19 +336,13 @@ gpointer
 mono_arch_create_jit_trampoline (MonoMethod *method)
 {
        MonoJitInfo *ji;
+       gpointer code_start;
 
-       /* previously created trampoline code */
-       if (method->info)
-               return method->info;
-
-       if (method->iflags & METHOD_IMPL_ATTRIBUTE_SYNCHRONIZED)
-               return mono_arch_create_jit_trampoline (mono_marshal_get_synchronized_wrapper (method));
-
-       ji = create_specific_trampoline (method, MONO_TRAMPOLINE_GENERIC, mono_domain_get ());
-       method->info = ji->code_start;
+       ji = create_specific_trampoline (method, MONO_TRAMPOLINE_GENERIC, domain);
+       code_start = ji->code_start;
        g_free (ji);
 
-       return method->info;
+       return code_start;
 }
 
 /**