2010-01-15 Zoltan Varga <vargaz@gmail.com>
authorZoltan Varga <vargaz@gmail.com>
Fri, 15 Jan 2010 03:07:49 +0000 (03:07 -0000)
committerZoltan Varga <vargaz@gmail.com>
Fri, 15 Jan 2010 03:07:49 +0000 (03:07 -0000)
        * aot-runtime.c (mono_aot_plt_resolve): Reenable the previous assert for
        ftnptrs created by us, handle RGCTX_FETCH correctly.
        (mono_aot_get_lazy_fetch_trampoline): Add an ftnptr.

        * mini-trampolines.c (mono_create_generic_class_init_trampoline): Remove the
        ftnptr added by mono_aot_get_named_code ().

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

mono/mini/ChangeLog
mono/mini/aot-runtime.c
mono/mini/mini-trampolines.c

index 738dc42c366ca94bb0142d3ecde0925d418c9612..9565b7f67d26de549dca6031feb8606c82920639 100644 (file)
@@ -1,3 +1,12 @@
+2010-01-15  Zoltan Varga  <vargaz@gmail.com>
+
+       * aot-runtime.c (mono_aot_plt_resolve): Reenable the previous assert for
+       ftnptrs created by us, handle RGCTX_FETCH correctly.
+       (mono_aot_get_lazy_fetch_trampoline): Add an ftnptr.
+
+       * mini-trampolines.c (mono_create_generic_class_init_trampoline): Remove the
+       ftnptr added by mono_aot_get_named_code ().
+
 2010-01-14  Zoltan Varga  <vargaz@gmail.com>
 
        * mini-arm.c: Fix a few LLVM problems.
index 3d74dd0a839be0adbfcf5f72e056120dd9ff8995..ae7daba7f9caef9963043a642837fedb952980fa 100644 (file)
@@ -3048,6 +3048,11 @@ mono_aot_plt_resolve (gpointer aot_module, guint32 plt_info_offset, guint8 *code
         */
        if (ji.type == MONO_PATCH_INFO_ABS || ji.type == MONO_PATCH_INFO_INTERNAL_METHOD || ji.type == MONO_PATCH_INFO_CLASS_INIT || ji.type == MONO_PATCH_INFO_ICALL_ADDR || ji.type == MONO_PATCH_INFO_JIT_ICALL_ADDR || ji.type == MONO_PATCH_INFO_RGCTX_FETCH) {
                /* These should already have a function descriptor */
+#ifdef PPC_USES_FUNCTION_DESCRIPTOR
+               /* Our function descriptors have a 0 environment, gcc created ones don't */
+               if (ji.type != MONO_PATCH_INFO_INTERNAL_METHOD && ji.type != MONO_PATCH_INFO_JIT_ICALL_ADDR && ji.type != MONO_PATCH_INFO_ICALL_ADDR)
+                       g_assert (((gpointer*)target) [2] == 0);
+#endif
                /* Empty */
        } else if (!no_ftnptr) {
 #ifdef PPC_USES_FUNCTION_DESCRIPTOR
@@ -3510,7 +3515,8 @@ mono_aot_get_lazy_fetch_trampoline (guint32 slot)
        symbol = g_strdup_printf ("rgctx_fetch_trampoline_%u", slot);
        code = load_function (mono_defaults.corlib->aot_module, symbol);
        g_free (symbol);
-       return code;
+       /* The caller expects an ftnptr */
+       return mono_create_ftnptr (mono_domain_get (), code);
 }
 
 gpointer
index a80272416cfc4b0751ba0f80f3f4cbf5d79b95ab..dd581a2dbd19b197018e7b55f35ba017a38a0cfe 100644 (file)
@@ -1095,7 +1095,8 @@ mono_create_generic_class_init_trampoline (void)
 
        if (!code) {
                if (mono_aot_only)
-                       code = mono_aot_get_named_code ("generic_class_init_trampoline");
+                       /* get_named_code () might return an ftnptr, but our caller expects a direct pointer */
+                       code = mono_get_addr_from_ftnptr (mono_aot_get_named_code ("generic_class_init_trampoline"));
                else
                        code = mono_arch_create_generic_class_init_trampoline ();
        }