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