+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.
#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;
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 ();
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.
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;