[profiler] Add missing code buffers for exception handling.
authorMark Probst <mark.probst@gmail.com>
Tue, 24 Feb 2015 01:11:28 +0000 (17:11 -0800)
committerMark Probst <mark.probst@gmail.com>
Thu, 2 Apr 2015 21:12:31 +0000 (14:12 -0700)
mono/metadata/profiler.h
mono/mini/exceptions-amd64.c
mono/mini/mini-amd64.c
mono/profiler/decode.c
mono/profiler/mono-profiler-vtune.c

index d3de24736ff519ccad0def2212207e83db98334a..42e2f1f27dd50f0ce0f9e4d56a518729235b9736 100644 (file)
@@ -73,6 +73,7 @@ typedef enum {
        MONO_PROFILER_CODE_BUFFER_HELPER,
        MONO_PROFILER_CODE_BUFFER_MONITOR,
        MONO_PROFILER_CODE_BUFFER_DELEGATE_INVOKE,
+       MONO_PROFILER_CODE_BUFFER_EXCEPTION_HANDLING,
        MONO_PROFILER_CODE_BUFFER_LAST
 } MonoProfilerCodeBufferType;
 
index c02137150e0d59ed6e9770b5cd623f2e7fcc19da..6b2fa44a737fc5c00db03e9662830300db32439c 100644 (file)
@@ -206,6 +206,7 @@ mono_arch_get_restore_context (MonoTrampInfo **info, gboolean aot)
        nacl_global_codeman_validate(&start, 256, &code);
 
        mono_arch_flush_icache (start, code - start);
+       mono_profiler_code_buffer_new (start, code - start, MONO_PROFILER_CODE_BUFFER_EXCEPTION_HANDLING, NULL);
 
        if (info)
                *info = mono_tramp_info_create ("restore_context", start, code - start, ji, unwind_ops);
@@ -293,6 +294,7 @@ mono_arch_get_call_filter (MonoTrampInfo **info, gboolean aot)
        nacl_global_codeman_validate(&start, kMaxCodeSize, &code);
 
        mono_arch_flush_icache (start, code - start);
+       mono_profiler_code_buffer_new (start, code - start, MONO_PROFILER_CODE_BUFFER_EXCEPTION_HANDLING, NULL);
 
        if (info)
                *info = mono_tramp_info_create ("call_filter", start, code - start, ji, unwind_ops);
@@ -484,6 +486,7 @@ get_throw_trampoline (MonoTrampInfo **info, gboolean rethrow, gboolean corlib, g
        g_assert ((code - start) < kMaxCodeSize);
 
        nacl_global_codeman_validate(&start, kMaxCodeSize, &code);
+       mono_profiler_code_buffer_new (start, code - start, MONO_PROFILER_CODE_BUFFER_EXCEPTION_HANDLING, NULL);
 
        if (info)
                *info = mono_tramp_info_create (tramp_name, start, code - start, ji, unwind_ops);
@@ -995,6 +998,8 @@ mono_arch_get_throw_pending_exception (MonoTrampInfo **info, gboolean aot)
        g_assert ((code - start) < kMaxCodeSize);
 
        nacl_global_codeman_validate(&start, kMaxCodeSize, &code);
+       mono_arch_flush_icache (start, code - start);
+       mono_profiler_code_buffer_new (start, code - start, MONO_PROFILER_CODE_BUFFER_EXCEPTION_HANDLING, NULL);
 
        if (info)
                *info = mono_tramp_info_create ("throw_pending_exception", start, code - start, ji, unwind_ops);
@@ -1380,6 +1385,8 @@ mono_tasklets_arch_restore (void)
        g_assert ((code - start) <= kMaxCodeSize);
 
        nacl_global_codeman_validate(&start, kMaxCodeSize, &code);
+       mono_arch_flush_icache (start, code - start);
+       mono_profiler_code_buffer_new (start, code - start, MONO_PROFILER_CODE_BUFFER_EXCEPTION_HANDLING, NULL);
 
        saved = start;
        return (MonoContinuationRestore)saved;
index 1a31eab4d025032dbed313949f1e334befc62c40..3bf75530531dd00ac9fd3aba074ea57addbb350d 100755 (executable)
@@ -7935,6 +7935,7 @@ get_delegate_invoke_impl (gboolean has_target, guint32 param_count, guint32 *cod
        }
 
        nacl_global_codeman_validate (&start, 64, &code);
+       mono_arch_flush_icache (start, code - start);
 
        if (code_len)
                *code_len = code - start;
index fc524657f89180c9f94534822fdda277da85fb10..76ff0f25e34b5e2c290f50db22d307172014d957 100644 (file)
@@ -1921,6 +1921,8 @@ code_buffer_desc (int type)
                return "monitor/lock";
        case MONO_PROFILER_CODE_BUFFER_DELEGATE_INVOKE:
                return "delegate invoke";
+       case MONO_PROFILER_CODE_BUFFER_EXCEPTION_HANDLING:
+               return "exception handling";
        default:
                return "unspecified";
        }
index 4e9851d1e3949b94156b8dc3a894588af11414c4..3f071a108798834e9b64cbc978a537336940bb8b 100644 (file)
@@ -61,6 +61,8 @@ code_buffer_desc (MonoProfilerCodeBufferType type)
                return "code_buffer_monitor";
        case MONO_PROFILER_CODE_BUFFER_DELEGATE_INVOKE:
                return "code_buffer_delegate_invoke";
+       case MONO_PROFILER_CODE_BUFFER_EXCEPTION_HANDLING:
+               return "code_buffer_exception_handling";
        default:
                return "unspecified";
        }