+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.
*/
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
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
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 ();
}