Merge pull request #1668 from alexanderkyte/bug1856
[mono.git] / mono / mini / exceptions-s390x.c
index 8ff629876f582e686fa132793a601db2343c2dbc..ac1d0f2c921c6c8003529246f76a8a271ba77795 100644 (file)
@@ -210,6 +210,9 @@ mono_arch_get_call_filter (MonoTrampInfo **info, gboolean aot)
 
        g_assert ((code - start) < SZ_THROW); 
 
+       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,
@@ -256,8 +259,10 @@ throw_exception (MonoObject *exc, unsigned long ip, unsigned long sp,
        
        if (mono_object_isinst (exc, mono_defaults.exception_class)) {
                MonoException *mono_ex = (MonoException*)exc;
-               if (!rethrow)
+               if (!rethrow) {
                        mono_ex->stack_trace = NULL;
+                       mono_ex->trace_ips = NULL;
+               }
        }
 //     mono_arch_handle_exception (&ctx, exc, FALSE);
        mono_handle_exception (&ctx, exc);
@@ -357,10 +362,13 @@ mono_arch_get_throw_exception_generic (int size, MonoTrampInfo **info,
        s390_break (code);
        g_assert ((code - start) < size);
 
+       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 (corlib ? "throw_corlib_exception" 
-                                                                      : (rethrow ? "rethrow_exception" 
-                                                                      : "throw_exception"), 
+                                                      : (rethrow ? "rethrow_exception" 
+                                                      : "throw_exception"), 
                                                start, code - start, ji, unwind_ops);
 
        return start;