From 617abf83c977190265b7569f75bfda42ed5ea9ae Mon Sep 17 00:00:00 2001 From: Zoltan Varga Date: Sun, 19 Apr 2009 18:21:34 +0000 Subject: [PATCH] 2009-04-19 Zoltan Varga * mini-trampolines.c (mono_get_vcall_slot_addr): New helper function. * mini-trampolines.c tramp-amd64.c tramp-x86.c: Use it. * mini-.c: Get rid of the identical mono_arch_get_vcall_slot_addr () functions. svn path=/trunk/mono/; revision=132097 --- mono/mini/ChangeLog | 7 +++++++ mono/mini/mini-amd64.c | 11 ----------- mono/mini/mini-arm.c | 11 ----------- mono/mini/mini-ia64.c | 11 ----------- mono/mini/mini-ppc.c | 11 ----------- mono/mini/mini-sparc.c | 11 ----------- mono/mini/mini-trampolines.c | 23 +++++++++++++++++------ mono/mini/mini-x86.c | 11 ----------- mono/mini/mini.h | 2 +- mono/mini/tramp-amd64.c | 2 +- mono/mini/tramp-mips.c | 11 ----------- mono/mini/tramp-s390.c | 13 ------------- mono/mini/tramp-s390x.c | 13 ------------- mono/mini/tramp-x86.c | 2 +- 14 files changed, 27 insertions(+), 112 deletions(-) diff --git a/mono/mini/ChangeLog b/mono/mini/ChangeLog index 311a7a05faf..c1af74c71dd 100644 --- a/mono/mini/ChangeLog +++ b/mono/mini/ChangeLog @@ -1,5 +1,12 @@ 2009-04-19 Zoltan Varga + * mini-trampolines.c (mono_get_vcall_slot_addr): New helper function. + + * mini-trampolines.c tramp-amd64.c tramp-x86.c: Use it. + + * mini-.c: Get rid of the identical mono_arch_get_vcall_slot_addr () + functions. + * mini-.h mini-trampolines.c mini.c: Get rid of MONO_ARCH_COMMON_VTABLE_TRAMPOLINE, it is supported by all archs. diff --git a/mono/mini/mini-amd64.c b/mono/mini/mini-amd64.c index c60be9781c5..becd4af5f29 100644 --- a/mono/mini/mini-amd64.c +++ b/mono/mini/mini-amd64.c @@ -5664,17 +5664,6 @@ mono_arch_get_vcall_slot (guint8 *code, gpointer *regs, int *displacement) return regs [reg]; } -gpointer* -mono_arch_get_vcall_slot_addr (guint8* code, gpointer *regs) -{ - gpointer vt; - int displacement; - vt = mono_arch_get_vcall_slot (code, regs, &displacement); - if (!vt) - return NULL; - return (gpointer*)((char*)vt + displacement); -} - int mono_arch_get_this_arg_reg (MonoMethodSignature *sig, MonoGenericSharingContext *gsctx, guint8 *code) { diff --git a/mono/mini/mini-arm.c b/mono/mini/mini-arm.c index 16b6c259cfd..7c23e51e307 100644 --- a/mono/mini/mini-arm.c +++ b/mono/mini/mini-arm.c @@ -342,17 +342,6 @@ mono_arch_get_vcall_slot (guint8 *code_ptr, gpointer *regs, int *displacement) return NULL; } -gpointer* -mono_arch_get_vcall_slot_addr (guint8* code, gpointer *regs) -{ - gpointer vt; - int displacement; - vt = mono_arch_get_vcall_slot (code, regs, &displacement); - if (!vt) - return NULL; - return (gpointer*)((char*)vt + displacement); -} - #define MAX_ARCH_DELEGATE_PARAMS 3 static gpointer diff --git a/mono/mini/mini-ia64.c b/mono/mini/mini-ia64.c index 7b956d6447c..ef9a6cf2915 100644 --- a/mono/mini/mini-ia64.c +++ b/mono/mini/mini-ia64.c @@ -4568,17 +4568,6 @@ mono_arch_get_vcall_slot (guint8* code, gpointer *regs, int *displacement) return NULL; } -gpointer* -mono_arch_get_vcall_slot_addr (guint8* code, gpointer *regs) -{ - gpointer vt; - int displacement; - vt = mono_arch_get_vcall_slot (code, regs, &displacement); - if (!vt) - return NULL; - return (gpointer*)(gpointer)((char*)vt + displacement); -} - gpointer* mono_arch_get_delegate_method_ptr_addr (guint8* code, gpointer *regs) { diff --git a/mono/mini/mini-ppc.c b/mono/mini/mini-ppc.c index f1149abd8b7..ff48ce0aa99 100644 --- a/mono/mini/mini-ppc.c +++ b/mono/mini/mini-ppc.c @@ -373,17 +373,6 @@ mono_arch_get_vcall_slot (guint8 *code_ptr, gpointer *regs, int *displacement) return o; } -gpointer* -mono_arch_get_vcall_slot_addr (guint8 *code, gpointer *regs) -{ - gpointer vt; - int displacement; - vt = mono_arch_get_vcall_slot (code, regs, &displacement); - if (!vt) - return NULL; - return (gpointer*)((char*)vt + displacement); -} - #define MAX_ARCH_DELEGATE_PARAMS 7 gpointer diff --git a/mono/mini/mini-sparc.c b/mono/mini/mini-sparc.c index e44f8ffdb57..8f23987434d 100644 --- a/mono/mini/mini-sparc.c +++ b/mono/mini/mini-sparc.c @@ -2317,17 +2317,6 @@ mono_arch_get_vcall_slot (guint8 *code8, gpointer *regs, int *displacement) return NULL; } -gpointer* -mono_arch_get_vcall_slot_addr (guint8 *code, gpointer *regs) -{ - gpointer vt; - int displacement; - vt = mono_arch_get_vcall_slot (code, regs, &displacement); - if (!vt) - return NULL; - return (gpointer*)((char*)vt + displacement); -} - #define CMP_SIZE 3 #define BR_SMALL_SIZE 2 #define BR_LARGE_SIZE 2 diff --git a/mono/mini/mini-trampolines.c b/mono/mini/mini-trampolines.c index 5422a1c015a..72dcf1a0120 100644 --- a/mono/mini/mini-trampolines.c +++ b/mono/mini/mini-trampolines.c @@ -88,6 +88,17 @@ mono_create_static_rgctx_trampoline (MonoMethod *m, gpointer addr) } #endif +gpointer* +mono_get_vcall_slot_addr (guint8* code, gpointer *regs) +{ + gpointer vt; + int displacement; + vt = mono_arch_get_vcall_slot (code, regs, &displacement); + if (!vt) + return NULL; + return (gpointer*)((char*)vt + displacement); +} + #ifdef MONO_ARCH_HAVE_IMT static gpointer* @@ -206,7 +217,7 @@ mono_magic_trampoline (gssize *regs, guint8 *code, MonoMethod *m, guint8* tramp) /* Avoid loading metadata or creating a generic vtable if possible */ addr = mono_aot_get_method_from_vt_slot (mono_domain_get (), vt, displacement); if (addr && !vt->klass->valuetype) { - vtable_slot = mono_arch_get_vcall_slot_addr (code, (gpointer*)regs); + vtable_slot = mono_get_vcall_slot_addr (code, (gpointer*)regs); if (mono_aot_is_got_entry (code, (guint8*)vtable_slot) || mono_domain_owns_vtable_slot (mono_domain_get (), vtable_slot)) { *vtable_slot = mono_get_addr_from_ftnptr (addr); } @@ -234,7 +245,7 @@ mono_magic_trampoline (gssize *regs, guint8 *code, MonoMethod *m, guint8* tramp) * needs the signature to be able to find the this argument */ m = mono_arch_find_imt_method ((gpointer*)regs, code); - vtable_slot = mono_arch_get_vcall_slot_addr (code, (gpointer*)regs); + vtable_slot = mono_get_vcall_slot_addr (code, (gpointer*)regs); g_assert (vtable_slot); gsctx = mono_get_generic_context_from_code (code); @@ -329,7 +340,7 @@ mono_magic_trampoline (gssize *regs, guint8 *code, MonoMethod *m, guint8* tramp) mono_get_generic_context_from_code (code)); vt = this_argument->vtable; - vtable_slot = mono_arch_get_vcall_slot_addr (code, (gpointer*)regs); + vtable_slot = mono_get_vcall_slot_addr (code, (gpointer*)regs); g_assert (this_argument->vtable->klass->inited); //mono_class_init (this_argument->vtable->klass); @@ -414,7 +425,7 @@ mono_magic_trampoline (gssize *regs, guint8 *code, MonoMethod *m, guint8* tramp) int displacement; MonoVTable *vt = mono_arch_get_vcall_slot (code, (gpointer*)regs, &displacement); - vtable_slot = mono_arch_get_vcall_slot_addr (code, (gpointer*)regs); + vtable_slot = mono_get_vcall_slot_addr (code, (gpointer*)regs); g_assert (vtable_slot); if (vt->klass->valuetype) @@ -455,7 +466,7 @@ mono_magic_trampoline (gssize *regs, guint8 *code, MonoMethod *m, guint8* tramp) return addr; } - vtable_slot = mono_arch_get_vcall_slot_addr (code, (gpointer*)regs); + vtable_slot = mono_get_vcall_slot_addr (code, (gpointer*)regs); if (vtable_slot) { if (m->klass->valuetype) @@ -567,7 +578,7 @@ mono_aot_trampoline (gssize *regs, guint8 *code, guint8 *token_info, return mono_magic_trampoline (regs, code, method, tramp); } - vtable_slot = mono_arch_get_vcall_slot_addr (code, (gpointer*)regs); + vtable_slot = mono_get_vcall_slot_addr (code, (gpointer*)regs); g_assert (!vtable_slot); /* This is a normal call through a PLT entry */ diff --git a/mono/mini/mini-x86.c b/mono/mini/mini-x86.c index 8d73588e508..17182ee3d9e 100644 --- a/mono/mini/mini-x86.c +++ b/mono/mini/mini-x86.c @@ -5320,17 +5320,6 @@ mono_arch_get_vcall_slot (guint8 *code, gpointer *regs, int *displacement) return regs [reg]; } -gpointer* -mono_arch_get_vcall_slot_addr (guint8 *code, gpointer *regs) -{ - gpointer vt; - int displacement; - vt = mono_arch_get_vcall_slot (code, regs, &displacement); - if (!vt) - return NULL; - return (gpointer*)((char*)vt + displacement); -} - gpointer mono_arch_get_this_arg_from_call (MonoGenericSharingContext *gsctx, MonoMethodSignature *sig, gssize *regs, guint8 *code) diff --git a/mono/mini/mini.h b/mono/mini/mini.h index bbc20b54bba..b1d6c9667e1 100644 --- a/mono/mini/mini.h +++ b/mono/mini/mini.h @@ -1415,6 +1415,7 @@ void mono_monitor_enter_trampoline (gssize *regs, guint8 *code, Mon void mono_monitor_exit_trampoline (gssize *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* mono_get_vcall_slot_addr (guint8* code, gpointer *regs) MONO_INTERNAL; gboolean mono_running_on_valgrind (void) MONO_INTERNAL; void* mono_global_codeman_reserve (int size) MONO_INTERNAL; @@ -1542,7 +1543,6 @@ MonoInst* mono_arch_get_thread_intrinsic (MonoCompile* cfg) MONO_INTERNAL gboolean mono_arch_is_int_overflow (void *sigctx, void *info) MONO_INTERNAL; void mono_arch_invalidate_method (MonoJitInfo *ji, void *func, gpointer func_arg) MONO_INTERNAL; guint32 mono_arch_get_patch_offset (guint8 *code) MONO_INTERNAL; -gpointer*mono_arch_get_vcall_slot_addr (guint8* code, gpointer *regs) MONO_INTERNAL; gpointer mono_arch_get_vcall_slot (guint8 *code, gpointer *regs, int *displacement) MONO_INTERNAL; gpointer*mono_arch_get_delegate_method_ptr_addr (guint8* code, gpointer *regs) MONO_INTERNAL; void mono_arch_create_vars (MonoCompile *cfg) MONO_INTERNAL; diff --git a/mono/mini/tramp-amd64.c b/mono/mini/tramp-amd64.c index d71e433fa62..254fae05ec2 100644 --- a/mono/mini/tramp-amd64.c +++ b/mono/mini/tramp-amd64.c @@ -189,7 +189,7 @@ mono_arch_nullify_class_init_trampoline (guint8 *code, gssize *regs) gpointer *vtable_slot; /* call *(%rip) */ - vtable_slot = mono_arch_get_vcall_slot_addr (code + 3, (gpointer*)regs); + vtable_slot = mono_get_vcall_slot_addr (code + 3, (gpointer*)regs); g_assert (vtable_slot); *vtable_slot = nullified_class_init_trampoline; diff --git a/mono/mini/tramp-mips.c b/mono/mini/tramp-mips.c index 60cbbbbe70a..b2947d385e2 100644 --- a/mono/mini/tramp-mips.c +++ b/mono/mini/tramp-mips.c @@ -176,17 +176,6 @@ mono_arch_get_vcall_slot (guint8 *code_ptr, gpointer *regs, int *displacement) return o; } -gpointer* -mono_arch_get_vcall_slot_addr (guint8 *code, gpointer *regs) -{ - gpointer vt; - int displacement; - vt = mono_arch_get_vcall_slot (code, regs, &displacement); - if (!vt) - return NULL; - return (gpointer*)((char*)vt + displacement); -} - void mono_arch_nullify_plt_entry (guint8 *code) { diff --git a/mono/mini/tramp-s390.c b/mono/mini/tramp-s390.c index c71dd61108f..1fc75f48ba6 100644 --- a/mono/mini/tramp-s390.c +++ b/mono/mini/tramp-s390.c @@ -253,19 +253,6 @@ mono_arch_get_vcall_slot (guint8 *code, gpointer *regs, int *displacement) /*========================= End of Function ========================*/ -gpointer* -mono_arch_get_vcall_slot_addr (guint8* code, gpointer *regs) -{ - gpointer vt; - int displacement; - vt = mono_arch_get_vcall_slot (code, regs, &displacement); - if (!vt) - return NULL; - return (gpointer*)((char*)vt + displacement); -} - -/*========================= End of Function ========================*/ - /*------------------------------------------------------------------*/ /* */ /* Name - mono_arch_create_trampoline_code */ diff --git a/mono/mini/tramp-s390x.c b/mono/mini/tramp-s390x.c index 69c569fef6e..3abe460f15c 100644 --- a/mono/mini/tramp-s390x.c +++ b/mono/mini/tramp-s390x.c @@ -277,19 +277,6 @@ mono_arch_get_vcall_slot (guint8 *code, gpointer *regs, int *displacement) /*========================= End of Function ========================*/ -gpointer* -mono_arch_get_vcall_slot_addr (guint8* code, gpointer *regs) -{ - gpointer vt; - int displacement; - vt = mono_arch_get_vcall_slot (code, regs, &displacement); - if (!vt) - return NULL; - return (gpointer*)((char*)vt + displacement); -} - -/*========================= End of Function ========================*/ - /*------------------------------------------------------------------*/ /* */ /* Name - mono_arch_create_trampoline_code */ diff --git a/mono/mini/tramp-x86.c b/mono/mini/tramp-x86.c index 9f41cf05b64..d32f3d7f9cc 100644 --- a/mono/mini/tramp-x86.c +++ b/mono/mini/tramp-x86.c @@ -174,7 +174,7 @@ mono_arch_nullify_class_init_trampoline (guint8 *code, gssize *regs) /* call *() -> Call made from AOT code */ gpointer *vtable_slot; - vtable_slot = mono_arch_get_vcall_slot_addr (code + 5, (gpointer*)regs); + vtable_slot = mono_get_vcall_slot_addr (code + 5, (gpointer*)regs); g_assert (vtable_slot); *vtable_slot = nullified_class_init_trampoline; -- 2.25.1