+void
+mono_monoctx_to_sigctx (MonoContext *mctx, void *sigctx)
+{
+#ifdef MONO_CROSS_COMPILE
+ g_assert_not_reached ();
+#else
+ memcpy (UCONTEXT_GREGS (sigctx), mctx->regs, sizeof (mgreg_t) * 31);
+ UCONTEXT_REG_PC (sigctx) = mctx->pc;
+ UCONTEXT_REG_SP (sigctx) = mctx->regs [ARMREG_SP];
+#endif
+}
+
+#elif (defined(__mips__) && !defined(MONO_CROSS_COMPILE)) || (defined(TARGET_MIPS))
+
+#include <mono/utils/mono-context.h>
+#include <mono/arch/mips/mips-codegen.h>
+
+void
+mono_sigctx_to_monoctx (void *sigctx, MonoContext *mctx)
+{
+ int i;
+
+ mctx->sc_pc = UCONTEXT_REG_PC (sigctx);
+ for (i = 0; i < 32; ++i) {
+ mctx->sc_regs[i] = UCONTEXT_GREGS (sigctx) [i];
+ mctx->sc_fpregs[i] = UCONTEXT_FPREGS (sigctx) [i];
+ }
+}
+
+void
+mono_monoctx_to_sigctx (MonoContext *mctx, void *sigctx)
+{
+ int i;
+
+ UCONTEXT_REG_PC (sigctx) = mctx->sc_pc;
+ for (i = 0; i < 32; ++i) {
+ UCONTEXT_GREGS (sigctx) [i] = mctx->sc_regs[i];
+ UCONTEXT_FPREGS (sigctx) [i] = mctx->sc_fpregs[i];
+ }
+}
+