*
*
* Copyright (c) 2011 Novell, Inc (http://www.novell.com)
+ * Licensed under the MIT license. See LICENSE file in the project root for full license information.
*/
#include <mono/utils/mono-sigcontext.h>
mctx->esi = 0xDEADBEEF;
mctx->edi = 0xDEADBEEF;
mctx->eip = 0xDEADBEEF;
-#elif defined(MONO_SIGNAL_USE_SIGACTION)
+#elif MONO_CROSS_COMPILE
+ g_assert_not_reached ();
+#elif defined(MONO_SIGNAL_USE_UCONTEXT_T)
ucontext_t *ctx = (ucontext_t*)sigctx;
mctx->eax = UCONTEXT_REG_EAX (ctx);
{
#if defined(__native_client__) || defined(HOST_WATCHOS)
printf("WARNING: mono_arch_monoctx_to_sigctx() called!\n");
-#elif defined(MONO_SIGNAL_USE_SIGACTION)
+#elif MONO_CROSS_COMPILE
+ g_assert_not_reached ();
+#elif defined(MONO_SIGNAL_USE_UCONTEXT_T)
ucontext_t *ctx = (ucontext_t*)sigctx;
UCONTEXT_REG_EAX (ctx) = mctx->eax;
printf("WARNING: mono_arch_sigctx_to_monoctx() called!\n");
#endif
-#if defined(MONO_SIGNAL_USE_SIGACTION)
+#ifdef MONO_CROSS_COMPILE
+ g_assert_not_reached ();
+#elif defined(MONO_SIGNAL_USE_UCONTEXT_T)
ucontext_t *ctx = (ucontext_t*)sigctx;
mctx->gregs [AMD64_RAX] = UCONTEXT_REG_RAX (ctx);
mctx->gregs [AMD64_R14] = UCONTEXT_REG_R14 (ctx);
mctx->gregs [AMD64_R15] = UCONTEXT_REG_R15 (ctx);
mctx->gregs [AMD64_RIP] = UCONTEXT_REG_RIP (ctx);
+
+#ifdef UCONTEXT_REG_XMM
+ mctx->fregs [0] = UCONTEXT_REG_XMM0 (ctx);
+ mctx->fregs [1] = UCONTEXT_REG_XMM1 (ctx);
+ mctx->fregs [2] = UCONTEXT_REG_XMM2 (ctx);
+ mctx->fregs [3] = UCONTEXT_REG_XMM3 (ctx);
+ mctx->fregs [4] = UCONTEXT_REG_XMM4 (ctx);
+ mctx->fregs [5] = UCONTEXT_REG_XMM5 (ctx);
+ mctx->fregs [6] = UCONTEXT_REG_XMM6 (ctx);
+ mctx->fregs [7] = UCONTEXT_REG_XMM7 (ctx);
+ mctx->fregs [8] = UCONTEXT_REG_XMM8 (ctx);
+ mctx->fregs [9] = UCONTEXT_REG_XMM9 (ctx);
+ mctx->fregs [10] = UCONTEXT_REG_XMM10 (ctx);
+ mctx->fregs [11] = UCONTEXT_REG_XMM11 (ctx);
+ mctx->fregs [12] = UCONTEXT_REG_XMM12 (ctx);
+ mctx->fregs [13] = UCONTEXT_REG_XMM13 (ctx);
+ mctx->fregs [14] = UCONTEXT_REG_XMM14 (ctx);
+ mctx->fregs [15] = UCONTEXT_REG_XMM15 (ctx);
+#endif
+
#elif defined(HOST_WIN32)
CONTEXT *context = (CONTEXT*)sigctx;
mctx->gregs [AMD64_R14] = context->R14;
mctx->gregs [AMD64_R15] = context->R15;
#else
- MonoContext *ctx = (MonoContext *)sigctx;
-
- mctx->gregs [AMD64_RAX] = ctx->gregs [AMD64_RAX];
- mctx->gregs [AMD64_RBX] = ctx->gregs [AMD64_RBX];
- mctx->gregs [AMD64_RCX] = ctx->gregs [AMD64_RCX];
- mctx->gregs [AMD64_RDX] = ctx->gregs [AMD64_RDX];
- mctx->gregs [AMD64_RBP] = ctx->gregs [AMD64_RBP];
- mctx->gregs [AMD64_RSP] = ctx->gregs [AMD64_RSP];
- mctx->gregs [AMD64_RSI] = ctx->gregs [AMD64_RSI];
- mctx->gregs [AMD64_RDI] = ctx->gregs [AMD64_RDI];
- mctx->gregs [AMD64_R8] = ctx->gregs [AMD64_R8];
- mctx->gregs [AMD64_R9] = ctx->gregs [AMD64_R9];
- mctx->gregs [AMD64_R10] = ctx->gregs [AMD64_R10];
- mctx->gregs [AMD64_R11] = ctx->gregs [AMD64_R11];
- mctx->gregs [AMD64_R12] = ctx->gregs [AMD64_R12];
- mctx->gregs [AMD64_R13] = ctx->gregs [AMD64_R13];
- mctx->gregs [AMD64_R14] = ctx->gregs [AMD64_R14];
- mctx->gregs [AMD64_R15] = ctx->gregs [AMD64_R15];
- mctx->gregs [AMD64_RIP] = ctx->gregs [AMD64_RIP];
+ g_assert_not_reached ();
#endif
}
printf("WARNING: mono_arch_monoctx_to_sigctx() called!\n");
#endif
-#if defined(MONO_SIGNAL_USE_SIGACTION)
+#ifdef MONO_CROSS_COMPILE
+ g_assert_not_reached ();
+#elif defined(MONO_SIGNAL_USE_UCONTEXT_T)
ucontext_t *ctx = (ucontext_t*)sigctx;
UCONTEXT_REG_RAX (ctx) = mctx->gregs [AMD64_RAX];
UCONTEXT_REG_R14 (ctx) = mctx->gregs [AMD64_R14];
UCONTEXT_REG_R15 (ctx) = mctx->gregs [AMD64_R15];
UCONTEXT_REG_RIP (ctx) = mctx->gregs [AMD64_RIP];
+
+#ifdef UCONTEXT_REG_XMM
+ UCONTEXT_REG_XMM0 (ctx) = mctx->fregs [0];
+ UCONTEXT_REG_XMM1 (ctx) = mctx->fregs [1];
+ UCONTEXT_REG_XMM2 (ctx) = mctx->fregs [2];
+ UCONTEXT_REG_XMM3 (ctx) = mctx->fregs [3];
+ UCONTEXT_REG_XMM4 (ctx) = mctx->fregs [4];
+ UCONTEXT_REG_XMM5 (ctx) = mctx->fregs [5];
+ UCONTEXT_REG_XMM6 (ctx) = mctx->fregs [6];
+ UCONTEXT_REG_XMM7 (ctx) = mctx->fregs [7];
+ UCONTEXT_REG_XMM8 (ctx) = mctx->fregs [8];
+ UCONTEXT_REG_XMM9 (ctx) = mctx->fregs [9];
+ UCONTEXT_REG_XMM10 (ctx) = mctx->fregs [10];
+ UCONTEXT_REG_XMM11 (ctx) = mctx->fregs [11];
+ UCONTEXT_REG_XMM12 (ctx) = mctx->fregs [12];
+ UCONTEXT_REG_XMM13 (ctx) = mctx->fregs [13];
+ UCONTEXT_REG_XMM14 (ctx) = mctx->fregs [14];
+ UCONTEXT_REG_XMM15 (ctx) = mctx->fregs [15];
+#endif
+
#elif defined(HOST_WIN32)
CONTEXT *context = (CONTEXT*)sigctx;
context->R14 = mctx->gregs [AMD64_R14];
context->R15 = mctx->gregs [AMD64_R15];
#else
- MonoContext *ctx = (MonoContext *)sigctx;
-
- ctx->gregs [AMD64_RAX] = mctx->gregs [AMD64_RAX];
- ctx->gregs [AMD64_RBX] = mctx->gregs [AMD64_RBX];
- ctx->gregs [AMD64_RCX] = mctx->gregs [AMD64_RCX];
- ctx->gregs [AMD64_RDX] = mctx->gregs [AMD64_RDX];
- ctx->gregs [AMD64_RBP] = mctx->gregs [AMD64_RBP];
- ctx->gregs [AMD64_RSP] = mctx->gregs [AMD64_RSP];
- ctx->gregs [AMD64_RSI] = mctx->gregs [AMD64_RSI];
- ctx->gregs [AMD64_RDI] = mctx->gregs [AMD64_RDI];
- ctx->gregs [AMD64_R8] = mctx->gregs [AMD64_R8];
- ctx->gregs [AMD64_R9] = mctx->gregs [AMD64_R9];
- ctx->gregs [AMD64_R10] = mctx->gregs [AMD64_R10];
- ctx->gregs [AMD64_R11] = mctx->gregs [AMD64_R11];
- ctx->gregs [AMD64_R12] = mctx->gregs [AMD64_R12];
- ctx->gregs [AMD64_R13] = mctx->gregs [AMD64_R13];
- ctx->gregs [AMD64_R14] = mctx->gregs [AMD64_R14];
- ctx->gregs [AMD64_R15] = mctx->gregs [AMD64_R15];
- ctx->gregs [AMD64_RIP] = mctx->gregs [AMD64_RIP];
+ g_assert_not_reached ();
#endif
}