From d5ba53f90790e2c3e9c95e39db32067d7e25b34e Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sat, 29 Jul 2006 05:07:43 +0000 Subject: [PATCH] * sysdeps/unix/sysv/linux/kernel-features.h: Define __ASSUME_FUTEX_LOCK_PI. * include/time.h: Declare __nanosleep_nocancel. * include/unistd.h: Declare __pause_nocancel. --- ChangeLog | 5 +++++ NEWS | 5 ++++- include/time.h | 2 ++ include/unistd.h | 2 ++ nptl/ChangeLog | 6 ++++++ .../unix/sysv/linux/alpha/lowlevellock.h | 3 +++ .../sysdeps/unix/sysv/linux/i386/lowlevellock.h | 3 +++ .../sysdeps/unix/sysv/linux/ia64/lowlevellock.h | 3 +++ .../unix/sysv/linux/powerpc/lowlevellock.h | 3 +++ .../sysdeps/unix/sysv/linux/s390/lowlevellock.h | 3 +++ nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.h | 3 +++ .../unix/sysv/linux/sparc/lowlevellock.h | 3 +++ .../unix/sysv/linux/x86_64/lowlevellock.h | 3 +++ sysdeps/unix/sysv/linux/kernel-features.h | 17 +++++++++-------- 14 files changed, 52 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4c72197ccf..dfca3fceb3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2006-07-28 Ulrich Drepper + * sysdeps/unix/sysv/linux/kernel-features.h: Define + __ASSUME_FUTEX_LOCK_PI. + * include/time.h: Declare __nanosleep_nocancel. + * include/unistd.h: Declare __pause_nocancel. + * dlfcn/Makefile (LDLIBS-bug-atexit3-lib.so): Use this instead of LDFLAGS. Add -lgcc_eh and libc_nonshared (again) to make sure we get the __stack_chk_fail_local definition when it's needed. diff --git a/NEWS b/NEWS index 0f73029978..55855ad81a 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,4 @@ -GNU C Library NEWS -- history of user-visible changes. 2006-07-10 +GNU C Library NEWS -- history of user-visible changes. 2006-07-28 Copyright (C) 1992-2002,2003,2004,2005,2006 Free Software Foundation, Inc. See the end for copying conditions. @@ -33,6 +33,9 @@ Version 2.5 * Support for the new ELF hash table format was added by Ulrich Drepper. +* Support for priority inheritance mutexes added by Jakub Jelinek and + Ulrich Drepper. + Version 2.4 diff --git a/include/time.h b/include/time.h index 224736540b..f2a6489efd 100644 --- a/include/time.h +++ b/include/time.h @@ -81,6 +81,8 @@ extern long int __tzname_max (void); extern int __nanosleep (__const struct timespec *__requested_time, struct timespec *__remaining); +extern int __nanosleep_nocancel (__const struct timespec *__requested_time, + struct timespec *__remaining); libc_hidden_proto(__nanosleep) extern int __getdate_r (__const char *__string, struct tm *__resbufp); diff --git a/include/unistd.h b/include/unistd.h index f8f15ed019..fb7a044b57 100644 --- a/include/unistd.h +++ b/include/unistd.h @@ -162,5 +162,7 @@ extern __pid_t __libc_fork (void); /* Suspend the process until a signal arrives. This always returns -1 and sets `errno' to EINTR. */ extern int __libc_pause (void); +/* Not cancelable variant. */ +extern int __pause_nocancel (void); #endif diff --git a/nptl/ChangeLog b/nptl/ChangeLog index 073106c297..46a7f33345 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -20,6 +20,12 @@ * sysdeps/unix/sysv/linux/i386/lowlevellock.h: Define FUTEX_LOCK_PI, FUTEX_UNLOCK_PI, and FUTEX_TRYLOCK_PI. * sysdeps/unix/sysv/linux/x86_64/lowlevellock.h: Likewise. + * sysdeps/unix/sysv/linux/alpha/lowlevellock.h: Likewise. + * sysdeps/unix/sysv/linux/ia64/lowlevellock.h: Likewise. + * sysdeps/unix/sysv/linux/powerpc/lowlevellock.h: Likewise. + * sysdeps/unix/sysv/linux/s390/lowlevellock.h: Likewise. + * sysdeps/unix/sysv/linux/sh/lowlevellock.h: Likewise. + * sysdeps/unix/sysv/linux/sparc/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/bits/posix_opt.h: Define _POSIX_THREAD_PRIO_INHERIT to 200112L. * tst-mutex1.c: Adjust to allow use in PI mutex test. diff --git a/nptl/sysdeps/unix/sysv/linux/alpha/lowlevellock.h b/nptl/sysdeps/unix/sysv/linux/alpha/lowlevellock.h index 1a2e8cbb07..58b4806eb2 100644 --- a/nptl/sysdeps/unix/sysv/linux/alpha/lowlevellock.h +++ b/nptl/sysdeps/unix/sysv/linux/alpha/lowlevellock.h @@ -33,6 +33,9 @@ #define FUTEX_CMP_REQUEUE 4 #define FUTEX_WAKE_OP 5 #define FUTEX_OP_CLEAR_WAKE_IF_GT_ONE ((4 << 24) | 1) +#define FUTEX_LOCK_PI 6 +#define FUTEX_UNLOCK_PI 7 +#define FUTEX_TRYLOCK_PI 8 /* Initializer for compatibility lock. */ #define LLL_MUTEX_LOCK_INITIALIZER (0) diff --git a/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h b/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h index 639f6a0b8f..ac788ebe5a 100644 --- a/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h +++ b/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h @@ -35,6 +35,9 @@ #define SYS_futex 240 #define FUTEX_WAIT 0 #define FUTEX_WAKE 1 +#define FUTEX_LOCK_PI 6 +#define FUTEX_UNLOCK_PI 7 +#define FUTEX_TRYLOCK_PI 8 /* Initializer for compatibility lock. */ diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/lowlevellock.h b/nptl/sysdeps/unix/sysv/linux/ia64/lowlevellock.h index ece9a7fc72..8df997a262 100644 --- a/nptl/sysdeps/unix/sysv/linux/ia64/lowlevellock.h +++ b/nptl/sysdeps/unix/sysv/linux/ia64/lowlevellock.h @@ -33,6 +33,9 @@ #define FUTEX_CMP_REQUEUE 4 #define FUTEX_WAKE_OP 5 #define FUTEX_OP_CLEAR_WAKE_IF_GT_ONE ((4 << 24) | 1) +#define FUTEX_LOCK_PI 6 +#define FUTEX_UNLOCK_PI 7 +#define FUTEX_TRYLOCK_PI 8 /* Delay in spinlock loop. */ #define BUSY_WAIT_NOP asm ("hint @pause") diff --git a/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h b/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h index abd019df47..0136b97595 100644 --- a/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h +++ b/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h @@ -35,6 +35,9 @@ #define FUTEX_CMP_REQUEUE 4 #define FUTEX_WAKE_OP 5 #define FUTEX_OP_CLEAR_WAKE_IF_GT_ONE ((4 << 24) | 1) +#define FUTEX_LOCK_PI 6 +#define FUTEX_UNLOCK_PI 7 +#define FUTEX_TRYLOCK_PI 8 /* Initializer for compatibility lock. */ #define LLL_MUTEX_LOCK_INITIALIZER (0) diff --git a/nptl/sysdeps/unix/sysv/linux/s390/lowlevellock.h b/nptl/sysdeps/unix/sysv/linux/s390/lowlevellock.h index 6baab90f56..38d9f2ac41 100644 --- a/nptl/sysdeps/unix/sysv/linux/s390/lowlevellock.h +++ b/nptl/sysdeps/unix/sysv/linux/s390/lowlevellock.h @@ -32,6 +32,9 @@ #define FUTEX_CMP_REQUEUE 4 #define FUTEX_WAKE_OP 5 #define FUTEX_OP_CLEAR_WAKE_IF_GT_ONE ((4 << 24) | 1) +#define FUTEX_LOCK_PI 6 +#define FUTEX_UNLOCK_PI 7 +#define FUTEX_TRYLOCK_PI 8 /* Initializer for compatibility lock. */ #define LLL_MUTEX_LOCK_INITIALIZER (0) diff --git a/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.h b/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.h index 92f93cd5f5..0eb1f0114c 100644 --- a/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.h +++ b/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.h @@ -26,6 +26,9 @@ #define SYS_futex 240 #define FUTEX_WAIT 0 #define FUTEX_WAKE 1 +#define FUTEX_LOCK_PI 6 +#define FUTEX_UNLOCK_PI 7 +#define FUTEX_TRYLOCK_PI 8 /* Initializer for compatibility lock. */ diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/lowlevellock.h b/nptl/sysdeps/unix/sysv/linux/sparc/lowlevellock.h index 77eefc546c..5013922a2f 100644 --- a/nptl/sysdeps/unix/sysv/linux/sparc/lowlevellock.h +++ b/nptl/sysdeps/unix/sysv/linux/sparc/lowlevellock.h @@ -32,6 +32,9 @@ #define FUTEX_CMP_REQUEUE 4 #define FUTEX_WAKE_OP 5 #define FUTEX_OP_CLEAR_WAKE_IF_GT_ONE ((4 << 24) | 1) +#define FUTEX_LOCK_PI 6 +#define FUTEX_UNLOCK_PI 7 +#define FUTEX_TRYLOCK_PI 8 /* Initializer for compatibility lock. */ #define LLL_MUTEX_LOCK_INITIALIZER (0) diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h index 95e6923d4d..c354e8489c 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h @@ -35,6 +35,9 @@ #define SYS_futex 202 #define FUTEX_WAIT 0 #define FUTEX_WAKE 1 +#define FUTEX_LOCK_PI 6 +#define FUTEX_UNLOCK_PI 7 +#define FUTEX_TRYLOCK_PI 8 /* Initializer for compatibility lock. */ diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h index 139e3d5a72..e54f675dbe 100644 --- a/sysdeps/unix/sysv/linux/kernel-features.h +++ b/sysdeps/unix/sysv/linux/kernel-features.h @@ -431,29 +431,30 @@ /* pselect was introduced just after 2.6.16-rc1. Due to the way the kernel versions are advertised we can only rely on 2.6.17 to have the code. */ -#if __LINUX_KERNEL_VERSION >= 0x020611 \ - && (defined __i386__ || defined __powerpc__) +#if __LINUX_KERNEL_VERSION >= 0x020611 && !defined __x86_64__ # define __ASSUME_PSELECT 1 #endif /* ppoll was introduced just after 2.6.16-rc1. Due to the way the kernel versions are advertised we can only rely on 2.6.17 to have the code. */ -#if __LINUX_KERNEL_VERSION >= 0x020611 \ - && (defined __i386__ || defined __powerpc__) +#if __LINUX_KERNEL_VERSION >= 0x020611 && !defined __x86_64__ # define __ASSUME_PPOLL 1 #endif /* The *at syscalls were introduced just after 2.6.16-rc1. Due to the way the kernel versions are advertised we can only rely on 2.6.17 to have the code. */ -#if __LINUX_KERNEL_VERSION >= 0x020611 \ - && (defined __i386__ || defined __x86_64__) +#if __LINUX_KERNEL_VERSION >= 0x020611 # define __ASSUME_ATFCTS 1 #endif /* Support for inter-process robust mutexes was added in 2.6.17. */ -#if __LINUX_KERNEL_VERSION >= 0x020611 \ - && (defined __i386__ || defined __x86_64__) +#if __LINUX_KERNEL_VERSION >= 0x020611 # define __ASSUME_SET_ROBUST_LIST 1 #endif + +/* Support for PI futexes was added in 2.6.18. */ +#if __LINUX_KERNEL_VERSION >= 0x020612 +# define __ASSUME_FUTEX_LOCK_PI 1 +#endif