+++ /dev/null
-dnl #
-dnl # Check if the glibc NPTL threading implementation includes the guard area
-dnl # within the stack size allocation, rather than allocating extra space at
-dnl # the end of the stack, as POSIX.1 requires.
-dnl #
-AC_DEFUN([ZFS_AC_CONFIG_USER_STACK_GUARD], [
-
- AC_MSG_CHECKING([whether pthread stack includes guard])
-
- saved_CFLAGS="$CFLAGS"
- CFLAGS="-fstack-check"
- saved_LDFLAGS="$LDFLAGS"
- LDFLAGS="-lpthread"
-
- AC_RUN_IFELSE([AC_LANG_PROGRAM(
- [
- #include <pthread.h>
- #include <sys/resource.h>
- #include <unistd.h>
- #include <bits/local_lim.h>
-
- #define PAGESIZE (sysconf(_SC_PAGESIZE))
- #define STACK_SIZE 8192
- #define BUFSIZE 4096
-
- void * func(void *arg)
- {
- char buf[[BUFSIZE]];
- }
- ],
- [
- pthread_t tid;
- pthread_attr_t attr;
- struct rlimit l;
-
- l.rlim_cur = 0;
- l.rlim_max = 0;
- setrlimit(RLIMIT_CORE, &l);
- pthread_attr_init(&attr);
- pthread_attr_setstacksize(&attr, PTHREAD_STACK_MIN + STACK_SIZE);
- pthread_attr_setguardsize(&attr, PAGESIZE);
- pthread_create(&tid, &attr, func, NULL);
- pthread_join(tid, NULL);
- ])],
- [
- AC_MSG_RESULT([no])
- ],
- [
- AC_DEFINE([NPTL_GUARD_WITHIN_STACK], 1,
- [Define to 1 if NPTL threading implementation includes
- guard area in stack allocation])
- AC_MSG_RESULT([yes])
- ])
- CFLAGS="$saved_CFLAGS"
- LDFLAGS="$saved_LDFLAGS"
-])
#define STACK_SIZE 24576 /* Solaris */
#endif
-#ifdef NPTL_GUARD_WITHIN_STACK
-#define EXTRA_GUARD_BYTES PAGESIZE
-#else
-#define EXTRA_GUARD_BYTES 0
-#endif
-
/* in libzpool, p0 exists only to have its address taken */
typedef struct proc {
uintptr_t this_is_never_used_dont_dereference_it;
* on Linux.
*/
- stack = PTHREAD_STACK_MIN + MAX(stksize, STACK_SIZE) * 4 +
- EXTRA_GUARD_BYTES;
+ stack = PTHREAD_STACK_MIN + MAX(stksize, STACK_SIZE) * 4;
VERIFY3S(pthread_attr_init(&attr), ==, 0);
VERIFY3S(pthread_attr_setstacksize(&attr, stack), ==, 0);