1dnl ---------------------------------------------------------------------- 2dnl This whole bit snagged from libgomp. 3 4dnl 5dnl GCC_LINUX_FUTEX 6dnl (SHELL-CODE_HANDLER) 7dnl 8AC_DEFUN([GCC_LINUX_FUTEX],[dnl 9GCC_ENABLE(linux-futex,default, ,[use the Linux futex system call], 10 permit yes|no|default) 11case "$target" in 12 *-linux* | *-uclinux*) 13 case "$enable_linux_futex" in 14 default) 15 # If headers don't have gettid/futex syscalls definition, then 16 # default to no, otherwise there will be compile time failures. 17 # Otherwise, default to yes. If we don't detect we are 18 # compiled/linked against NPTL and not cross-compiling, check 19 # if programs are run by default against NPTL and if not, issue 20 # a warning. 21 enable_linux_futex=no 22 AC_LINK_IFELSE( 23 [AC_LANG_PROGRAM( 24 [#include <sys/syscall.h> 25 #include <unistd.h> 26 int lk;], 27 [syscall (SYS_gettid); syscall (SYS_futex, &lk, 0, 0, 0);])], 28 [save_LIBS="$LIBS" 29 LIBS="-lpthread $LIBS" 30 AC_LINK_IFELSE( 31 [AC_LANG_PROGRAM( 32 [#ifndef _GNU_SOURCE 33 #define _GNU_SOURCE 1 34 #endif 35 #include <pthread.h> 36 pthread_t th; void *status;], 37 [pthread_tryjoin_np (th, &status);])],[enable_linux_futex=yes], 38 [if test x$cross_compiling = xno; then 39 if getconf GNU_LIBPTHREAD_VERSION 2>/dev/null \ 40 | LC_ALL=C grep -i NPTL > /dev/null 2>/dev/null; then :; else 41 AC_MSG_WARN([The kernel might not support futex or gettid syscalls. 42If so, please configure with --disable-linux-futex]) 43 fi 44 fi 45 enable_linux_futex=yes]) 46 LIBS="$save_LIBS"]) 47 ;; 48 yes) 49 AC_LINK_IFELSE( 50 [AC_LANG_PROGRAM( 51 [#include <sys/syscall.h> 52 #include <unistd.h> 53 int lk;], 54 [syscall (SYS_gettid); syscall (SYS_futex, &lk, 0, 0, 0);])],[], 55 [AC_MSG_ERROR([SYS_gettid and SYS_futex required for --enable-linux-futex])]) 56 ;; 57 esac 58 ;; 59 *) 60 enable_linux_futex=no 61 ;; 62esac 63if test x$enable_linux_futex = xyes; then 64 $1 65fi 66]) 67