[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[commits] r3901 - in /fsf/glibc-2_7-branch/ports: ./ sysdeps/unix/sysv/linux/am33/bits/ sysdeps/unix/sysv/linux/arm/bits/ sysdeps/unix...



Author: eglibc
Date: Mon Oct 22 08:51:40 2007
New Revision: 3901

Log:
Import glibc-ports-2.7 for 2007-10-22

Modified:
    fsf/glibc-2_7-branch/ports/ChangeLog.am33
    fsf/glibc-2_7-branch/ports/ChangeLog.arm
    fsf/glibc-2_7-branch/ports/ChangeLog.cris
    fsf/glibc-2_7-branch/ports/ChangeLog.hppa
    fsf/glibc-2_7-branch/ports/ChangeLog.m68k
    fsf/glibc-2_7-branch/ports/ChangeLog.mips
    fsf/glibc-2_7-branch/ports/sysdeps/unix/sysv/linux/am33/bits/fcntl.h
    fsf/glibc-2_7-branch/ports/sysdeps/unix/sysv/linux/arm/bits/fcntl.h
    fsf/glibc-2_7-branch/ports/sysdeps/unix/sysv/linux/cris/bits/fcntl.h
    fsf/glibc-2_7-branch/ports/sysdeps/unix/sysv/linux/hppa/bits/fcntl.h
    fsf/glibc-2_7-branch/ports/sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.c
    fsf/glibc-2_7-branch/ports/sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.h
    fsf/glibc-2_7-branch/ports/sysdeps/unix/sysv/linux/m68k/bits/fcntl.h
    fsf/glibc-2_7-branch/ports/sysdeps/unix/sysv/linux/mips/bits/fcntl.h

Modified: fsf/glibc-2_7-branch/ports/ChangeLog.am33
==============================================================================
--- fsf/glibc-2_7-branch/ports/ChangeLog.am33 (original)
+++ fsf/glibc-2_7-branch/ports/ChangeLog.am33 Mon Oct 22 08:51:40 2007
@@ -1,3 +1,7 @@
+2007-10-22  Daniel Jacobowitz  <dan@xxxxxxxxxxxxxxxx>
+
+	* sysdeps/unix/sysv/linux/am33/bits/fcntl.h (F_DUPFD_CLOEXEC): Define.
+
 2007-07-10  Daniel Jacobowitz  <dan@xxxxxxxxxxxxxxxx>
 
 	* sysdeps/unix/sysv/linux/am33/bits/fcntl.h: Comment fix.

Modified: fsf/glibc-2_7-branch/ports/ChangeLog.arm
==============================================================================
--- fsf/glibc-2_7-branch/ports/ChangeLog.arm (original)
+++ fsf/glibc-2_7-branch/ports/ChangeLog.arm Mon Oct 22 08:51:40 2007
@@ -1,3 +1,7 @@
+2007-10-22  Daniel Jacobowitz  <dan@xxxxxxxxxxxxxxxx>
+
+	* sysdeps/unix/sysv/linux/arm/bits/fcntl.h (F_DUPFD_CLOEXEC): Define.
+
 2007-09-25  Joseph Myers  <joseph@xxxxxxxxxxxxxxxx>
 
 	* sysdeps/unix/sysv/linux/arm/bits/fcntl.h: Correct return value

Modified: fsf/glibc-2_7-branch/ports/ChangeLog.cris
==============================================================================
--- fsf/glibc-2_7-branch/ports/ChangeLog.cris (original)
+++ fsf/glibc-2_7-branch/ports/ChangeLog.cris Mon Oct 22 08:51:40 2007
@@ -1,3 +1,7 @@
+2007-10-22  Daniel Jacobowitz  <dan@xxxxxxxxxxxxxxxx>
+
+	* sysdeps/unix/sysv/linux/cris/bits/fcntl.h (F_DUPFD_CLOEXEC): Define.
+
 2007-07-10  Daniel Jacobowitz  <dan@xxxxxxxxxxxxxxxx>
 
 	* sysdeps/unix/sysv/linux/cris/bits/fcntl.h: Comment fix.

Modified: fsf/glibc-2_7-branch/ports/ChangeLog.hppa
==============================================================================
--- fsf/glibc-2_7-branch/ports/ChangeLog.hppa (original)
+++ fsf/glibc-2_7-branch/ports/ChangeLog.hppa Mon Oct 22 08:51:40 2007
@@ -1,3 +1,78 @@
+2007-10-22  Daniel Jacobowitz  <dan@xxxxxxxxxxxxxxxx>
+
+	* sysdeps/unix/sysv/linux/hppa/bits/fcntl.h (F_DUPFD_CLOEXEC): Define.
+
+2007-10-18  Carlos O'Donell  <carlos@xxxxxxxxxxxxxxxx>
+
+	* sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.c
+	(__lll_lock_wait): Add private argument. Pass private
+	to lll_futex_wait. Use atomic_compare_and_exchange_val_acq.
+	(__lll_lock_wait_private): New function.
+	(__lll_timedlock_wait): Add private argument. Pass private
+	to lll_futex_timed_wait.
+	* sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.h:
+	Include kernel-features.h and tls.h.
+	(FUTEX_WAITERS): Define.
+	(FUTEX_OWNER_DIED): Define.
+	(FUTEX_TID_MASK): Define.
+	(__lll_private_flag): Define.
+	(lll_futex_timed_wait): Use __lll_private_flag.
+	(lll_futex_wake): Use __lll_private_flag.
+	(lll_futex_requeue): Use __lll_private_flag.
+	(lll_robust_mutex_dead): Rename to...
+	(lll_robust_dead): ... this. Add private argument. Pass private
+	to lll_futex_wake.
+	(lll_futex_wake_unlock): Use __lll_private_flag.
+	(__lll_mutex_trylock): Remove.
+	(lll_mutex_tryock): Remove.
+	(__lll_robust_mutex_trylock): Rename to...
+	(__lll_robust_trylock): ... this.
+	(lll_robust_mutex_trylock): Rename to...
+	(lll_robust_trylock): ... this. Call __lll_robust_trylock.
+	(__lll_mutex_cond_trylock): Rename to...
+	(__lll_cond_trylock): ... this.
+	(lll_mutex_cond_trylock): Rename to...
+	(lll_cond_trylock): ... this. Call __lll_cond_trylock.
+	(__lll_mutex_lock): Add private argument.
+	(__lll_robust_mutex_lock): Remove.
+	(lll_mutex_lock): Define.
+	(__lll_robust_lock): Define.
+	(lll_robust_mutex_lock): Remove.
+	(__lll_mutex_cond_lock): Remove.
+	(lll_robust_lock) Define.
+	(lll_robust_cond_lock): Define.
+	(lll_robust_mutex_cond_lock): Remove.
+	(__lll_cond_lock): Define.
+	(lll_cond_lock): Define.
+	(__lll_mutex_timedlock): Remove.
+	(__lll_timedlock): Define.
+	(lll_timedlock): Define.
+	(lll_robust_mutex_timedlock): Remove.
+	(lll_robust_timedlock): Define.
+	(__lll_mutex_unlock): Remove.
+	(__lll_unlock): Define.
+	(__lll_robust_mutex_unlock): Remove.
+	(__lll_robust_unlock): Define.
+	(lll_robust_mutex_unlock): Remove.
+	(lll_robust_unlock): Define.
+	(__lll_mutex_unlock_force): Remove.
+	(lll_mutex_unlock_force): Remove.
+	(lll_islocked): Remove.
+	(lll_mutex_islocked): Rename to...
+	(lll_islocked): ... this.
+	(lll_trylock): Remove.
+	(lll_unlock): Remove.
+	(lll_wait_tid): Format whitespace.
+	(lll_cond_wait): Remove.
+	(lll_cond_timedwait): Remove.
+	(lll_cond_wake): Remove.
+	(lll_cond_broadcast): Remove.
+
+2007-10-17  Carlos O'Donell  <carlos@xxxxxxxxxxxxxxxx>
+
+	* sysdeps/unix/sysv/linux/hppa/bits/fcntl.h: Correct return value
+	type and __THROW marker of splice, vmsplice, and tee.
+
 2007-09-24  Carlos O'Donell  <carlos@xxxxxxxxxxxxxxxx>
 
 	* sysdeps/hppa/nptl/tls.h: Fix comment.

Modified: fsf/glibc-2_7-branch/ports/ChangeLog.m68k
==============================================================================
--- fsf/glibc-2_7-branch/ports/ChangeLog.m68k (original)
+++ fsf/glibc-2_7-branch/ports/ChangeLog.m68k Mon Oct 22 08:51:40 2007
@@ -1,3 +1,7 @@
+2007-10-22  Daniel Jacobowitz  <dan@xxxxxxxxxxxxxxxx>
+
+	* sysdeps/unix/sysv/linux/m68k/bits/fcntl.h (F_DUPFD_CLOEXEC): Define.
+
 2007-07-10  Daniel Jacobowitz  <dan@xxxxxxxxxxxxxxxx>
 
 	* sysdeps/unix/sysv/linux/m68k/bits/fcntl.h: Comment fix.

Modified: fsf/glibc-2_7-branch/ports/ChangeLog.mips
==============================================================================
--- fsf/glibc-2_7-branch/ports/ChangeLog.mips (original)
+++ fsf/glibc-2_7-branch/ports/ChangeLog.mips Mon Oct 22 08:51:40 2007
@@ -1,3 +1,7 @@
+2007-10-22  Daniel Jacobowitz  <dan@xxxxxxxxxxxxxxxx>
+
+	* sysdeps/unix/sysv/linux/mips/bits/fcntl.h (F_DUPFD_CLOEXEC): Define.
+
 2007-09-25  Joseph Myers  <joseph@xxxxxxxxxxxxxxxx>
 
 	* sysdeps/unix/sysv/linux/mips/bits/fcntl.h: Correct return value

Modified: fsf/glibc-2_7-branch/ports/sysdeps/unix/sysv/linux/am33/bits/fcntl.h
==============================================================================
--- fsf/glibc-2_7-branch/ports/sysdeps/unix/sysv/linux/am33/bits/fcntl.h (original)
+++ fsf/glibc-2_7-branch/ports/sysdeps/unix/sysv/linux/am33/bits/fcntl.h Mon Oct 22 08:51:40 2007
@@ -92,6 +92,8 @@
 # define F_SETLEASE	1024	/* Set a lease.	 */
 # define F_GETLEASE	1025	/* Enquire what lease is active.  */
 # define F_NOTIFY	1026	/* Request notfications on a directory.	 */
+# define F_DUPFD_CLOEXEC 1030	/* Duplicate file descriptor with
+				   close-on-exit set.  */
 #endif
 
 /* For F_[GET|SET]FD.  */

Modified: fsf/glibc-2_7-branch/ports/sysdeps/unix/sysv/linux/arm/bits/fcntl.h
==============================================================================
--- fsf/glibc-2_7-branch/ports/sysdeps/unix/sysv/linux/arm/bits/fcntl.h (original)
+++ fsf/glibc-2_7-branch/ports/sysdeps/unix/sysv/linux/arm/bits/fcntl.h Mon Oct 22 08:51:40 2007
@@ -98,6 +98,8 @@
 # define F_SETLEASE	1024	/* Set a lease.	 */
 # define F_GETLEASE	1025	/* Enquire what lease is active.  */
 # define F_NOTIFY	1026	/* Request notfications on a directory.	 */
+# define F_DUPFD_CLOEXEC 1030	/* Duplicate file descriptor with
+				   close-on-exit set.  */
 #endif
 
 /* For F_[GET|SET]FD.  */

Modified: fsf/glibc-2_7-branch/ports/sysdeps/unix/sysv/linux/cris/bits/fcntl.h
==============================================================================
--- fsf/glibc-2_7-branch/ports/sysdeps/unix/sysv/linux/cris/bits/fcntl.h (original)
+++ fsf/glibc-2_7-branch/ports/sysdeps/unix/sysv/linux/cris/bits/fcntl.h Mon Oct 22 08:51:40 2007
@@ -94,6 +94,8 @@
 # define F_SETLEASE	1024	/* Set a lease.	 */
 # define F_GETLEASE	1025	/* Enquire what lease is active.  */
 # define F_NOTIFY	1026	/* Request notfications on a directory.	 */
+# define F_DUPFD_CLOEXEC 1030	/* Duplicate file descriptor with
+				   close-on-exit set.  */
 #endif
 
 /* For F_[GET|SET]FD.  */

Modified: fsf/glibc-2_7-branch/ports/sysdeps/unix/sysv/linux/hppa/bits/fcntl.h
==============================================================================
--- fsf/glibc-2_7-branch/ports/sysdeps/unix/sysv/linux/hppa/bits/fcntl.h (original)
+++ fsf/glibc-2_7-branch/ports/sysdeps/unix/sysv/linux/hppa/bits/fcntl.h Mon Oct 22 08:51:40 2007
@@ -95,6 +95,8 @@
 # define F_SETLEASE     1024    /* Set a lease.  */
 # define F_GETLEASE     1025    /* Enquire what lease is active.  */
 # define F_NOTIFY       1026    /* Request notfications on a directory.  */
+# define F_DUPFD_CLOEXEC 1030	/* Duplicate file descriptor with
+				   close-on-exit set.  */
 #endif
 
 /* for F_[GET|SET]FL */
@@ -207,17 +209,17 @@
 			    unsigned int __flags);
 
 /* Splice address range into a pipe.  */
