Make mono_arch_sigctx_to_monoctx and vice versa use the code in mono-context.h.
authorZoltan Varga <vargaz@gmail.com>
Sun, 6 Nov 2011 17:48:31 +0000 (18:48 +0100)
committerZoltan Varga <vargaz@gmail.com>
Sun, 6 Nov 2011 17:48:31 +0000 (18:48 +0100)
mono/mini/exceptions-arm.c
mono/utils/mono-context.c

index cec5f34a5fb21d354229f0ab767cfef1373e0727..205318540deab1274ac6146b21e7d2558b3024e0 100644 (file)
@@ -475,36 +475,13 @@ mono_arch_find_jit_info (MonoDomain *domain, MonoJitTlsData *jit_tls,
 void
 mono_arch_sigctx_to_monoctx (void *sigctx, MonoContext *mctx)
 {
-#ifdef MONO_CROSS_COMPILE
-       g_assert_not_reached ();
-#elif BROKEN_LINUX
-       g_assert_not_reached ();
-#else
-       arm_ucontext *my_uc = sigctx;
-
-       mctx->pc = UCONTEXT_REG_PC (my_uc);
-       mctx->regs [ARMREG_SP] = UCONTEXT_REG_SP (my_uc);
-       mctx->cpsr = UCONTEXT_REG_CPSR (my_uc);
-       memcpy (&mctx->regs, &UCONTEXT_REG_R0 (my_uc), sizeof (mgreg_t) * 16);
-#endif
+       mono_sigctx_to_monoctx (sigctx, mctx);
 }
 
 void
 mono_arch_monoctx_to_sigctx (MonoContext *mctx, void *ctx)
 {
-#ifdef MONO_CROSS_COMPILE
-       g_assert_not_reached ();
-#elif BROKEN_LINUX
-       g_assert_not_reached ();
-#else
-       arm_ucontext *my_uc = ctx;
-
-       UCONTEXT_REG_PC (my_uc) = mctx->pc;
-       UCONTEXT_REG_SP (my_uc) = mctx->regs [ARMREG_FP];
-       UCONTEXT_REG_CPSR (my_uc) = mctx->cpsr;
-       /* The upper registers are not guaranteed to be valid */
-       memcpy (&UCONTEXT_REG_R0 (my_uc), &mctx->regs, sizeof (mgreg_t) * 12);
-#endif
+       mono_monoctx_to_sigctx (mctx, ctx);
 }
 
 /*
@@ -600,8 +577,6 @@ mono_arch_ip_from_context (void *sigctx)
 {
 #ifdef MONO_CROSS_COMPILE
        g_assert_not_reached ();
-#elif BROKEN_LINUX
-       g_assert_not_reached ();
 #else
        arm_ucontext *my_uc = sigctx;
        return (void*) UCONTEXT_REG_PC (my_uc);
index 516fa60c6dfb593ff23d0b8a86d3c83a2e82472e..bce20ec55f805af37471f7c2d0c7e3ca12565dd1 100644 (file)
@@ -251,13 +251,12 @@ mono_sigctx_to_monoctx (void *sigctx, MonoContext *mctx)
 {
 #ifdef MONO_CROSS_COMPILE
        g_assert_not_reached ();
-#elif BROKEN_LINUX
-       g_assert_not_reached ();
 #else
        arm_ucontext *my_uc = sigctx;
 
        mctx->pc = UCONTEXT_REG_PC (my_uc);
        mctx->regs [ARMREG_SP] = UCONTEXT_REG_SP (my_uc);
+       mctx->cpsr = UCONTEXT_REG_CPSR (my_uc);
        memcpy (&mctx->regs, &UCONTEXT_REG_R0 (my_uc), sizeof (mgreg_t) * 16);
 #endif
 }
@@ -272,6 +271,7 @@ mono_monoctx_to_sigctx (MonoContext *mctx, void *ctx)
 
        UCONTEXT_REG_PC (my_uc) = mctx->pc;
        UCONTEXT_REG_SP (my_uc) = mctx->regs [ARMREG_FP];
+       UCONTEXT_REG_CPSR (my_uc) = mctx->cpsr;
        /* The upper registers are not guaranteed to be valid */
        memcpy (&UCONTEXT_REG_R0 (my_uc), &mctx->regs, sizeof (mgreg_t) * 12);
 #endif