This is a revision of https://sourceware.org/ml/libc-alpha/2015-06/msg00596.html Compared to v2, I've moved the absolute-timeout futex wait functionality directly into futex-internal (ie, no new function in lowlevellock-futex.h), and added checks for support for shared futexes in several places. This patch doesn't try to change how shared/private is represented in the attributes for barrier, rwlock, mutex, and condvar. I think it is sufficient, and easier, to address this in follow-up patches, if we need to. Tested on x86_64-linux. 2015-06-22 Torvald Riegel * sysdeps/nptl/futex-internal.h: New file. * sysdeps/nacl/futex-internal.h: New file. * sysdeps/unix/sysv/linux/futex-internal.h: New file. * nptl/allocatestack.c (setxid_mark_thread): Use futex wrappers with error checking. (setxid_unmark_thread): Likewise. (__nptl_setxid): Likewise. (__wait_lookup_done): Likewise. * nptl/cancellation.c (__pthread_disable_asynccancel): Likewise. * nptl/nptl-init.c (sighandler_setxid): Likewise. * nptl/pthread_create.c (START_THREAD_DEFN): Likewise. * nptl/pthread_once.c (clear_once_control): Likewise. (__pthread_once_slow): Likewise. * nptl/unregister-atfork.c (__unregister_atfork): Likewise. * sysdeps/nacl/exit-thread.h (__exit_thread): Likewise. * sysdeps/nptl/aio_misc.h (AIO_MISC_NOTIFY, AIO_MISC_WAIT): Likewise. * sysdeps/nptl/fork.c (__libc_fork): Likewise. * sysdeps/nptl/gai_misc.h (GAI_MISC_NOTIFY, GAI_MISC_WAIT): Likewise. * nptl/pthread_rwlock_rdlock.c (__pthread_rwlock_rdlock_slow): Likewise. (__pthread_rwlock_rdlock): Likewise. * nptl/pthread_rwlock_timedrdlock.c (pthread_rwlock_timedrdlock): Likewise. * nptl/pthread_rwlock_timedwrlock.c (pthread_rwlock_timedwrlock): Likewise. * nptl/pthread_rwlock_tryrdlock.c (__pthread_rwlock_tryrdlock): Likewise. * nptl/pthread_rwlock_unlock.c (__pthread_rwlock_unlock): Likewise. * nptl/pthread_rwlock_wrlock.c (__pthread_rwlock_wrlock_slow: Likewise. * nptl/pthread_rwlock_init (__pthread_rwlock_init): Remove __ASSUME_PRIVATE_FUTEX check. * nptl/pthread_rwlockattr_setpshared (pthread_rwlockattr_setpshared): Check that shared futexes are supported. * nptl/pthread_barrier_wait.c (pthread_barrier_wait): Use futex wrappers with error checking. * nptl/pthread_barrier_init.c (pthread_barrier_init): Add comments, remove attribute sanity check and __ASSUME_PRIVATE_FUTEX check. * nptl/pthread_barrierattr_setpshared.c (pthread_barrierattr_setpshared): Check that shared futexes are supported. * nptl/pthread_condattr_setpshared.c (pthread_condattr_setpshared): Likewise. * nptl/pthread_mutexattr_setpshared.c (pthread_mutexattr_setpshared): Likewise. * nptl/sem_init.c (futex_private_if_supported): Remove. (__new_sem_init): Adapt and check that shared futexes are supported. * nptl/sem_open.c (sem_open): Likewise. * nptl/sem_post.c (futex_wake): Remove. * nptl/sem_waitcommon.c (futex_abstimed_wait, futex_wake): Remove. (do_futex_wait): Use futex wrappers with error checking. * nptl/sem_wait.c: Include lowlevellock.h.