+2009-05-10 Zoltan Varga <vargaz@gmail.com>
+
+ * aot-compiler.c aot-runtime.c: Emit the got addr using a separate symbol,
+ as done previously, instead of in MonoAotFileInfo, since pointers might have
+ alignment requirements.
+
+ * mini.h: Bump AOT file format version.
+
2009-05-10 Miguel de Icaza <miguel@novell.com>
* aot-runtime.c (mono_aot_is_shared_got_patch): Move this routine
emit_label (acfg, symbol);
if (acfg->got_offset > 0)
emit_zero_bytes (acfg, (int)(acfg->got_offset * sizeof (gpointer)));
+
+ sprintf (symbol, "mono_aot_got_addr");
+ emit_section_change (acfg, ".data", 0);
+ emit_global (acfg, symbol, FALSE);
+ emit_alignment (acfg, 8);
+ emit_label (acfg, symbol);
+ emit_pointer (acfg, "got");
}
static void
emit_int32 (acfg, acfg->num_static_rgctx_trampolines);
emit_int32 (acfg, acfg->static_rgctx_trampoline_size);
emit_int32 (acfg, acfg->static_rgctx_trampoline_got_offset_base);
- emit_pointer (acfg, "got");
}
static void
guint32 num_static_rgctx_trampolines;
guint32 static_rgctx_trampoline_size;
guint32 static_rgctx_trampoline_got_offset_base;
- gpointer *got;
} MonoAotFileInfo;
static GHashTable *aot_modules;
gboolean full_aot = FALSE;
MonoAotFileInfo *file_info = NULL;
int i;
+ gpointer *got_addr;
if (mono_compile_aot)
return;
find_symbol (sofile, globals, "mono_aot_version", (gpointer *) &aot_version);
find_symbol (sofile, globals, "mono_aot_opt_flags", (gpointer *)&opt_flags);
find_symbol (sofile, globals, "mono_runtime_version", (gpointer *)&runtime_version);
+ find_symbol (sofile, globals, "mono_aot_got_addr", (gpointer *)&got_addr);
if (!aot_version || strcmp (aot_version, MONO_AOT_FILE_VERSION)) {
mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_AOT, "AOT module %s has wrong file format version (expected %s got %s)\n", aot_name, MONO_AOT_FILE_VERSION, aot_version);
amodule->num_static_rgctx_trampolines = file_info->num_static_rgctx_trampolines;
amodule->static_rgctx_trampoline_got_offset_base = file_info->static_rgctx_trampoline_got_offset_base;
amodule->static_rgctx_trampoline_size = file_info->static_rgctx_trampoline_size;
- amodule->got = file_info->got;
+ amodule->got = *got_addr;
amodule->got [0] = assembly->image;
amodule->globals = globals;
amodule->sofile = sofile;
#define MONO_FAKE_VTABLE_METHOD ((MonoMethod*)GINT_TO_POINTER(-2))
/* Version number of the AOT file format */
-#define MONO_AOT_FILE_VERSION "52"
+#define MONO_AOT_FILE_VERSION "53"
/* Constants used to encode different types of methods in AOT */
enum {