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 #include #include #include #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" ])