-extern int vmsplice (int __fdout, const struct iovec *__iov, size_t __count,
-		     unsigned int __flags);
+extern ssize_t vmsplice (int __fdout, const struct iovec *__iov, 
+			 size_t __count, unsigned int __flags);
 
 /* Splice two files together.  */
-extern int splice (int __fdin, __off64_t *offin, int __fdout, 
-		   __off64_t *__offout, size_t __len, unsigned int __flags)
-    __THROW;
+extern ssize_t splice (int __fdin, __off64_t *offin, int __fdout, 
+		       __off64_t *__offout, size_t __len,
+		       unsigned int __flags);
 
 /* In-kernel implementation of tee for pipe buffers.  */
-extern int tee (int __fdin, int __fdout, size_t __len, unsigned int __flags)
-    __THROW;
+extern ssize_t tee (int __fdin, int __fdout, size_t __len,
+		    unsigned int __flags);
     
 #endif
     

Modified: fsf/glibc-2_7-branch/ports/sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.c
==============================================================================
--- fsf/glibc-2_7-branch/ports/sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.c (original)
+++ fsf/glibc-2_7-branch/ports/sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.c Mon Oct 22 08:51:40 2007
@@ -23,22 +23,32 @@
 #include <lowlevellock.h>
 #include <sys/time.h>
 
