projects
/
mono.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[runtime] New profiler API.
[mono.git]
/
mono
/
mini
/
method-to-ir.c
diff --git
a/mono/mini/method-to-ir.c
b/mono/mini/method-to-ir.c
index 2a5f8917d5e86dba99e1612918565f8dfd325040..c20c6b2bbbf6102bd76c963a00cba4af9ba82c56 100644
(file)
--- a/
mono/mini/method-to-ir.c
+++ b/
mono/mini/method-to-ir.c
@@
-1765,7
+1765,7
@@
emit_pop_lmf (MonoCompile *cfg)
}
static void
}
static void
-emit_instrumentation_call (MonoCompile *cfg, void *func)
+emit_instrumentation_call (MonoCompile *cfg, void *func
, gboolean entry
)
{
MonoInst *iargs [1];
{
MonoInst *iargs [1];
@@
-1776,7
+1776,7
@@
emit_instrumentation_call (MonoCompile *cfg, void *func)
if (cfg->method != cfg->current_method)
return;
if (cfg->method != cfg->current_method)
return;
- if (
cfg->prof_options & MONO_PROFILE_ENTER_LEAVE
) {
+ if (
mono_profiler_should_instrument_method (cfg->method, entry)
) {
EMIT_NEW_METHODCONST (cfg, iargs [0], cfg->method);
mono_emit_jit_icall (cfg, func, iargs);
}
EMIT_NEW_METHODCONST (cfg, iargs [0], cfg->method);
mono_emit_jit_icall (cfg, func, iargs);
}
@@
-2247,7
+2247,7
@@
mono_emit_call_args (MonoCompile *cfg, MonoMethodSignature *sig,
tail = FALSE;
if (tail) {
tail = FALSE;
if (tail) {
- emit_instrumentation_call (cfg, mono_profiler_
method_leave
);
+ emit_instrumentation_call (cfg, mono_profiler_
raise_method_leave, FALSE
);
MONO_INST_NEW_CALL (cfg, call, OP_TAILCALL);
} else
MONO_INST_NEW_CALL (cfg, call, OP_TAILCALL);
} else
@@
-5867,7
+5867,7
@@
mini_redirect_call (MonoCompile *cfg, MonoMethod *method,
{
if (method->klass == mono_defaults.string_class) {
/* managed string allocation support */
{
if (method->klass == mono_defaults.string_class) {
/* managed string allocation support */
- if (strcmp (method->name, "InternalAllocateStr") == 0 && !(
mono_profiler_events & MONO_PROFILE_ALLOCATIONS) && !(
cfg->opt & MONO_OPT_SHARED)) {
+ if (strcmp (method->name, "InternalAllocateStr") == 0 && !(cfg->opt & MONO_OPT_SHARED)) {
MonoInst *iargs [2];
MonoVTable *vtable = mono_class_vtable (cfg->domain, method->klass);
MonoMethod *managed_alloc = NULL;
MonoInst *iargs [2];
MonoVTable *vtable = mono_class_vtable (cfg->domain, method->klass);
MonoMethod *managed_alloc = NULL;
@@
-7310,8
+7310,7
@@
mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
cfg->dont_inline = g_list_prepend (cfg->dont_inline, method);
if (cfg->method == method) {
cfg->dont_inline = g_list_prepend (cfg->dont_inline, method);
if (cfg->method == method) {
- if (cfg->prof_options & MONO_PROFILE_INS_COVERAGE)
- cfg->coverage_info = mono_profiler_coverage_alloc (cfg->method, header->code_size);
+ cfg->coverage_info = mono_profiler_coverage_alloc (cfg->method, header->code_size);
/* ENTRY BLOCK */
NEW_BBLOCK (cfg, start_bblock);
/* ENTRY BLOCK */
NEW_BBLOCK (cfg, start_bblock);
@@
-8044,7
+8043,7
@@
mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
if (cfg->gshared && mono_method_check_context_used (cmethod))
GENERIC_SHARING_FAILURE (CEE_JMP);
if (cfg->gshared && mono_method_check_context_used (cmethod))
GENERIC_SHARING_FAILURE (CEE_JMP);
- emit_instrumentation_call (cfg, mono_profiler_
method_leave
);
+ emit_instrumentation_call (cfg, mono_profiler_
raise_method_leave, FALSE
);
fsig = mono_method_signature (cmethod);
n = fsig->param_count + fsig->hasthis;
fsig = mono_method_signature (cmethod);
n = fsig->param_count + fsig->hasthis;
@@
-8986,7
+8985,7
@@
mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
/* Handle tail calls similarly to normal calls */
tail_call = TRUE;
} else {
/* Handle tail calls similarly to normal calls */
tail_call = TRUE;
} else {
- emit_instrumentation_call (cfg, mono_profiler_
method_leave
);
+ emit_instrumentation_call (cfg, mono_profiler_
raise_method_leave, FALSE
);
MONO_INST_NEW_CALL (cfg, call, OP_JMP);
call->tail_call = TRUE;
MONO_INST_NEW_CALL (cfg, call, OP_JMP);
call->tail_call = TRUE;
@@
-9120,7
+9119,7
@@
mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
cfg->ret_var_set = TRUE;
}
} else {
cfg->ret_var_set = TRUE;
}
} else {
- emit_instrumentation_call (cfg, mono_profiler_
method_leave
);
+ emit_instrumentation_call (cfg, mono_profiler_
raise_method_leave, FALSE
);
if (cfg->lmf_var && cfg->cbb->in_count && !cfg->llvm_only)
emit_pop_lmf (cfg);
if (cfg->lmf_var && cfg->cbb->in_count && !cfg->llvm_only)
emit_pop_lmf (cfg);
@@
-11500,7
+11499,8
@@
mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
case CEE_MONO_LDPTR_CARD_TABLE:
case CEE_MONO_LDPTR_NURSERY_START:
case CEE_MONO_LDPTR_NURSERY_BITS:
case CEE_MONO_LDPTR_CARD_TABLE:
case CEE_MONO_LDPTR_NURSERY_START:
case CEE_MONO_LDPTR_NURSERY_BITS:
- case CEE_MONO_LDPTR_INT_REQ_FLAG: {
+ case CEE_MONO_LDPTR_INT_REQ_FLAG:
+ case CEE_MONO_LDPTR_PROFILER_ALLOCATION_COUNT: {
CHECK_STACK_OVF (1);
switch (ip [1]) {
CHECK_STACK_OVF (1);
switch (ip [1]) {
@@
-11516,6
+11516,9
@@
mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
case CEE_MONO_LDPTR_INT_REQ_FLAG:
ins = mini_emit_runtime_constant (cfg, MONO_PATCH_INFO_INTERRUPTION_REQUEST_FLAG, NULL);
break;
case CEE_MONO_LDPTR_INT_REQ_FLAG:
ins = mini_emit_runtime_constant (cfg, MONO_PATCH_INFO_INTERRUPTION_REQUEST_FLAG, NULL);
break;
+ case CEE_MONO_LDPTR_PROFILER_ALLOCATION_COUNT:
+ ins = mini_emit_runtime_constant (cfg, MONO_PATCH_INFO_PROFILER_ALLOCATION_COUNT, NULL);
+ break;
default:
g_assert_not_reached ();
break;
default:
g_assert_not_reached ();
break;
@@
-12628,7
+12631,7
@@
mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
}
cfg->cbb = init_localsbb;
}
cfg->cbb = init_localsbb;
- emit_instrumentation_call (cfg, mono_profiler_
method_enter
);
+ emit_instrumentation_call (cfg, mono_profiler_
raise_method_enter, TRUE
);
if (seq_points) {
MonoBasicBlock *bb;
if (seq_points) {
MonoBasicBlock *bb;