0f3e711eef
libstdc++-v3/ * configure.ac (--enable-linux-futex): Add new configure option. (HAVE_LINUX_FUTEX): New AC_DEFINE. * Makefile.in: Rebuilt. * aclocal.m4: Rebuilt. * configure: Rebuilt. * config.h.in: Rebuilt. * config/cpu/generic/cxxabi_tweaks.h (_GLIBCXX_GUARD_BIT, _GLIBCXX_GUARD_PENDING_BIT, _GLIBCXX_GUARD_WAITING_BIT): Define. * config/cpu/arm/cxxabi_tweaks.h (_GLIBCXX_GUARD_BIT, _GLIBCXX_GUARD_PENDING_BIT, _GLIBCXX_GUARD_WAITING_BIT): Define. * libsupc++/guard.cc: Include climits and syscall.h. (_GLIBCXX_USE_FUTEX): Define if futex syscall and atomic builtins are supported. (_GLIBCXX_FUTEX_WAIT, _GLIBCXX_FUTEX_WAKE): Likewise. (__guard_test_bit): New static inline. (__cxa_guard_acquire, __cxa_guard_release, __cxa_guard_abort): Use atomic builtins and futex syscall if _GLIBCXX_USE_FUTEX. config/ * futex.m4: New file. libgomp/ * configure.ac: Move futex checking into ../config/futex.m4. * configure: Rebuilt. * aclocal.m4: Rebuilt. * Makefile.in: Rebuilt. * configure.tgt: Rename have_tls to gcc_cv_have_tls to match 2007-10-15 ../config/tls.m4 change. From-SVN: r131399
65 lines
1.8 KiB
Plaintext
65 lines
1.8 KiB
Plaintext
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*)
|
|
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>
|
|
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>
|
|
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
|
|
])
|