-
 void
-__lll_lock_wait (lll_lock_t *futex)
+__lll_lock_wait (lll_lock_t *futex, int private)
 {
   do
     {
       int oldval = atomic_compare_and_exchange_val_acq (futex, 2, 1);
       if (oldval != 0)
-	lll_futex_wait (futex, 2, LLL_SHARED);
+	lll_futex_wait (futex, 2, private);
     }
-  while (atomic_compare_and_exchange_bool_acq (futex, 2, 0) != 0);
+  while (atomic_compare_and_exchange_val_acq (futex, 2, 0) != 0);
 }
 
+void
+__lll_lock_wait_private (lll_lock_t *futex)
+{
+  do
+    {
+      int oldval = atomic_compare_and_exchange_val_acq (futex, 2, 1);
+      if (oldval != 0)
+	lll_futex_wait (futex, 2, LLL_PRIVATE);
+    }
+  while (atomic_compare_and_exchange_val_acq (futex, 2, 0) != 0);
+}
 
 int
-__lll_timedlock_wait (lll_lock_t *futex, const struct timespec *abstime)
+__lll_timedlock_wait (lll_lock_t *futex, const struct timespec *abstime, int private)
 {
   /* Reject invalid timeouts.  */
   if (abstime->tv_nsec < 0 || abstime->tv_nsec >= 1000000000)
@@ -68,7 +78,7 @@
       /* Wait.  */
       int oldval = atomic_compare_and_exchange_val_acq (futex, 2, 1);
       if (oldval != 0)
-	lll_futex_timed_wait (futex, 2, &rt, LLL_SHARED);
+	lll_futex_timed_wait (futex, 2, &rt, private);
     }
   while (atomic_compare_and_exchange_bool_acq (futex, 2, 0) != 0);
   return 0;

