X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fmini-x86.c;h=a3e893a1e2b79a4d8ca8f10dd559b9a592b64ba3;hb=f9ae98ab88f522219cd6be6fd282ef30adbc5365;hp=78da2b292f23927928fc7226479d0a1641fe3137;hpb=580ccb1ffb8e5c2e3fa0555e342d916764f42930;p=mono.git diff --git a/mono/mini/mini-x86.c b/mono/mini/mini-x86.c index 78da2b292f2..a3e893a1e2b 100644 --- a/mono/mini/mini-x86.c +++ b/mono/mini/mini-x86.c @@ -357,11 +357,7 @@ get_call_info_internal (CallInfo *cinfo, MonoMethodSignature *sig) case MONO_TYPE_U: case MONO_TYPE_PTR: case MONO_TYPE_FNPTR: - case MONO_TYPE_CLASS: case MONO_TYPE_OBJECT: - case MONO_TYPE_SZARRAY: - case MONO_TYPE_ARRAY: - case MONO_TYPE_STRING: cinfo->ret.storage = ArgInIReg; cinfo->ret.reg = X86_EAX; break; @@ -486,11 +482,7 @@ get_call_info_internal (CallInfo *cinfo, MonoMethodSignature *sig) case MONO_TYPE_U: case MONO_TYPE_PTR: case MONO_TYPE_FNPTR: - case MONO_TYPE_CLASS: case MONO_TYPE_OBJECT: - case MONO_TYPE_STRING: - case MONO_TYPE_SZARRAY: - case MONO_TYPE_ARRAY: add_general (&gr, param_regs, &stack_size, ainfo); break; case MONO_TYPE_GENERICINST: @@ -979,8 +971,7 @@ needs_stack_frame (MonoCompile *cfg) result = TRUE; else if (!sig->pinvoke && (sig->call_convention == MONO_CALL_VARARG)) result = TRUE; - else if ((mono_jit_trace_calls != NULL && mono_trace_eval (cfg->method)) || - (cfg->prof_options & MONO_PROFILE_ENTER_LEAVE)) + else if ((mono_jit_trace_calls != NULL && mono_trace_eval (cfg->method))) result = TRUE; set_needs_stack_frame (cfg, result); @@ -2436,16 +2427,6 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb) cpos = bb->max_offset; - if ((cfg->prof_options & MONO_PROFILE_COVERAGE) && cfg->coverage_info) { - MonoProfileCoverageInfo *cov = cfg->coverage_info; - g_assert (!cfg->compile_aot); - cpos += 6; - - cov->data [bb->dfn].cil_code = bb->cil_code; - /* this is not thread save, but good enough */ - x86_inc_mem (code, &cov->data [bb->dfn].count); - } - offset = code - cfg->native_code; mono_debug_open_block (cfg, bb, offset); @@ -4946,6 +4927,13 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb) case OP_SET_SP: x86_mov_reg_reg (code, X86_ESP, ins->sreg1, sizeof (mgreg_t)); break; + case OP_FILL_PROF_CALL_CTX: + x86_mov_membase_reg (code, ins->sreg1, MONO_STRUCT_OFFSET (MonoContext, esp), X86_ESP, sizeof (mgreg_t)); + x86_mov_membase_reg (code, ins->sreg1, MONO_STRUCT_OFFSET (MonoContext, ebp), X86_EBP, sizeof (mgreg_t)); + x86_mov_membase_reg (code, ins->sreg1, MONO_STRUCT_OFFSET (MonoContext, ebx), X86_EBX, sizeof (mgreg_t)); + x86_mov_membase_reg (code, ins->sreg1, MONO_STRUCT_OFFSET (MonoContext, esi), X86_ESI, sizeof (mgreg_t)); + x86_mov_membase_reg (code, ins->sreg1, MONO_STRUCT_OFFSET (MonoContext, edi), X86_EDI, sizeof (mgreg_t)); + break; default: g_warning ("unknown opcode %s\n", mono_inst_name (ins->opcode)); g_assert_not_reached (); @@ -5027,9 +5015,6 @@ mono_arch_emit_prolog (MonoCompile *cfg) cfg->code_size = MAX (cfg->header->code_size * 4, 10240); - if (cfg->prof_options & MONO_PROFILE_ENTER_LEAVE) - cfg->code_size += 512; - code = cfg->native_code = g_malloc (cfg->code_size); #if 0 @@ -5177,8 +5162,6 @@ mono_arch_emit_prolog (MonoCompile *cfg) MonoInst *ins; bb->max_offset = max_offset; - if (cfg->prof_options & MONO_PROFILE_COVERAGE) - max_offset += 6; /* max alignment for loops */ if ((cfg->opt & MONO_OPT_LOOP) && bb_is_loop_start (bb)) max_offset += LOOP_ALIGNMENT; @@ -5513,13 +5496,16 @@ mono_arch_is_inst_imm (gint64 imm) void mono_arch_finish_init (void) { - if (!g_getenv ("MONO_NO_TLS")) { + char *mono_no_tls = g_getenv ("MONO_NO_TLS"); + if (!mono_no_tls) { #ifndef TARGET_WIN32 #if MONO_XEN_OPT optimize_for_xen = access ("/proc/xen", F_OK) == 0; #endif #endif - } + } else { + g_free (mono_no_tls); + } } void @@ -5675,7 +5661,7 @@ mono_arch_build_imt_trampoline (MonoVTable *vtable, MonoDomain *domain, MonoIMTC g_free (buff); } - mono_profiler_code_buffer_new (start, code - start, MONO_PROFILER_CODE_BUFFER_IMT_TRAMPOLINE, NULL); + MONO_PROFILER_RAISE (jit_code_buffer, (start, code - start, MONO_PROFILER_CODE_BUFFER_IMT_TRAMPOLINE, NULL)); mono_tramp_info_register (mono_tramp_info_create (NULL, start, code - start, NULL, unwind_ops), domain); @@ -5811,12 +5797,10 @@ mono_arch_get_patch_offset (guint8 *code) } /** - * mono_breakpoint_clean_code: + * \return TRUE if no sw breakpoint was present. * - * Copy @size bytes from @code - @offset to the buffer @buf. If the debugger inserted software + * Copy \p size bytes from \p code - \p offset to the buffer \p buf. If the debugger inserted software * breakpoints in the original code, they are removed in the copy. - * - * Returns TRUE if no sw breakpoint was present. */ gboolean mono_breakpoint_clean_code (guint8 *method_start, guint8 *code, int offset, guint8 *buf, int size) @@ -5948,7 +5932,7 @@ get_delegate_invoke_impl (MonoTrampInfo **info, gboolean has_target, guint32 par if (!has_target) g_free (buff); } - mono_profiler_code_buffer_new (start, code - start, MONO_PROFILER_CODE_BUFFER_DELEGATE_INVOKE, NULL); + MONO_PROFILER_RAISE (jit_code_buffer, (start, code - start, MONO_PROFILER_CODE_BUFFER_DELEGATE_INVOKE, NULL)); return start; } @@ -5988,7 +5972,7 @@ get_delegate_virtual_invoke_impl (MonoTrampInfo **info, gboolean load_imt_reg, i /* Load the vtable */ x86_mov_reg_membase (code, X86_EAX, X86_ECX, MONO_STRUCT_OFFSET (MonoObject, vtable), 4); x86_jump_membase (code, X86_EAX, offset); - mono_profiler_code_buffer_new (start, code - start, MONO_PROFILER_CODE_BUFFER_DELEGATE_INVOKE, NULL); + MONO_PROFILER_RAISE (jit_code_buffer, (start, code - start, MONO_PROFILER_CODE_BUFFER_DELEGATE_INVOKE, NULL)); tramp_name = mono_get_delegate_virtual_invoke_impl_name (load_imt_reg, offset); *info = mono_tramp_info_create (tramp_name, start, code - start, NULL, unwind_ops); @@ -6317,29 +6301,6 @@ mono_arch_decompose_long_opts (MonoCompile *cfg, MonoInst *long_ins) #endif /* MONO_ARCH_SIMD_INTRINSICS */ } -/*MONO_ARCH_HAVE_HANDLER_BLOCK_GUARD*/ -gpointer -mono_arch_install_handler_block_guard (MonoJitInfo *ji, MonoJitExceptionInfo *clause, MonoContext *ctx, gpointer new_value) -{ - int offset; - gpointer *sp, old_value; - char *bp; - - offset = clause->exvar_offset; - - /*Load the spvar*/ - bp = MONO_CONTEXT_GET_BP (ctx); - sp = *(gpointer*)(bp + offset); - - old_value = *sp; - if (old_value < ji->code_start || (char*)old_value > ((char*)ji->code_start + ji->code_size)) - return old_value; - - *sp = new_value; - - return old_value; -} - /* * mono_aot_emit_load_got_addr: *