2009-05-10 Zoltan Varga <vargaz@gmail.com>
authorZoltan Varga <vargaz@gmail.com>
Sun, 10 May 2009 18:30:42 +0000 (18:30 -0000)
committerZoltan Varga <vargaz@gmail.com>
Sun, 10 May 2009 18:30:42 +0000 (18:30 -0000)
* 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.

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

mono/mini/ChangeLog
mono/mini/aot-compiler.c
mono/mini/aot-runtime.c
mono/mini/mini.h

index a909491a2068e17610d4686b5df51cda20950a86..15de7abeb478ef49c7c4cec87e76230070cc24ec 100644 (file)
@@ -1,3 +1,11 @@
+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
index ea49d15a50e8be145648b036e4007f2772f14016..3f4ce4ec2c67ea98854bb2be83992809c72cd86e 100644 (file)
@@ -3917,6 +3917,13 @@ emit_got (MonoAotCompile *acfg)
        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
@@ -4044,7 +4051,6 @@ emit_file_info (MonoAotCompile *acfg)
        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
index 93c9e69744d5900799af5a7de4f74354de8698e7..f59967b756cd9829cf6d2b817e46cd367389ade8 100644 (file)
@@ -137,7 +137,6 @@ typedef struct MonoAotFileInfo
        guint32 num_static_rgctx_trampolines;
        guint32 static_rgctx_trampoline_size;
        guint32 static_rgctx_trampoline_got_offset_base;
-       gpointer *got;
 } MonoAotFileInfo;
 
 static GHashTable *aot_modules;
@@ -860,6 +859,7 @@ load_aot_module (MonoAssembly *assembly, gpointer user_data)
        gboolean full_aot = FALSE;
        MonoAotFileInfo *file_info = NULL;
        int i;
+       gpointer *got_addr;
 
        if (mono_compile_aot)
                return;
@@ -918,6 +918,7 @@ load_aot_module (MonoAssembly *assembly, gpointer user_data)
        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);
@@ -982,7 +983,7 @@ load_aot_module (MonoAssembly *assembly, gpointer user_data)
        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;
index 39ee9aac9ea5fa0b4805fde4dc46a55e166544d5..cca5f10aa0b209d575edc93fd0a7bd4b3e27f1c8 100644 (file)
@@ -89,7 +89,7 @@ typedef gint64 mgreg_t;
 #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 {