Modified: fsf/glibc-2_7-branch/ports/sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.h
==============================================================================
--- fsf/glibc-2_7-branch/ports/sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.h (original)
+++ fsf/glibc-2_7-branch/ports/sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.h Mon Oct 22 08:51:40 2007
@@ -24,8 +24,10 @@
 #include <bits/pthreadtypes.h>
 #include <sysdep.h>
 #include <atomic.h>
-
-/* The hppa only has one atomic read and modify memory operation,
+#include <kernel-features.h>	/* Need __ASSUME_PRIVATE_FUTEX.  */
+#include <tls.h>		/* Need THREAD_*, and header.*.  */
+
+/* HPPA only has one atomic read and modify memory operation,
    load and clear, so hppa uses a kernel helper routine to implement
    compare_and_exchange. See atomic.h for the userspace calling
    sequence.  */
@@ -41,6 +43,11 @@
 #define FUTEX_TRYLOCK_PI	8
 #define FUTEX_PRIVATE_FLAG	128
 
+/* Bits used in robust mutex implementation.  */
+#define FUTEX_WAITERS		0x80000000
+#define FUTEX_OWNER_DIED	0x40000000
+#define FUTEX_TID_MASK		0x3fffffff
+
 /* Values for 'private' parameter of locking macros.  Yes, the
    definition seems to be backwards.  But it is not.  The bit will be
    reversed before passing to the system call.  */
@@ -50,30 +57,54 @@
 /* Initialize locks to zero.  */
 #define LLL_MUTEX_LOCK_INITIALIZER (0)
 
