|  | dnl ---------------------------------------------------------------------- | 
|  | dnl This whole bit snagged from libgomp. | 
|  |  | 
|  | dnl | 
|  | dnl GCC_LINUX_FUTEX | 
|  | dnl    (SHELL-CODE_HANDLER) | 
|  | dnl | 
|  | AC_DEFUN([GCC_LINUX_FUTEX],[dnl | 
|  | GCC_ENABLE(linux-futex,default, ,[use the Linux futex system call], | 
|  | permit yes|no|default) | 
|  | case "$target" in | 
|  | *-linux* | *-uclinux*) | 
|  | case "$enable_linux_futex" in | 
|  | default) | 
|  | # If headers don't have gettid/futex syscalls definition, then | 
|  | # default to no, otherwise there will be compile time failures. | 
|  | # Otherwise, default to yes.  If we don't detect we are | 
|  | # compiled/linked against NPTL and not cross-compiling, check | 
|  | # if programs are run by default against NPTL and if not, issue | 
|  | # a warning. | 
|  | enable_linux_futex=no | 
|  | AC_LINK_IFELSE( | 
|  | [AC_LANG_PROGRAM( | 
|  | [#include <sys/syscall.h> | 
|  | #include <unistd.h> | 
|  | int lk;], | 
|  | [syscall (SYS_gettid); syscall (SYS_futex, &lk, 0, 0, 0);])], | 
|  | [save_LIBS="$LIBS" | 
|  | LIBS="-lpthread $LIBS" | 
|  | AC_LINK_IFELSE( | 
|  | [AC_LANG_PROGRAM( | 
|  | [#ifndef _GNU_SOURCE | 
|  | #define _GNU_SOURCE 1 | 
|  | #endif | 
|  | #include <pthread.h> | 
|  | pthread_t th; void *status;], | 
|  | [pthread_tryjoin_np (th, &status);])],[enable_linux_futex=yes], | 
|  | [if test x$cross_compiling = xno; then | 
|  | if getconf GNU_LIBPTHREAD_VERSION 2>/dev/null \ | 
|  | | LC_ALL=C grep -i NPTL > /dev/null 2>/dev/null; then :; else | 
|  | AC_MSG_WARN([The kernel might not support futex or gettid syscalls. | 
|  | If so, please configure with --disable-linux-futex]) | 
|  | fi | 
|  | fi | 
|  | enable_linux_futex=yes]) | 
|  | LIBS="$save_LIBS"]) | 
|  | ;; | 
|  | yes) | 
|  | AC_LINK_IFELSE( | 
|  | [AC_LANG_PROGRAM( | 
|  | [#include <sys/syscall.h> | 
|  | #include <unistd.h> | 
|  | int lk;], | 
|  | [syscall (SYS_gettid); syscall (SYS_futex, &lk, 0, 0, 0);])],[], | 
|  | [AC_MSG_ERROR([SYS_gettid and SYS_futex required for --enable-linux-futex])]) | 
|  | ;; | 
|  | esac | 
|  | ;; | 
|  | *) | 
|  | enable_linux_futex=no | 
|  | ;; | 
|  | esac | 
|  | if test x$enable_linux_futex = xyes; then | 
|  | $1 | 
|  | fi | 
|  | ]) |