Pass signatures instead of methods to mono_arch_get_gsharedvt_call_info ().
authorZoltan Varga <vargaz@gmail.com>
Tue, 5 Feb 2013 19:27:51 +0000 (20:27 +0100)
committerZoltan Varga <vargaz@gmail.com>
Tue, 5 Feb 2013 19:28:42 +0000 (20:28 +0100)
mono/mini/method-to-ir.c
mono/mini/mini-generic-sharing.c
mono/mini/mini-trampolines.c
mono/mini/mini.h

index 32f0304943699b76f00fd61d1726fd8743628438..76d42f761826da5bc608c4ef2e16551da93afccb 100644 (file)
@@ -7321,7 +7321,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
 
                                        if (sharing_enabled && context_sharable)
                                                pass_mrgctx = TRUE;
-                                       if (cfg->gsharedvt && mini_is_gsharedvt_signature (cfg, mono_method_signature (cmethod)))
+                                       if (cfg->gsharedvt && mini_is_gsharedvt_signature (cfg, fsig))
                                                pass_mrgctx = TRUE;
                                }
                        }
index cee2a5c189deb44f6e3c01b41a3229a0a27071a9..64d36bb211d59c4f1bbc615fc9199c283a9554a1 100644 (file)
@@ -1033,6 +1033,7 @@ instantiate_info (MonoDomain *domain, MonoRuntimeGenericContextInfoTemplate *oti
                        gpointer info;
                        MonoMethod *wrapper;
                        MonoMethod *gm;
+                       MonoMethodSignature *sig, *gsig;
 
                        g_assert (method->is_inflated);
 
@@ -1042,7 +1043,10 @@ instantiate_info (MonoDomain *domain, MonoRuntimeGenericContextInfoTemplate *oti
 
                        gm = caller_method;
 
-                       info = mono_arch_get_gsharedvt_call_info (addr, method, gm, gji->generic_sharing_context, FALSE, vcall_offset);
+                       sig = mono_method_signature (method);
+                       gsig = mono_method_signature (gm); 
+
+                       info = mono_arch_get_gsharedvt_call_info (addr, sig, gsig, gji->generic_sharing_context, FALSE, vcall_offset);
 
                        if (!tramp_addr) {
                                wrapper = mono_marshal_get_gsharedvt_out_wrapper ();
@@ -1068,6 +1072,7 @@ instantiate_info (MonoDomain *domain, MonoRuntimeGenericContextInfoTemplate *oti
                        static gpointer tramp_addr;
                        gpointer info;
                        MonoMethod *wrapper;
+                       MonoMethodSignature *sig, *gsig;
 
                        //
                        // FIXME:
@@ -1078,7 +1083,10 @@ instantiate_info (MonoDomain *domain, MonoRuntimeGenericContextInfoTemplate *oti
                        // FIXME: This is just a workaround
                        if (caller_method == method) {
                        } else {
-                               info = mono_arch_get_gsharedvt_call_info (ji->code_start, method, ji->method, gji->generic_sharing_context, TRUE, -1);
+                               sig = mono_method_signature (method);
+                               gsig = mono_method_signature (ji->method); 
+
+                               info = mono_arch_get_gsharedvt_call_info (ji->code_start, sig, gsig, gji->generic_sharing_context, TRUE, -1);
 
                                if (!tramp_addr) {
                                        wrapper = mono_marshal_get_gsharedvt_in_wrapper ();
index 17c59b4ce2c3dd658bc33ecc64beca53d17eb67f..06525fec08564e1b83811010aa122083be058743 100644 (file)
@@ -346,13 +346,17 @@ mini_add_method_trampoline (MonoMethod *orig_method, MonoMethod *m, gpointer com
                gpointer info;
                MonoMethod *wrapper;
                MonoGenericSharingContext *gsctx;
+               MonoMethodSignature *sig, *gsig;
 
                /* Here m is a generic instance, while ji->method is the gsharedvt method implementing it */
 
                /* Call from normal/gshared code to gsharedvt code with variable signature */
                gsctx = mono_jit_info_get_generic_sharing_context (ji);
 
-               info = mono_arch_get_gsharedvt_call_info (compiled_method, m, ji->method, gsctx, TRUE, -1);
+               sig = mono_method_signature (m);
+               gsig = mono_method_signature (ji->method); 
+
+               info = mono_arch_get_gsharedvt_call_info (compiled_method, sig, gsig, gsctx, TRUE, -1);
 
                if (!tramp_addr) {
                        wrapper = mono_marshal_get_gsharedvt_in_wrapper ();
index ac74993a2b74a726df34d3848c6a482f84f3ef35..22ed9b0da1a032acac4f97d9c41c766b31e7b6e7 100644 (file)
@@ -2149,7 +2149,7 @@ GSList*   mono_arch_get_cie_program             (void) MONO_INTERNAL;
 void      mono_arch_set_target                  (char *mtriple) MONO_INTERNAL;
 gboolean  mono_arch_gsharedvt_sig_supported     (MonoMethodSignature *sig) MONO_INTERNAL;
 gpointer  mono_arch_get_gsharedvt_trampoline    (MonoTrampInfo **info, gboolean aot) MONO_INTERNAL;
-gpointer  mono_arch_get_gsharedvt_call_info     (gpointer addr, MonoMethod *m, MonoMethod *gsharedvt_method, MonoGenericSharingContext *gsctx, gboolean gsharedvt_in, gint32 vcall_offset) MONO_INTERNAL;
+gpointer  mono_arch_get_gsharedvt_call_info     (gpointer addr, MonoMethodSignature *normal_sig, MonoMethodSignature *gsharedvt_sig, MonoGenericSharingContext *gsctx, gboolean gsharedvt_in, gint32 vcall_offset) MONO_INTERNAL;
 
 /* Soft Debug support */
 #ifdef MONO_ARCH_SOFT_DEBUG_SUPPORTED