X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Futils%2Fmono-context.c;h=bc0286485fc008a9d5d7cdf3ba8e2dde36e92a80;hb=19f49f93f9ec66cfd54b458796c3b0800d6fb9c3;hp=81f3ca84ec30ae4da29072e8b9db66d8beb0a4d4;hpb=f37e86ff58d7b5a47484e60aded45bf8b98ae918;p=mono.git diff --git a/mono/utils/mono-context.c b/mono/utils/mono-context.c index 81f3ca84ec3..bc0286485fc 100644 --- a/mono/utils/mono-context.c +++ b/mono/utils/mono-context.c @@ -288,6 +288,38 @@ mono_monoctx_to_sigctx (MonoContext *mctx, void *ctx) #endif } +#elif (defined(__aarch64__) && !defined(MONO_CROSS_COMPILE)) || (defined(TARGET_ARM64)) + +#include + +void +mono_sigctx_to_monoctx (void *sigctx, MonoContext *mctx) +{ +#ifdef MONO_CROSS_COMPILE + g_assert_not_reached (); +#else + memcpy (mctx->regs, UCONTEXT_GREGS (sigctx), sizeof (mgreg_t) * 31); + mctx->pc = UCONTEXT_REG_PC (sigctx); + mctx->regs [ARMREG_SP] = UCONTEXT_REG_SP (sigctx); + /* + * We don't handle fp regs, this is not currrently a + * problem, since we don't allocate them globally. + */ +#endif +} + +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