X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Finterpreter%2Finterp.c;h=28c482a61c0fa94856ed21736e741e6ad5f07e11;hb=6fbae7e1ec566f740bcdca18f411e5585a03f6b4;hp=7063ba41024add45df4316b0e052262fb3304240;hpb=3115b2429182368b23c3025a0a93b5240529cf60;p=mono.git diff --git a/mono/interpreter/interp.c b/mono/interpreter/interp.c index 7063ba41024..28c482a61c0 100644 --- a/mono/interpreter/interp.c +++ b/mono/interpreter/interp.c @@ -249,9 +249,9 @@ ves_real_abort (int line, MonoMethod *mh, } while (0); static gpointer -interp_create_remoting_trampoline (MonoMethod *method) +interp_create_remoting_trampoline (MonoMethod *method, MonoRemotingTarget target) { - return mono_interp_get_runtime_method (mono_marshal_get_remoting_invoke (method)); + return mono_interp_get_runtime_method (mono_marshal_get_remoting_invoke_for_target (method, target)); } static CRITICAL_SECTION runtime_method_lookup_section; @@ -270,8 +270,8 @@ mono_interp_get_runtime_method (MonoMethod *method) rtm = mono_mempool_alloc (domain->mp, sizeof (RuntimeMethod)); memset (rtm, 0, sizeof (*rtm)); rtm->method = method; - rtm->param_count = method->signature->param_count; - rtm->hasthis = method->signature->hasthis; + rtm->param_count = mono_method_signature (method)->param_count; + rtm->hasthis = mono_method_signature (method)->hasthis; rtm->valuetype = method->klass->valuetype; g_hash_table_insert (domain->jit_code_hash, method, rtm); LeaveCriticalSection (&runtime_method_lookup_section); @@ -578,7 +578,7 @@ ves_array_set (MonoInvocation *frame) esize = mono_array_element_size (ac); ea = mono_array_addr_with_size (ao, esize, pos); - mt = frame->runtime_method->method->signature->params [ac->rank]; + mt = mono_method_signature (frame->runtime_method->method)->params [ac->rank]; stackval_to_data (mt, &sp [ac->rank], ea, FALSE); } @@ -622,7 +622,7 @@ ves_array_get (MonoInvocation *frame) esize = mono_array_element_size (ac); ea = mono_array_addr_with_size (ao, esize, pos); - mt = frame->runtime_method->method->signature->ret; + mt = mono_method_signature (frame->runtime_method->method)->ret; stackval_from_data (mt, frame->retval, ea, FALSE); } @@ -886,7 +886,7 @@ dump_args (MonoInvocation *inv) { GString *str = g_string_new (""); int i; - MonoMethodSignature *signature = inv->runtime_method->method->signature; + MonoMethodSignature *signature = mono_method_signature (inv->runtime_method->method); if (signature->param_count == 0) return g_string_free (str, FALSE); @@ -904,7 +904,7 @@ static char* dump_retval (MonoInvocation *inv) { GString *str = g_string_new (""); - MonoType *ret = inv->runtime_method->method->signature->ret; + MonoType *ret = mono_method_signature (inv->runtime_method->method)->ret; if (ret->type != MONO_TYPE_VOID) dump_stackval (str, inv->retval, ret); @@ -1071,7 +1071,7 @@ interp_mono_runtime_invoke (MonoMethod *method, void *obj, void **params, MonoOb MonoInvocation frame; ThreadContext * volatile context = TlsGetValue (thread_context_id); MonoObject *retval = NULL; - MonoMethodSignature *sig = method->signature; + MonoMethodSignature *sig = mono_method_signature (method); MonoClass *klass = mono_class_from_mono_type (sig->ret); int i, type, isobject = 0; void *ret = NULL; @@ -1239,6 +1239,11 @@ do_icall (ThreadContext *context, int op, stackval *sp, gpointer ptr) context->managed_code = 0; switch (op) { + case MINT_ICALL_V_V: { + void (*func)() = ptr; + func (); + break; + } case MINT_ICALL_P_V: { void (*func)(gpointer) = ptr; func (sp [-1].data.p); @@ -1858,7 +1863,7 @@ ves_exec_method_with_context (MonoInvocation *frame, ThreadContext *context) MINT_IN_BREAK; } MINT_IN_CASE(MINT_CALLINT) - ves_pinvoke_method (frame, frame->runtime_method->method->signature, ((MonoMethodPInvoke*) frame->runtime_method->method)->addr, + ves_pinvoke_method (frame, mono_method_signature (frame->runtime_method->method), ((MonoMethodPInvoke*) frame->runtime_method->method)->addr, frame->runtime_method->method->string_ctor, context); if (frame->ex) { rtm = NULL; @@ -2572,7 +2577,7 @@ ves_exec_method_with_context (MonoInvocation *frame, ThreadContext *context) ip += 2; child_frame.runtime_method = rtm->data_items [token]; - csig = child_frame.runtime_method->method->signature; + csig = mono_method_signature (child_frame.runtime_method->method); newobj_class = child_frame.runtime_method->method->klass; /*if (profiling_classes) { guint count = GPOINTER_TO_UINT (g_hash_table_lookup (profiling_classes, newobj_class)); @@ -3488,6 +3493,7 @@ array_constructed: } goto handle_finally; MINT_IN_BREAK; + MINT_IN_CASE(MINT_ICALL_V_V) MINT_IN_CASE(MINT_ICALL_P_V) MINT_IN_CASE(MINT_ICALL_P_P) MINT_IN_CASE(MINT_ICALL_PP_V) @@ -3519,7 +3525,8 @@ array_constructed: MINT_IN_CASE(MINT_MONO_RETOBJ) ++ip; sp--; - stackval_from_data (frame->runtime_method->method->signature->ret, frame->retval, sp->data.p, frame->runtime_method->method->signature->pinvoke); + stackval_from_data (mono_method_signature (frame->runtime_method->method)->ret, frame->retval, sp->data.p, + mono_method_signature (frame->runtime_method->method)->pinvoke); if (sp > frame->stack) g_warning ("retobj: more values on stack: %d", sp-frame->stack); goto exit_frame; @@ -4396,21 +4403,24 @@ mono_interp_init(const char *file) mono_install_handler (interp_ex_handler); mono_install_stack_walk (interp_walk_stack); - mono_runtime_install_cleanup (quit_function); + mono_install_runtime_cleanup (quit_function); abort_requested = mono_thread_interruption_request_flag (); domain = mono_init_from_assembly (file, file); #ifdef __hpux /* generates very big stack frames */ mono_threads_set_default_stacksize(32*1024*1024); #endif - mono_init_icall (); + mono_icall_init (); mono_add_internal_call ("System.Diagnostics.StackFrame::get_frame_info", ves_icall_get_frame_info); mono_add_internal_call ("System.Diagnostics.StackTrace::get_trace", ves_icall_get_trace); mono_add_internal_call ("Mono.Runtime::mono_runtime_install_handlers", mono_runtime_install_handlers); mono_add_internal_call ("System.Delegate::CreateDelegate_internal", ves_icall_System_Delegate_CreateDelegate_internal); + mono_register_jit_icall (mono_thread_interruption_checkpoint, "mono_thread_interruption_checkpoint", mono_create_icall_signature ("void"), FALSE); + mono_runtime_init (domain, NULL, NULL); + mono_thread_attach (domain); return domain; } @@ -4450,11 +4460,6 @@ mono_main (int argc, char *argv []) mono_profiler_load (NULL); if (strcmp (argv [i], "--config") == 0) config_file = argv [++i]; - if (strcmp (argv [i], "--workers") == 0) { - mono_max_worker_threads = atoi (argv [++i]); - if (mono_max_worker_threads < 1) - mono_max_worker_threads = 1; - } if (strcmp (argv [i], "--help") == 0) usage (); #if DEBUG_INTERP