Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
disable segv handler and guards on windows platforms
authorAugustin Degomme <degomme@idpann.imag.fr>
Fri, 4 Apr 2014 12:17:36 +0000 (14:17 +0200)
committerAugustin Degomme <degomme@idpann.imag.fr>
Fri, 4 Apr 2014 12:17:36 +0000 (14:17 +0200)
src/simix/smx_context.c
src/simix/smx_context_thread.c
src/simix/smx_global.c
src/xbt/xbt_os_thread.c

index 0bfad29..186b123 100644 (file)
 #include "simgrid/sg_config.h"
 #include "internal_config.h"
 #include "simgrid/modelchecker.h"
+
+
+#ifdef _WIN32
+#include <windows.h>
+#else
 #include <sys/mman.h>
+#endif
+
+#ifdef __MINGW32__ 
+#define _aligned_malloc __mingw_aligned_malloc 
+#define _aligned_free  __mingw_aligned_free 
+#endif //MINGW
+
+
 
 #ifdef HAVE_VALGRIND_VALGRIND_H
 # include <valgrind/valgrind.h>
@@ -119,14 +132,19 @@ void *SIMIX_context_stack_new(void)
     char *alloc = xbt_malloc0(size + xbt_pagesize);
     stack = alloc - ((uintptr_t)alloc & (xbt_pagesize - 1)) + xbt_pagesize;
     *((void **)stack - 1) = alloc;
-#else
+#elif !defined(WIN32)
     if (posix_memalign(&stack, xbt_pagesize, size) != 0)
       xbt_die("Failed to allocate stack.");
+#else
+       stack = _aligned_malloc(size, xbt_pagesize);
 #endif
+
+#ifndef WIN32
     if (mprotect(stack, smx_context_guard_size, PROT_NONE) == -1) {
       XBT_WARN("Failed to protect stack: %s", strerror(errno));
       /* That's not fatal, pursue anyway. */
     }
+#endif
     stack = (char *)stack + smx_context_guard_size;
   } else {
     stack = xbt_malloc0(smx_context_stack_size);
@@ -154,6 +172,7 @@ void SIMIX_context_stack_delete(void *stack)
   VALGRIND_STACK_DEREGISTER(valgrind_stack_id);
 #endif
 
+#ifndef WIN32
   if (smx_context_guard_size > 0 && !MC_is_active()) {
     stack = (char *)stack - smx_context_guard_size;
     if (mprotect(stack, smx_context_guard_size,
@@ -166,6 +185,8 @@ void SIMIX_context_stack_delete(void *stack)
     stack = *((void **)stack - 1);
 #endif
   }
+#endif
+
   xbt_free(stack);
 }
 
index ee35dfd..fbde818 100644 (file)
@@ -152,14 +152,14 @@ static void smx_ctx_thread_stop(smx_context_t pcontext)
 static void *smx_ctx_thread_wrapper(void *param)
 {
   smx_ctx_thread_t context = (smx_ctx_thread_t) param;
-
+#ifndef WIN32
   /* Install alternate signal stack, for SIGSEGV handler. */
   stack_t stack;
   stack.ss_sp = sigsegv_stack;
   stack.ss_size = sizeof sigsegv_stack;
   stack.ss_flags = 0;
   sigaltstack(&stack, NULL);
-
+#endif
   /* Tell the maestro we are starting, and wait for its green light */
   xbt_os_sem_release(context->end);
   xbt_os_sem_acquire(context->begin);
index 71a85a4..a169f8d 100644 (file)
@@ -40,6 +40,7 @@ static void _XBT_CALL inthandler(int ignored)
   exit(1);
 }
 
+#ifndef WIN32
 static void _XBT_CALL segvhandler(int signum, siginfo_t *siginfo, void *context)
 {
   if (siginfo->si_signo == SIGSEGV && siginfo->si_code == SEGV_ACCERR) {
@@ -103,6 +104,7 @@ static void install_segvhandler(void)
   }
 }
 
+#endif
 /********************************* SIMIX **************************************/
 
 XBT_INLINE double SIMIX_timer_next(void)
@@ -160,9 +162,10 @@ void SIMIX_global_init(int *argc, char **argv)
     /* Prepare to display some more info when dying on Ctrl-C pressing */
     signal(SIGINT, inthandler);
 
+#ifndef WIN32
     /* Install SEGV handler */
     install_segvhandler();
-
+#endif
     /* register a function to be called by SURF after the environment creation */
     sg_platf_init();
     sg_platf_postparse_add_cb(SIMIX_post_create_environment);
index f295495..c9dd691 100644 (file)
@@ -232,10 +232,14 @@ void xbt_os_thread_setstacksize(int stack_size)
 
 void xbt_os_thread_setguardsize(int guard_size)
 {
+#ifdef WIN32
+  THROW_UNIMPLEMENTED; //pthread_attr_setguardsize is not implemented in pthread.h on windows
+#else
   size_t sz = guard_size;
   int res = pthread_attr_setguardsize(&thread_attr, sz);
   if (res)
     XBT_WARN("pthread_attr_setguardsize failed (%d) for size: %zd", res, sz);
+#endif
 }
 
 const char *xbt_os_thread_name(xbt_os_thread_t t)