+#if !defined NOT_IN_libc || defined IS_IN_rtld
+/* In libc.so or ld.so all futexes are private.  */
+# ifdef __ASSUME_PRIVATE_FUTEX
+#  define __lll_private_flag(fl, private) \
+  ((fl) | FUTEX_PRIVATE_FLAG)
+# else
+#  define __lll_private_flag(fl, private) \
+  ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex))
+# endif
+#else
+# ifdef __ASSUME_PRIVATE_FUTEX
+#  define __lll_private_flag(fl, private) \
+  (((fl) | FUTEX_PRIVATE_FLAG) ^ (private))
+# else
+#  define __lll_private_flag(fl, private) \
+  (__builtin_constant_p (private)					      \
+   ? ((private) == 0							      \
+      ? ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex))	      \
+      : (fl))								      \
+   : ((fl) | (((private) ^ FUTEX_PRIVATE_FLAG)				      \
+	      & THREAD_GETMEM (THREAD_SELF, header.private_futex))))
+# endif	      
+#endif
 
 /* Type for lock object.  */
 typedef int lll_lock_t;
 
-
 #define lll_futex_wait(futexp, val, private) \
   lll_futex_timed_wait (futexp, val, 0, private)
 
 #define lll_futex_timed_wait(futexp, val, timespec, private) \
-  ({									      \
-    INTERNAL_SYSCALL_DECL (__err);					      \
-    long int __ret;							      \
-    __ret = INTERNAL_SYSCALL (futex, __err, 4,				      \
-			      (futexp), FUTEX_WAIT, (val), (timespec));	      \
-    __ret;								      \
+  ({									\
+    INTERNAL_SYSCALL_DECL (__err);					\
+    long int __ret;							\
+    __ret = INTERNAL_SYSCALL (futex, __err, 4, (futexp), 		\
+			      __lll_private_flag (FUTEX_WAIT, private),	\
+			      (val), (timespec));			\
+    __ret;								\
   })
 
 #define lll_futex_wake(futexp, nr, private) \
-  ({									      \
-    INTERNAL_SYSCALL_DECL (__err);					      \
-    long int __ret;							      \
-    __ret = INTERNAL_SYSCALL (futex, __err, 4,				      \
-			      (futexp), FUTEX_WAKE, (nr), 0);		      \
-    __ret;								      \
+  ({									\
+    INTERNAL_SYSCALL_DECL (__err);					\
+    long int __ret;							\
+    __ret = INTERNAL_SYSCALL (futex, __err, 4, (futexp),		\
+			      __lll_private_flag (FUTEX_WAKE, private),	\
+			      (nr), 0);					\
+    __ret;								\
   })
 
 #define lll_private_futex_wait(futex, val) \
@@ -123,194 +154,186 @@
   })
 #endif
 
-
-
-#define lll_robust_mutex_dead(futexv) \
+/* Returns non-zero if error happened, zero if success.  */
+#define lll_futex_requeue(futexp, nr_wake, nr_move, mutex, val, private) \
+  ({									      \
+    INTERNAL_SYSCALL_DECL (__err);					      \
+    long int __ret;							      \
+    __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), 		      \
+			      __lll_private_flag (FUTEX_CMP_REQUEUE, private),\
+			      (nr_wake), (nr_move), (mutex), (val));	      \
+    __ret;								      \
+  })
+
+#define lll_robust_dead(futexv, private) \
   do									      \
     {									      \
       int *__futexp = &(futexv);					      \
       atomic_or (__futexp, FUTEX_OWNER_DIED);				      \
-      lll_futex_wake (__futexp, 1, 0);					      \
+      lll_futex_wake (__futexp, 1, private);				      \
     }									      \
   while (0)
 
 /* Returns non-zero if error happened, zero if success.  */
-#define lll_futex_requeue(futexp, nr_wake, nr_move, mutex, val) \
-  ({									      \
-    INTERNAL_SYSCALL_DECL (__err);					      \
-    long int __ret;							      \
-    __ret = INTERNAL_SYSCALL (futex, __err, 6,				      \
-			      (futexp), FUTEX_CMP_REQUEUE, (nr_wake),	      \
-			      (nr_move), (mutex), (val));		      \
-    __ret;								      \
-  })
-
-/* Returns non-zero if error happened, zero if success.  */
 #define lll_futex_wake_unlock(futexp, nr_wake, nr_wake2, futexp2, private) \
