X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Ftramp-hppa.c;h=3054e8c7c61ebf16da24aa8704cd15814dc7198b;hb=8298b36af4f1ed3d37d350fc77bbf01c50082d0d;hp=3195a88ab3d2d0e27665952111fcd8346b73f2d1;hpb=cc9fa96a3163b4ac0b2df0726c72963017d802d6;p=mono.git diff --git a/mono/mini/tramp-hppa.c b/mono/mini/tramp-hppa.c index 3195a88ab3d..3054e8c7c61 100644 --- a/mono/mini/tramp-hppa.c +++ b/mono/mini/tramp-hppa.c @@ -45,6 +45,7 @@ /* * mono_arch_get_unbox_trampoline: + * @gsctx: the generic sharing context * @m: method pointer * @addr: pointer to native code for @m * @@ -53,18 +54,16 @@ * unboxing before calling the method */ gpointer -mono_arch_get_unbox_trampoline (MonoMethod *m, gpointer addr) +mono_arch_get_unbox_trampoline (MonoGenericSharingContext *gsctx, MonoMethod *m, gpointer addr) { guint8 *code, *start; int this_pos = hppa_r26; MonoDomain *domain = mono_domain_get (); - if (!mono_method_signature (m)->ret->byref && MONO_TYPE_ISSTRUCT (mono_method_signature (m)->ret)) + if (MONO_TYPE_ISSTRUCT (mono_method_signature (m)->ret)) this_pos = hppa_r25; - mono_domain_lock (domain); - start = code = mono_code_manager_reserve (domain->code_mp, 20); - mono_domain_unlock (domain); + start = code = mono_domain_code_reserve (domain, 20); hppa_set (code, addr, hppa_r1); hppa_ldo (code, sizeof (MonoObject), this_pos, this_pos); @@ -115,13 +114,13 @@ mono_arch_patch_callsite (guint8 *method_start, guint8 *p, guint8 *addr) } void -mono_arch_patch_plt_entry (guint8 *code, guint8 *addr) +mono_arch_patch_plt_entry (guint8 *code, gpointer *got, mgreg_t *regs, guint8 *addr) { g_assert_not_reached (); } void -mono_arch_nullify_class_init_trampoline (guint8 *code8, gssize *regs) +mono_arch_nullify_class_init_trampoline (guint8 *code8, mgreg_t *regs) { guint32 *buf = (guint32 *)((unsigned long)code8 & ~3); guint32 *code = buf; @@ -138,7 +137,7 @@ mono_arch_nullify_class_init_trampoline (guint8 *code8, gssize *regs) } void -mono_arch_nullify_plt_entry (guint8 *code) +mono_arch_nullify_plt_entry (guint8 *code, mgreg_t *regs) { g_assert_not_reached (); } @@ -230,7 +229,7 @@ mono_arch_create_trampoline_code (MonoTrampolineType tramp_type) hppa_ldo (buf, HPPA_STACK_LMF_OFFSET, hppa_r3, hppa_r1); hppa_stw (buf, hppa_r1, 0, hppa_r28); - /* Call mono_magic_trampoline (gssize *regs, guint8 *code, MonoMethod *m, guint8* tramp) */ + /* Call mono_magic_trampoline (mgreg_t *regs, guint8 *code, MonoMethod *m, guint8* tramp) */ hppa_ldo (buf, HPPA_STACK_LMF_OFFSET + G_STRUCT_OFFSET (MonoLMF, regs), hppa_r3, hppa_r26); hppa_ldw (buf, HPPA_STACK_LMF_OFFSET + G_STRUCT_OFFSET (MonoLMF, method), hppa_r3, hppa_r24); if (tramp_type == MONO_TRAMPOLINE_JUMP) @@ -320,9 +319,7 @@ mono_arch_create_class_init_trampoline (MonoVTable *vtable) tramp = mono_get_trampoline_code (MONO_TRAMPOLINE_CLASS_INIT); /* This is the method-specific part of the trampoline. Its purpose is to provide the generic part with the MonoMethod *method pointer. */ - mono_domain_lock (vtable->domain); - code = buf = mono_code_manager_reserve (vtable->domain->code_mp, METHOD_TRAMPOLINE_SIZE); - mono_domain_unlock (vtable->domain); + code = buf = mono_domain_code_reserve (vtable->domain, METHOD_TRAMPOLINE_SIZE); hppa_stw (buf, hppa_r2, -20, hppa_sp); hppa_copy (buf, hppa_r3, hppa_r1); @@ -352,8 +349,6 @@ mono_arch_create_class_init_trampoline (MonoVTable *vtable) /* Sanity check */ g_assert ((buf - code) <= METHOD_TRAMPOLINE_SIZE); - mono_jit_stats.method_trampolines++; - return code; } @@ -363,9 +358,7 @@ create_specific_tramp (MonoMethod *method, guint8* tramp, MonoDomain *domain) guint8 *code, *buf; MonoJitInfo *ji; - mono_domain_lock (domain); - code = buf = mono_code_manager_reserve (domain->code_mp, 20); - mono_domain_unlock (domain); + code = buf = mono_domain_code_reserve (domain, 20); /* Call trampoline, with the "method" pointer in r20 */ hppa_set (buf, tramp, hppa_r1); @@ -383,8 +376,6 @@ create_specific_tramp (MonoMethod *method, guint8* tramp, MonoDomain *domain) ji->code_start = code; ji->code_size = buf - code; - mono_jit_stats.method_trampolines++; - return ji; } @@ -426,7 +417,7 @@ mono_arch_create_jit_trampoline (MonoMethod *method) MonoDomain* domain = mono_domain_get (); gpointer code_start; - tramp = mono_get_trampoline_code (MONO_TRAMPOLINE_GENERIC); + tramp = mono_get_trampoline_code (MONO_TRAMPOLINE_JIT); ji = create_specific_tramp (method, tramp, domain); code_start = ji->code_start; g_free (ji); @@ -441,11 +432,3 @@ mono_arch_create_rgctx_lazy_fetch_trampoline (guint32 encoded_offset) g_assert_not_reached (); return NULL; } - -guint32 -mono_arch_get_rgctx_lazy_fetch_offset (gpointer *regs) -{ - /* FIXME: implement! */ - g_assert_not_reached (); - return 0; -}