2010-03-01 Zoltan Varga <vargaz@gmail.com>
[mono.git] / mono / mini / exceptions-sparc.c
index 184d28bdcc14d348b5eae91a48df571072d72213..1f34788a5c362ca4afe22d924036a69e9dc61ded 100644 (file)
@@ -59,6 +59,8 @@ mono_arch_get_restore_context (void)
 
        g_assert ((code - start) < 32);
 
+       mono_arch_flush_icache ((guint8*)start, (guint8*)code - (guint8*)start);
+
        inited = 1;
 
        return start;
@@ -146,6 +148,8 @@ mono_arch_get_call_filter (void)
 
        g_assert ((code - start) < 64);
 
+       mono_arch_flush_icache ((guint8*)start, (guint8*)code - (guint8*)start);
+
        inited = 1;
 
        return start;
@@ -197,6 +201,8 @@ get_throw_exception (gboolean rethrow)
 
        g_assert ((code - start) <= 16);
 
+       mono_arch_flush_icache ((guint8*)start, (guint8*)code - (guint8*)start);
+
        return start;
 }
 
@@ -239,57 +245,6 @@ mono_arch_get_rethrow_exception (void)
        return start;
 }
 
-/**
- * mono_arch_get_throw_exception_by_name:
- *
- * Returns a function pointer which can be used to raise 
- * corlib exceptions. The returned function has the following 
- * signature: void (*func) (char *exc_name, gpointer ip); 
- */
-gpointer 
-mono_arch_get_throw_exception_by_name (void)
-{
-       static guint32 *start;
-       static int inited = 0;
-       guint32 *code;
-       int reg;
-
-       if (inited)
-               return start;
-
-       inited = 1;
-       code = start = mono_global_codeman_reserve (64 * sizeof (guint32));
-
-#ifdef SPARCV9
-       reg = sparc_g4;
-#else
-       reg = sparc_g1;
-#endif
-
-       sparc_save_imm (code, sparc_sp, -160, sparc_sp);
-
-       sparc_mov_reg_reg (code, sparc_i0, sparc_o2);
-       sparc_set (code, mono_defaults.corlib, sparc_o0);
-       sparc_set (code, "System", sparc_o1);
-       sparc_set (code, mono_exception_from_name, sparc_o7);
-       sparc_jmpl (code, sparc_o7, sparc_g0, sparc_callsite);
-       sparc_nop (code);
-
-       /* Return to the caller, so exception handling does not see this frame */
-       sparc_restore (code, sparc_o0, sparc_g0, sparc_o0);
-
-       /* Put original return address into %o7 */
-       sparc_mov_reg_reg (code, sparc_o1, sparc_o7);
-       sparc_set (code, mono_arch_get_throw_exception (), reg);
-       /* Use a jmp instead of a call so o7 is preserved */
-       sparc_jmpl_imm (code, reg, 0, sparc_g0);
-       sparc_nop (code);
-
-       g_assert ((code - start) < 32);
-
-       return start;
-}
-
 /**
  * mono_arch_get_throw_corlib_exception:
  *
@@ -344,6 +299,8 @@ mono_arch_get_throw_corlib_exception (void)
 
        g_assert ((code - start) < 32);
 
+       mono_arch_flush_icache ((guint8*)start, (guint8*)code - (guint8*)start);
+
        return start;
 }
 
@@ -358,8 +315,7 @@ mono_arch_get_throw_corlib_exception (void)
  */
 MonoJitInfo *
 mono_arch_find_jit_info (MonoDomain *domain, MonoJitTlsData *jit_tls, MonoJitInfo *res, MonoJitInfo *prev_ji, MonoContext *ctx, 
-                        MonoContext *new_ctx, char **trace, MonoLMF **lmf, int *native_offset,
-                        gboolean *managed)
+                        MonoContext *new_ctx, MonoLMF **lmf, gboolean *managed)
 {
        MonoJitInfo *ji;
        gpointer ip = MONO_CONTEXT_GET_IP (ctx);
@@ -369,7 +325,7 @@ mono_arch_find_jit_info (MonoDomain *domain, MonoJitTlsData *jit_tls, MonoJitInf
        if (prev_ji && (ip > prev_ji->code_start && ((guint8*)ip < ((guint8*)prev_ji->code_start) + prev_ji->code_size)))
                ji = prev_ji;
        else
-               ji = mono_jit_info_table_find (domain, ip);
+               ji = mini_jit_info_table_find (domain, ip, NULL);
 
        if (managed)
                *managed = FALSE;
@@ -403,9 +359,9 @@ mono_arch_find_jit_info (MonoDomain *domain, MonoJitTlsData *jit_tls, MonoJitInf
                if (!(*lmf)->method)
                        return (gpointer)-1;
 
-               if ((ji = mono_jit_info_table_find (domain, (gpointer)(*lmf)->ip))) {
+               if ((ji = mini_jit_info_table_find (domain, (gpointer)(*lmf)->ip, NULL))) {
                } else {
-                       memset (res, 0, sizeof (MonoJitInfo));
+                       memset (res, 0, MONO_SIZEOF_JIT_INFO);
                        res->method = (*lmf)->method;
                }