-  ({									      \
-    INTERNAL_SYSCALL_DECL (__err);					      \
-    long int __ret;							      \
-    __ret = INTERNAL_SYSCALL (futex, __err, 6,				      \
-			      (futexp), FUTEX_WAKE_OP, (nr_wake),	      \
-			      (nr_wake2), (futexp2),			      \
-			      FUTEX_OP_CLEAR_WAKE_IF_GT_ONE);		      \
-    __ret;								      \
-  })
-
-static inline int __attribute__((always_inline))
-__lll_mutex_trylock(lll_lock_t *futex)
+  ({									   \
+    INTERNAL_SYSCALL_DECL (__err);					   \
+    long int __ret;							   \
+    __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp),		   \
+			      __lll_private_flag (FUTEX_WAKE_OP, private), \
+			      (nr_wake), (nr_wake2), (futexp2),		   \
+			      FUTEX_OP_CLEAR_WAKE_IF_GT_ONE);		   \
+    __ret;								   \
+  })
+
+static inline int
+__attribute__ ((always_inline))
+__lll_robust_trylock (int *futex, int id)
+{
+  return atomic_compare_and_exchange_val_acq (futex, id, 0) != 0;
+}
+#define lll_robust_trylock(futex, id) \
+  __lll_robust_trylock (&(futex), id)
+
+static inline int
+__attribute__ ((always_inline))
+__lll_cond_trylock (int *futex)
+{
+  return atomic_compare_and_exchange_val_acq (futex, 2, 0) != 0;
+}
+#define lll_cond_trylock(futex) __lll_cond_trylock (&(futex))
+
+static inline int
+__attribute__ ((always_inline))
+__lll_trylock (int *futex)
 {
   return atomic_compare_and_exchange_val_acq (futex, 1, 0) != 0;
 }
-#define lll_mutex_trylock(lock)	__lll_mutex_trylock (&(lock))
-
-static inline int __attribute__((always_inline))
-__lll_robust_mutex_trylock(int *futex, int id)
-{
-  return atomic_compare_and_exchange_val_acq (futex, id, 0) != 0;
-}
-#define lll_robust_mutex_trylock(lock, id) \
-  __lll_robust_mutex_trylock (&(lock), id)
-
-
-static inline int __attribute__((always_inline))
-__lll_mutex_cond_trylock(lll_lock_t *futex)
-{
-  return atomic_compare_and_exchange_val_acq (futex, 2, 0) != 0;
-}
-#define lll_mutex_cond_trylock(lock)	__lll_mutex_cond_trylock (&(lock))
-
-
-extern void __lll_lock_wait (lll_lock_t *futex) attribute_hidden;
+#define lll_trylock(futex) __lll_trylock (&(futex))
+
+extern void __lll_lock_wait (lll_lock_t *futex, int private) attribute_hidden;
+extern void __lll_lock_wait_private (lll_lock_t *futex) attribute_hidden;
 
 static inline void __attribute__((always_inline))
-__lll_mutex_lock(lll_lock_t *futex)
-{
-  if (atomic_compare_and_exchange_bool_acq (futex, 1, 0) != 0)
-    __lll_lock_wait (futex);
-}
-#define lll_mutex_lock(futex) __lll_mutex_lock (&(futex))
-
-extern int __lll_robust_lock_wait (int *futex) attribute_hidden;
-
-static inline int __attribute__ ((always_inline))
-__lll_robust_mutex_lock (int *futex, int id)
+__lll_mutex_lock(lll_lock_t *futex, int private)
+{
+  int val = atomic_compare_and_exchange_val_acq (futex, 1, 0);
+
+  if (__builtin_expect (val != 0, 0))
+    {
+      if (__builtin_constant_p (private) && private == LLL_PRIVATE)
+	__lll_lock_wait_private (futex);
+      else
+	__lll_lock_wait (futex, private);
+    }
+}
+#define lll_mutex_lock(futex, private) __lll_mutex_lock (&(futex), private)
+#define lll_lock(lock, private)	lll_mutex_lock (lock, private)
+
+extern int __lll_robust_lock_wait (int *futex, int private) attribute_hidden;
+
+static inline int
+__attribute__ ((always_inline))
+__lll_robust_lock (int *futex, int id, int private)
 {
   int result = 0;
   if (atomic_compare_and_exchange_bool_acq (futex, id, 0) != 0)
-    result = __lll_robust_lock_wait (futex);
+    result = __lll_robust_lock_wait (futex, private);
   return result;
 }
