Revert "Merge branch 'master' of https://github.com/mono/mono"
[mono.git] / mono / mini / exceptions-mips.c
index 4708f867f196a145bd2d6e45d902828e6cc8fc10..abfe26ce30021bdf7b6fa949ad21c3cff9180236 100644 (file)
@@ -16,7 +16,6 @@
 #include <glib.h>
 #include <signal.h>
 #include <string.h>
-#include <ucontext.h>
 
 #include <mono/arch/mips/mips-codegen.h>
 #include <mono/metadata/appdomain.h>
@@ -175,7 +174,6 @@ mono_arch_get_call_filter (MonoTrampInfo **info, gboolean aot)
 static void
 throw_exception (MonoObject *exc, unsigned long eip, unsigned long esp, gboolean rethrow)
 {
-       static void (*restore_context) (MonoContext *);
        MonoContext ctx;
 
 #ifdef DEBUG_EXCEPTIONS
@@ -183,9 +181,6 @@ throw_exception (MonoObject *exc, unsigned long eip, unsigned long esp, gboolean
                 exc, (void *)eip, (void *) esp, rethrow);
 #endif
 
-       if (!restore_context)
-               restore_context = mono_get_restore_context ();
-
        /* adjust eip so that it point into the call instruction */
        eip -= 8;
 
@@ -208,7 +203,7 @@ throw_exception (MonoObject *exc, unsigned long eip, unsigned long esp, gboolean
                 (void *) ctx.sc_pc, (void *) ctx.sc_regs[mips_sp],
                 (void *) ctx.sc_regs[mips_fp], &ctx);
 #endif
-       restore_context (&ctx);
+       mono_restore_context (&ctx);
 
        g_assert_not_reached ();
 }
@@ -411,10 +406,7 @@ mono_arch_find_jit_info (MonoDomain *domain, MonoJitTlsData *jit_tls,
 
                frame->type = FRAME_TYPE_MANAGED;
 
-               if (ji->from_aot)
-                       unwind_info = mono_aot_get_unwind_info (ji, &unwind_info_len);
-               else
-                       unwind_info = mono_get_cached_unwind_info (ji->used_regs, &unwind_info_len);
+               unwind_info = mono_jinfo_get_unwind_info (ji, &unwind_info_len);
 
                for (i = 0; i < MONO_MAX_IREGS; ++i)
                        regs [i] = new_ctx->sc_regs [i];
@@ -494,34 +486,19 @@ mono_arch_find_jit_info (MonoDomain *domain, MonoJitTlsData *jit_tls,
 void
 mono_arch_sigctx_to_monoctx (void *sigctx, MonoContext *mctx)
 {
-       int i;
-       struct sigcontext *ctx = (struct sigcontext *)sigctx;
-
-       mctx->sc_pc = ctx->sc_pc;
-       for (i = 0; i < 32; ++i) {
-               mctx->sc_regs[i] = ctx->sc_regs[i];
-               mctx->sc_fpregs[i] = ctx->sc_fpregs[i];
-       }
+       mono_sigctx_to_monoctx (sigctx, mctx);
 }
 
 void
 mono_arch_monoctx_to_sigctx (MonoContext *mctx, void *sigctx)
 {
-       int i;
-       struct sigcontext *ctx = (struct sigcontext *)sigctx;
-
-       ctx->sc_pc = mctx->sc_pc;
-       for (i = 0; i < 32; ++i) {
-               ctx->sc_regs[i] = mctx->sc_regs[i];
-               ctx->sc_fpregs[i] = mctx->sc_fpregs[i];
-       }
-}      
+       mono_monoctx_to_sigctx (mctx, sigctx);
+}
 
 gpointer
 mono_arch_ip_from_context (void *sigctx)
 {
-       struct sigcontext *ctx = (struct sigcontext *)sigctx;
-       return (gpointer)(guint32)ctx->sc_pc;
+       return (gpointer)(gsize)UCONTEXT_REG_PC (sigctx);
 }
 
 /*
@@ -534,16 +511,12 @@ handle_signal_exception (gpointer obj)
 {
        MonoJitTlsData *jit_tls = mono_native_tls_get_value (mono_jit_tls_id);
        MonoContext ctx;
-       static void (*restore_context) (MonoContext *);
-
-       if (!restore_context)
-               restore_context = mono_get_restore_context ();
 
        memcpy (&ctx, &jit_tls->ex_ctx, sizeof (MonoContext));
 
        mono_handle_exception (&ctx, obj);
 
-       restore_context (&ctx);
+       mono_restore_context (&ctx);
 }
 
 /*