freebsd-dev/config/user-nptl_guard_within_stack.m4
Prakash Surya e89236fd28 In autoconf v2.68, AC_LANG_PROGRAM must be quoted
This change updates the AC_LANG_PROGRAM autoconf macro invocations to be
wrapped in quotes. As of autoconf version 2.68, the quotes are necessary
to prevent warnings from appearing. Specifically, the autoconf v2.68
Forward Porting Notes specifies:

    It is important to note that you need to ensure that the call to
    AC_LANG_SOURCE is quoted and not expanded, otherwise that will
    cause the warning to appear nonetheless.

Finally, because of the additional quoting we can drop the extra
quotas used by the ZFS_AC_CONFIG_USER_STACK_GUARD autoconf check.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #464
2011-11-28 11:16:33 -08:00

57 lines
1.3 KiB
Plaintext

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