X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/7897fb8815dbff65907f646efb6f3ccf024e5481..638d55dcb8d944f7c74127725f1acb7b8e1449de:/src/simix/smx_context.c diff --git a/src/simix/smx_context.c b/src/simix/smx_context.c index 186b1236df..f222f62f28 100644 --- a/src/simix/smx_context.c +++ b/src/simix/smx_context.c @@ -124,7 +124,21 @@ void *SIMIX_context_stack_new(void) { void *stack; + /* FIXME: current code for stack overflow protection assumes that stacks are + * growing downward (PTH_STACKGROWTH == -1). Protected pages need to be put + * after the stack when PTH_STACKGROWTH == 1. */ + if (smx_context_guard_size > 0 && !MC_is_active()) { + +#if defined(_XBT_WIN32) || (PTH_STACKGROWTH != -1) + static int warned_once = 0; + if (!warned_once) { + XBT_WARN("Stack overflow protection is known to be broken on your system. Either you're on Windows or PTH_STACKGROWTH != -1 (current value is %d).", + PTH_STACKGROWTH); + warned_once = 1; + } +#endif + size_t size = smx_context_stack_size + smx_context_guard_size; #ifdef HAVE_MC /* Cannot use posix_memalign when HAVE_MC. Align stack by hand, and save the @@ -132,14 +146,14 @@ 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; -#elif !defined(WIN32) +#elif !defined(_XBT_WIN32) if (posix_memalign(&stack, xbt_pagesize, size) != 0) xbt_die("Failed to allocate stack."); #else - stack = _aligned_malloc(size, xbt_pagesize); + stack = _aligned_malloc(size, xbt_pagesize); #endif -#ifndef WIN32 +#ifndef _XBT_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. */