-#define lll_robust_mutex_lock(futex, id) \
-  __lll_robust_mutex_lock (&(futex), id)
-
-static inline void __attribute__ ((always_inline))
-__lll_mutex_cond_lock (lll_lock_t *futex)
-{
-  if (atomic_compare_and_exchange_bool_acq (futex, 2, 0) != 0)
-    __lll_lock_wait (futex);
-}
-#define lll_mutex_cond_lock(futex) __lll_mutex_cond_lock (&(futex))
-
-
-#define lll_robust_mutex_cond_lock(futex, id) \
-  __lll_robust_mutex_lock (&(futex), (id) | FUTEX_WAITERS)
-
-
-extern int __lll_timedlock_wait (lll_lock_t *futex, const struct timespec *)
-	attribute_hidden;
-extern int __lll_robust_timedlock_wait (int *futex, const struct timespec *)
-	attribute_hidden;
+#define lll_robust_lock(futex, id, private) \
+  __lll_robust_lock (&(futex), id, private)
+
+#define lll_robust_cond_lock(futex, id, private) \
+  __lll_robust_lock (&(futex), (id) | FUTEX_WAITERS, private)
+
+static inline void
+__attribute__ ((always_inline))
+__lll_cond_lock (int *futex, int private)
+{
+  int val = atomic_compare_and_exchange_val_acq (futex, 2, 0);
+
+  if (__builtin_expect (val != 0, 0))
+    __lll_lock_wait (futex, private);
+}
+#define lll_cond_lock(futex, private) __lll_cond_lock (&(futex), private)
+
+extern int __lll_timedlock_wait (lll_lock_t *futex, const struct timespec *, 
+				 int private) attribute_hidden;
+extern int __lll_robust_timedlock_wait (int *futex, const struct timespec *,
+				 int private) attribute_hidden;
+
+static inline int
+__attribute__ ((always_inline))
+__lll_timedlock (int *futex, const struct timespec *abstime, int private)
+{
+  int val = atomic_compare_and_exchange_val_acq (futex, 1, 0);
+  int result = 0;
+
+  if (__builtin_expect (val != 0, 0))
+    result = __lll_timedlock_wait (futex, abstime, private);
+  return result;
+}
+#define lll_timedlock(futex, abstime, private) \
+  __lll_timedlock (&(futex), abstime, private)
 
 static inline int __attribute__ ((always_inline))
-__lll_mutex_timedlock (lll_lock_t *futex, const struct timespec *abstime)
-{
-  int result = 0;
-  if (atomic_compare_and_exchange_bool_acq (futex, 1, 0) != 0)
-    result = __lll_timedlock_wait (futex, abstime);
-  return result;
-}
-#define lll_mutex_timedlock(futex, abstime) \
-  __lll_mutex_timedlock (&(futex), abstime)
-
-static inline int __attribute__ ((always_inline))
-__lll_robust_mutex_timedlock (int *futex, const struct timespec *abstime,
-			      int id)
+__lll_robust_timedlock (int *futex, const struct timespec *abstime,
+			      int id, int private)
 {
   int result = 0;
   if (atomic_compare_and_exchange_bool_acq (futex, id, 0) != 0)
-    result = __lll_robust_timedlock_wait (futex, abstime);
+    result = __lll_robust_timedlock_wait (futex, abstime, private);
   return result;
 }
-#define lll_robust_mutex_timedlock(futex, abstime, id) \
-  __lll_robust_mutex_timedlock (&(futex), abstime, id)
-
+#define lll_robust_timedlock(futex, abstime, id, private) \
+  __lll_robust_timedlock (&(futex), abstime, id, private)
 
 static inline void __attribute__ ((always_inline))
-__lll_mutex_unlock (lll_lock_t *futex)
+__lll_unlock (lll_lock_t *futex, int private)
 {
   int val = atomic_exchange_rel (futex, 0);
   if (__builtin_expect (val > 1, 0))
-    lll_futex_wake (futex, 1, 0);
-}
-#define lll_mutex_unlock(futex) __lll_mutex_unlock(&(futex))
-
+    lll_futex_wake (futex, 1, private);
+}
+#define lll_unlock(futex, private) __lll_unlock(&(futex), private)
 
 static inline void __attribute__ ((always_inline))
-__lll_robust_mutex_unlock (int *futex, int mask)
+__lll_robust_unlock (int *futex, int private)
 {
   int val = atomic_exchange_rel (futex, 0);
-  if (__builtin_expect (val & mask, 0))
-    lll_futex_wake (futex, 1, 0);
-}
-#define lll_robust_mutex_unlock(futex) \
-  __lll_robust_mutex_unlock(&(futex), FUTEX_WAITERS)
-
-
-static inline void __attribute__ ((always_inline))
-__lll_mutex_unlock_force (lll_lock_t *futex)
-{
-  (void) atomic_exchange_rel (futex, 0);
-  lll_futex_wake (futex, 1, 0);
-}
-#define lll_mutex_unlock_force(futex) __lll_mutex_unlock_force(&(futex))
-
-#define lll_mutex_islocked(futex) \
+  if (__builtin_expect (val & FUTEX_WAITERS, 0))
+    lll_futex_wake (futex, 1, private);
+}
+#define lll_robust_unlock(futex, private) \
+  __lll_robust_unlock(&(futex), private)
+
+#define lll_islocked(futex) \
   (futex != 0)
 
 /* Our internal lock implementation is identical to the binary-compatible
-   mutex implementation. */
-
+   mutex implementation.  */
 #define LLL_LOCK_INITIALIZER (0)
 #define LLL_LOCK_INITIALIZER_CONST (0)
 #define LLL_LOCK_INITIALIZER_LOCKED (1)
 
