+void
+mono_arch_sigctx_to_monoctx (void *sigctx, MonoContext *mctx)
+{
+#if BROKEN_LINUX
+ struct ucontext *uc = sigctx;
+
+ mctx->eip = uc->uc_mcontext.gregs [ARMREG_PC];
+ mctx->ebp = uc->uc_mcontext.gregs [ARMREG_SP];
+ memcpy (&mctx->regs, &uc->uc_mcontext.gregs [ARMREG_R4], sizeof (gulong) * 8);
+ /* memcpy (&mctx->fregs, &uc->uc_mcontext.uc_regs->fpregs.fpregs [14], sizeof (double) * MONO_SAVED_FREGS);*/
+#else
+ my_ucontext *my_uc = sigctx;
+
+ mctx->eip = my_uc->sig_ctx.arm_pc;
+ mctx->ebp = my_uc->sig_ctx.arm_sp;
+ memcpy (&mctx->regs, &my_uc->sig_ctx.arm_r4, sizeof (gulong) * 8);
+#endif
+}
+
+void
+mono_arch_monoctx_to_sigctx (MonoContext *mctx, void *ctx)
+{
+#if BROKEN_LINUX
+ struct ucontext *uc = ctx;
+
+ uc->uc_mcontext.gregs [ARMREG_PC] = mctx->eip;
+ uc->uc_mcontext.gregs [ARMREG_SP] = mctx->ebp;
+ memcpy (&uc->uc_mcontext.gregs [ARMREG_R4], &mctx->regs, sizeof (gulong) * 8);
+ /* memcpy (&uc->uc_mcontext.uc_regs->fpregs.fpregs [14], &mctx->fregs, sizeof (double) * MONO_SAVED_FREGS);*/
+#else
+ my_ucontext *my_uc = ctx;
+
+ my_uc->sig_ctx.arm_pc = mctx->eip;
+ my_uc->sig_ctx.arm_sp = mctx->ebp;
+ memcpy (&my_uc->sig_ctx.arm_r4, &mctx->regs, sizeof (gulong) * 8);
+#endif
+}
+