Clarify when ucontext_t is available
authorAndi McClure <andi.mcclure@xamarin.com>
Fri, 15 Jan 2016 19:31:12 +0000 (14:31 -0500)
committerAndi McClure <andi.mcclure@xamarin.com>
Fri, 15 Jan 2016 19:31:12 +0000 (14:31 -0500)
mono-context currently uses a mix of MONO_SIGNAL_USE_SIGACTION and
UCONTEXT_REG_RAX #ifs to determine whether ucontext_t is available.
UCONTEXT_REG_RAX is unreliable, and MONO_SIGNAL_USE_SIGACTION is
misnamed because it is nowhere used to gate use of sigaction.
Standardize on a new MONO_SIGNAL_USE_UCONTEXT_T, replacing SIGACTION.

mono/utils/mono-context.c
mono/utils/mono-context.h

index cd6c4b2365ed268ae18949ecd92fd72974140d5d..81aff561ccab6650b420e92d2613a423e519b243 100644 (file)
@@ -47,7 +47,7 @@ mono_sigctx_to_monoctx (void *sigctx, MonoContext *mctx)
        mctx->eip = 0xDEADBEEF;
 #elif MONO_CROSS_COMPILE
        g_assert_not_reached ();
-#elif defined(MONO_SIGNAL_USE_SIGACTION)
+#elif defined(MONO_SIGNAL_USE_UCONTEXT_T)
        ucontext_t *ctx = (ucontext_t*)sigctx;
        
        mctx->eax = UCONTEXT_REG_EAX (ctx);
@@ -93,7 +93,7 @@ mono_monoctx_to_sigctx (MonoContext *mctx, void *sigctx)
        printf("WARNING: mono_arch_monoctx_to_sigctx() called!\n");
 #elif MONO_CROSS_COMPILE
        g_assert_not_reached ();
-#elif defined(MONO_SIGNAL_USE_SIGACTION)
+#elif defined(MONO_SIGNAL_USE_UCONTEXT_T)
        ucontext_t *ctx = (ucontext_t*)sigctx;
 
        UCONTEXT_REG_EAX (ctx) = mctx->eax;
@@ -149,7 +149,7 @@ mono_sigctx_to_monoctx (void *sigctx, MonoContext *mctx)
 
 #ifdef MONO_CROSS_COMPILE
        g_assert_not_reached ();
-#elif defined(UCONTEXT_REG_RAX)
+#elif defined(MONO_SIGNAL_USE_UCONTEXT_T)
        ucontext_t *ctx = (ucontext_t*)sigctx;
 
        mctx->gregs [AMD64_RAX] = UCONTEXT_REG_RAX (ctx);
@@ -203,7 +203,7 @@ mono_monoctx_to_sigctx (MonoContext *mctx, void *sigctx)
 
 #ifdef MONO_CROSS_COMPILE
        g_assert_not_reached ();
-#elif defined(UCONTEXT_REG_RAX)
+#elif defined(MONO_SIGNAL_USE_UCONTEXT_T)
        ucontext_t *ctx = (ucontext_t*)sigctx;
 
        UCONTEXT_REG_RAX (ctx) = mctx->gregs [AMD64_RAX];
index 84bfc028783e1de259a255e87512244c1d3cd694..2661e657636dde188bb897b51a5284f77f254c3f 100644 (file)
 #if defined( __linux__) || defined(__sun) || defined(__APPLE__) || defined(__NetBSD__) || \
        defined(__FreeBSD__) || defined(__OpenBSD__)
 #ifdef HAVE_SIGACTION
-#define MONO_SIGNAL_USE_SIGACTION 1
+#define MONO_SIGNAL_USE_UCONTEXT_T 1
 #endif
 #endif
 
 #if defined(__native_client__)
-#undef MONO_SIGNAL_USE_SIGACTION
+#undef MONO_SIGNAL_USE_UCONTEXT_T
 #endif
 
 #ifdef HOST_WIN32
@@ -152,7 +152,7 @@ typedef struct {
 #if !defined( HOST_WIN32 ) && !defined(__native_client__) && !defined(__native_client_codegen__)
 
 #ifdef HAVE_SIGACTION
-#define MONO_SIGNAL_USE_SIGACTION 1
+#define MONO_SIGNAL_USE_UCONTEXT_T 1
 #endif
 
 #endif