-
 #define THREAD_INIT_LOCK(PD, LOCK) \
   (PD)->LOCK = LLL_LOCK_INITIALIZER
 
 extern int lll_unlock_wake_cb (lll_lock_t *__futex) attribute_hidden;
-
-/* The states of a lock are:
-    0  -  untaken
-    1  -  taken by one user
-   >1  -  taken by more users */
-
-#define lll_trylock(lock)	lll_mutex_trylock (lock)
-#define lll_lock(lock)		lll_mutex_lock (lock)
-#define lll_unlock(lock)	lll_mutex_unlock (lock)
-#define lll_islocked(lock)	lll_mutex_islocked (lock)
 
 /* The kernel notifies a process which uses CLONE_CLEARTID via futex
    wakeup when the clone terminates.  The memory location contains the
    thread ID while the clone is running and is reset to zero
    afterwards.	*/
 #define lll_wait_tid(tid) \
-  do {						\
-    __typeof (tid) __tid;			\
-    while ((__tid = (tid)) != 0)		\
-      lll_futex_wait (&(tid), __tid, 0);	\
-  } while (0)
+  do						\
+    {						\
+      __typeof (tid) __tid;			\
+      while ((__tid = (tid)) != 0)		\
+        lll_futex_wait (&(tid), __tid, 0);	\
+    }						\
+  while (0)
 
 extern int __lll_timedwait_tid (int *, const struct timespec *)
      attribute_hidden;
@@ -323,26 +346,4 @@
     __res;						\
   })
 
-
-/* Conditional variable handling.  */
-
-extern void __lll_cond_wait (pthread_cond_t *cond)
-     attribute_hidden;
-extern int __lll_cond_timedwait (pthread_cond_t *cond,
-				 const struct timespec *abstime)
-     attribute_hidden;
-extern void __lll_cond_wake (pthread_cond_t *cond)
-     attribute_hidden;
-extern void __lll_cond_broadcast (pthread_cond_t *cond)
-     attribute_hidden;
-
-#define lll_cond_wait(cond) \
-  __lll_cond_wait (cond)
-#define lll_cond_timedwait(cond, abstime) \
-  __lll_cond_timedwait (cond, abstime)
-#define lll_cond_wake(cond) \
-  __lll_cond_wake (cond)
-#define lll_cond_broadcast(cond) \
-  __lll_cond_broadcast (cond)
-
 #endif	/* lowlevellock.h */

Modified: fsf/glibc-2_7-branch/ports/sysdeps/unix/sysv/linux/m68k/bits/fcntl.h
==============================================================================
--- fsf/glibc-2_7-branch/ports/sysdeps/unix/sysv/linux/m68k/bits/fcntl.h (original)
+++ fsf/glibc-2_7-branch/ports/sysdeps/unix/sysv/linux/m68k/bits/fcntl.h Mon Oct 22 08:51:40 2007
@@ -93,6 +93,8 @@
 # define F_SETLEASE	1024	/* Set a lease.	 */
 # define F_GETLEASE	1025	/* Enquire what lease is active.  */
 # define F_NOTIFY	1026	/* Request notfications on a directory.	 */
+# define F_DUPFD_CLOEXEC 1030	/* Duplicate file descriptor with
+				   close-on-exit set.  */
 #endif
 
 /* For F_[GET|SET]FD.  */

Modified: fsf/glibc-2_7-branch/ports/sysdeps/unix/sysv/linux/mips/bits/fcntl.h
==============================================================================
--- fsf/glibc-2_7-branch/ports/sysdeps/unix/sysv/linux/mips/bits/fcntl.h (original)
+++ fsf/glibc-2_7-branch/ports/sysdeps/unix/sysv/linux/mips/bits/fcntl.h Mon Oct 22 08:51:40 2007
@@ -100,6 +100,8 @@
 # define F_SETLEASE	1024	/* Set a lease.	 */
 # define F_GETLEASE	1025	/* Enquire what lease is active.  */
 # define F_NOTIFY	1026	/* Request notfications on a directory.	 */
+# define F_DUPFD_CLOEXEC 1030	/* Duplicate file descriptor with
+				   close-on-exit set.  */
 #endif
 
 /* For F_[GET|SET]FD.  */