2010-02-15 Zoltan Varga <vargaz@gmail.com>
authorZoltan Varga <vargaz@gmail.com>
Mon, 15 Feb 2010 13:38:17 +0000 (13:38 -0000)
committerZoltan Varga <vargaz@gmail.com>
Mon, 15 Feb 2010 13:38:17 +0000 (13:38 -0000)
* mini.c (mini_get_vtable_trampoline): Make this take a 'slot_index' argument,
not used yet.

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

mono/mini/ChangeLog
mono/mini/mini.c
mono/mini/mini.h

index 6649d9b7e642983a814ef9c99e109f22fb393350..bc8397894cc4bfdae3b1b551315f58f2300d79f9 100755 (executable)
@@ -1,3 +1,8 @@
+2010-02-15  Zoltan Varga  <vargaz@gmail.com>
+
+       * mini.c (mini_get_vtable_trampoline): Make this take a 'slot_index' argument,
+       not used yet.
+
 2010-02-13  Zoltan Varga  <vargaz@gmail.com>
 
        * aot-compiler.c (load_profile_files): Update after the profiler changes.
index 27af9a0c23074b692fd1c7ea1765c8d23e0a1a32..46556d98d8ba4423dd52d234f6cd701ed14bce00 100644 (file)
@@ -5148,9 +5148,10 @@ mini_get_imt_trampoline (void)
 #endif
 
 gpointer
-mini_get_vtable_trampoline (void)
+mini_get_vtable_trampoline (int slot_index)
 {
        static gpointer tramp = NULL;
+
        if (!tramp)
                tramp = mono_create_specific_trampoline (MONO_FAKE_VTABLE_METHOD, MONO_TRAMPOLINE_JIT, mono_get_root_domain (), NULL);
        return tramp;
@@ -5370,6 +5371,15 @@ mini_init (const char *filename, const char *runtime_version)
        callbacks.get_addr_from_ftnptr = mini_get_addr_from_ftnptr;
        callbacks.get_runtime_build_info = mono_get_runtime_build_info;
 
+#ifdef MONO_ARCH_HAVE_IMT
+       if (mono_use_imt) {
+               if (!mono_use_llvm) {
+                       /* LLVM needs a per-method vtable trampoline */
+                       callbacks.get_vtable_trampoline = mini_get_vtable_trampoline;
+               }
+       }
+#endif
+
        mono_install_callbacks (&callbacks);
        
        mono_arch_cpu_init ();
@@ -5482,8 +5492,6 @@ mini_init (const char *filename, const char *runtime_version)
                else
                        mono_install_imt_thunk_builder (mono_arch_build_imt_thunk);
                if (!mono_use_llvm) {
-                       /* LLVM needs a per-method vtable trampoline */
-                       mono_install_vtable_trampoline (mini_get_vtable_trampoline ());
                        /* 
                         * The imt code in mono_magic_trampoline () can't handle LLVM code. By disabling
                         * this, we force iface calls to go through the llvm vcall trampoline.
index 8ff511dd4b5dc3494b2ed19adfa8d839c4ae3885..09e65e5114e049ed0b19a3371c10ec965cd2d695 100644 (file)
@@ -1615,7 +1615,7 @@ void              mono_generic_class_init_trampoline (mgreg_t *regs, guint8 *cod
 void              mono_monitor_enter_trampoline (mgreg_t *regs, guint8 *code, MonoObject *obj, guint8 *tramp) MONO_INTERNAL;
 void              mono_monitor_exit_trampoline (mgreg_t *regs, guint8 *code, MonoObject *obj, guint8 *tramp) MONO_INTERNAL;
 gconstpointer     mono_get_trampoline_func (MonoTrampolineType tramp_type);
-gpointer          mini_get_vtable_trampoline (void) MONO_INTERNAL;
+gpointer          mini_get_vtable_trampoline (int slot_index) MONO_INTERNAL;
 gpointer*         mono_get_vcall_slot_addr (guint8* code, mgreg_t *regs) MONO_INTERNAL;
 
 gboolean          mono_running_on_valgrind (void) MONO_INTERNAL;