1 dnl ---------------------------------------------------------------------- 2 dnl This whole bit snagged from libgomp. 3 4 dnl 5 dnl GCC_LINUX_FUTEX 6 dnl (SHELL-CODE_HANDLER) 7 dnl 8 AC_DEFUN([GCC_LINUX_FUTEX],[dnl 9 GCC_ENABLE(linux-futex,default, ,[use the Linux futex system call], 10 permit yes|no|default) 11 case "$target" in 12 *-linux*) 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 int lk;], 26 [syscall (SYS_gettid); syscall (SYS_futex, &lk, 0, 0, 0);])], 27 [save_LIBS="$LIBS" 28 LIBS="-lpthread $LIBS" 29 AC_LINK_IFELSE( 30 [AC_LANG_PROGRAM( 31 [#ifndef _GNU_SOURCE 32 #define _GNU_SOURCE 1 33 #endif 34 #include <pthread.h> 35 pthread_t th; void *status;], 36 [pthread_tryjoin_np (th, &status);])],[enable_linux_futex=yes], 37 [if test x$cross_compiling = xno; then 38 if getconf GNU_LIBPTHREAD_VERSION 2>/dev/null \ 39 | LC_ALL=C grep -i NPTL > /dev/null 2>/dev/null; then :; else 40 AC_MSG_WARN([The kernel might not support futex or gettid syscalls. 41 If so, please configure with --disable-linux-futex]) 42 fi 43 fi 44 enable_linux_futex=yes]) 45 LIBS="$save_LIBS"]) 46 ;; 47 yes) 48 AC_LINK_IFELSE( 49 [AC_LANG_PROGRAM( 50 [#include <sys/syscall.h> 51 int lk;], 52 [syscall (SYS_gettid); syscall (SYS_futex, &lk, 0, 0, 0);])],[], 53 [AC_MSG_ERROR([SYS_gettid and SYS_futex required for --enable-linux-futex])]) 54 ;; 55 esac 56 ;; 57 *) 58 enable_linux_futex=no 59 ;; 60 esac 61 if test x$enable_linux_futex = xyes; then 62 $1 63 fi 64 ]) 65