]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
* sysdeps/arm/nptl/tls.h (THREAD_GSCOPE_FLAG_UNUSED,
authorDaniel Jacobowitz <dan@codesourcery.com>
Wed, 6 Jun 2007 17:27:04 +0000 (17:27 +0000)
committerDaniel Jacobowitz <dan@codesourcery.com>
Wed, 6 Jun 2007 17:27:04 +0000 (17:27 +0000)
THREAD_GSCOPE_FLAG_USED, THREAD_GSCOPE_FLAG_WAIT): Define.
(THREAD_GSCOPE_RESET_FLAG, THREAD_GSCOPE_SET_FLAG,
THREAD_GSCOPE_WAIT): Define.
* sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.c
(lll_unlock_wake_cb): Delete.
* sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h
(FUTEX_PRIVATE_FLAG): Define.
(lll_unlock_wake_cb): Delete prototype.
* sysdeps/unix/sysv/linux/arm/nptl/bits/pthreadtypes.h: Include
<endian.h>.
(pthread_rwlock_t): Shrink __flags and add __shared.
* sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h
(RTLD_SINGLE_THREAD_P): Define.

* sysdeps/mips/nptl/tls.h (THREAD_GSCOPE_FLAG_UNUSED,
THREAD_GSCOPE_FLAG_USED, THREAD_GSCOPE_FLAG_WAIT): Define.
(THREAD_GSCOPE_RESET_FLAG, THREAD_GSCOPE_SET_FLAG,
THREAD_GSCOPE_WAIT): Define.
* sysdeps/unix/sysv/linux/mips/nptl/lowlevellock.h
(FUTEX_PRIVATE_FLAG): Define.
(lll_unlock_wake_cb): Delete prototype.
* sysdeps/unix/sysv/linux/mips/nptl/bits/pthreadtypes.h: Include
<endian.h>.
(pthread_rwlock_t): Shrink __flags and add __shared.

ChangeLog.arm
ChangeLog.mips
sysdeps/arm/nptl/tls.h
sysdeps/mips/nptl/tls.h
sysdeps/unix/sysv/linux/arm/nptl/bits/pthreadtypes.h
sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.c
sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h
sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h
sysdeps/unix/sysv/linux/mips/nptl/bits/pthreadtypes.h
sysdeps/unix/sysv/linux/mips/nptl/lowlevellock.h

index e733cb6fc5c8172db40d1cba89d50387a0d24b80..39e14dca9524a431c28964e6ba2a4c8639e6a56f 100644 (file)
@@ -1,3 +1,20 @@
+2007-06-06  Daniel Jacobowitz  <dan@codesourcery.com>
+
+       * sysdeps/arm/nptl/tls.h (THREAD_GSCOPE_FLAG_UNUSED,
+       THREAD_GSCOPE_FLAG_USED, THREAD_GSCOPE_FLAG_WAIT): Define.
+       (THREAD_GSCOPE_RESET_FLAG, THREAD_GSCOPE_SET_FLAG,
+       THREAD_GSCOPE_WAIT): Define.
+       * sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.c
+       (lll_unlock_wake_cb): Delete.
+       * sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h
+       (FUTEX_PRIVATE_FLAG): Define.
+       (lll_unlock_wake_cb): Delete prototype.
+       * sysdeps/unix/sysv/linux/arm/nptl/bits/pthreadtypes.h: Include
+       <endian.h>.
+       (pthread_rwlock_t): Shrink __flags and add __shared.
+       * sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h
+       (RTLD_SINGLE_THREAD_P): Define.
+
 2007-05-23  Joseph Myers  <joseph@codesourcery.com>
 
        * sysdeps/unix/sysv/linux/arm/kernel-features.h
index 34e25614f819f27589d073c9fac422285518a54d..a99e165372c984a4af0150aa01ecb153a233e69e 100644 (file)
@@ -1,3 +1,16 @@
+2007-06-06  Daniel Jacobowitz  <dan@codesourcery.com>
+
+       * sysdeps/mips/nptl/tls.h (THREAD_GSCOPE_FLAG_UNUSED,
+       THREAD_GSCOPE_FLAG_USED, THREAD_GSCOPE_FLAG_WAIT): Define.
+       (THREAD_GSCOPE_RESET_FLAG, THREAD_GSCOPE_SET_FLAG,
+       THREAD_GSCOPE_WAIT): Define.
+       * sysdeps/unix/sysv/linux/mips/nptl/lowlevellock.h
+       (FUTEX_PRIVATE_FLAG): Define.
+       (lll_unlock_wake_cb): Delete prototype.
+       * sysdeps/unix/sysv/linux/mips/nptl/bits/pthreadtypes.h: Include
+       <endian.h>.
+       (pthread_rwlock_t): Shrink __flags and add __shared.
+
 2007-05-24  Atsushi Nemoto  <anemo@mba.ocn.ne.jp>
 
        * sysdeps/unix/sysv/linux/mips/mips32/posix_fadvise.c
index 26ef70961cd9773693e3cf68932aee67ef437368..ae2aecc42bcb1910a2fce197ae35745c0bf6458a 100644 (file)
@@ -1,5 +1,5 @@
 /* Definition for thread-local data handling.  NPTL/ARM version.
-   Copyright (C) 2005 Free Software Foundation, Inc.
+   Copyright (C) 2005, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -132,6 +132,29 @@ typedef struct
    is not available.  */
 #define TLS_INIT_TP_EXPENSIVE 1
 
+/* Get and set the global scope generation counter in struct pthread.  */
+#define THREAD_GSCOPE_FLAG_UNUSED 0
+#define THREAD_GSCOPE_FLAG_USED   1
+#define THREAD_GSCOPE_FLAG_WAIT   2
+#define THREAD_GSCOPE_RESET_FLAG() \
+  do                                                                        \
+    { int __res                                                                     \
+       = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag,             \
+                              THREAD_GSCOPE_FLAG_UNUSED);                   \
+      if (__res == THREAD_GSCOPE_FLAG_WAIT)                                 \
+       lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1);                \
+    }                                                                       \
+  while (0)
+#define THREAD_GSCOPE_SET_FLAG() \
+  do                                                                        \
+    {                                                                       \
+      THREAD_SELF->header.gscope_flag = THREAD_GSCOPE_FLAG_USED;            \
+      atomic_write_barrier ();                                              \
+    }                                                                       \
+  while (0)
+#define THREAD_GSCOPE_WAIT() \
+  GL(dl_wait_lookup_done) ()
+
 #endif /* __ASSEMBLER__ */
 
 #endif /* tls.h */
index 1cef161010a00c11b38766f874c4c1e2c7ce6c90..dbe806a5f8843753289879bade2a7c2e2dafe6b7 100644 (file)
@@ -1,5 +1,5 @@
 /* Definition for thread-local data handling.  NPTL/MIPS version.
-   Copyright (C) 2005 Free Software Foundation, Inc.
+   Copyright (C) 2005, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -156,6 +156,29 @@ typedef struct
    different value to mean unset l_tls_offset.  */
 # define NO_TLS_OFFSET         -1
 
+/* Get and set the global scope generation counter in struct pthread.  */
+#define THREAD_GSCOPE_FLAG_UNUSED 0
+#define THREAD_GSCOPE_FLAG_USED   1
+#define THREAD_GSCOPE_FLAG_WAIT   2
+#define THREAD_GSCOPE_RESET_FLAG() \
+  do                                                                        \
+    { int __res                                                                     \
+       = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag,             \
+                              THREAD_GSCOPE_FLAG_UNUSED);                   \
+      if (__res == THREAD_GSCOPE_FLAG_WAIT)                                 \
+       lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1);                \
+    }                                                                       \
+  while (0)
+#define THREAD_GSCOPE_SET_FLAG() \
+  do                                                                        \
+    {                                                                       \
+      THREAD_SELF->header.gscope_flag = THREAD_GSCOPE_FLAG_USED;            \
+      atomic_write_barrier ();                                              \
+    }                                                                       \
+  while (0)
+#define THREAD_GSCOPE_WAIT() \
+  GL(dl_wait_lookup_done) ()
+
 #endif /* __ASSEMBLER__ */
 
 #endif /* tls.h */
index ea8d6a2f0b666cb08a5593c40725cfbe34d7e459..e1b115c8ca1d98acbb2d35a2c2a2321412c0933e 100644 (file)
@@ -19,6 +19,8 @@
 #ifndef _BITS_PTHREADTYPES_H
 #define _BITS_PTHREADTYPES_H   1
 
+#include <endian.h>
+
 #define __SIZEOF_PTHREAD_ATTR_T 36
 #define __SIZEOF_PTHREAD_MUTEX_T 24
 #define __SIZEOF_PTHREAD_MUTEXATTR_T 4
@@ -126,9 +128,21 @@ typedef union
     unsigned int __writer_wakeup;
     unsigned int __nr_readers_queued;
     unsigned int __nr_writers_queued;
+#if __BYTE_ORDER == __BIG_ENDIAN
+    unsigned char __pad1;
+    unsigned char __pad2;
+    unsigned char __shared;
+    /* FLAGS must stay at this position in the structure to maintain
+       binary compatibility.  */
+    unsigned char __flags;
+#else
     /* FLAGS must stay at this position in the structure to maintain
        binary compatibility.  */
-    unsigned int __flags;
+    unsigned char __flags;
+    unsigned char __shared;
+    unsigned char __pad1;
+    unsigned char __pad2;
+#endif
     int __writer;
   } __data;
   char __size[__SIZEOF_PTHREAD_RWLOCK_T];
index e0643a9f3b2c2faf70cddaf712dab2146ba5083d..66a4d7b3604ec5f4a9c18dd4b4f1dbfff09c8973 100644 (file)
@@ -1,5 +1,5 @@
 /* low level locking for pthread library.  Generic futex-using version.
-   Copyright (C) 2003, 2005 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2005, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -63,20 +63,8 @@ __lll_timedlock_wait (int *futex, const struct timespec *abstime)
 }
 
 
-/* These don't get included in libc.so  */
+/* This function doesn't get included in libc.so  */
 #ifdef IS_IN_libpthread
-int
-lll_unlock_wake_cb (int *futex)
-{
-  int val = atomic_exchange_rel (futex, 0);
-
-  if (__builtin_expect (val > 1, 0))
-    lll_futex_wake (futex, 1);
-
-  return 0;
-}
-
-
 int
 __lll_timedwait_tid (int *tidp, const struct timespec *abstime)
 {
@@ -114,5 +102,4 @@ __lll_timedwait_tid (int *tidp, const struct timespec *abstime)
 
   return 0;
 }
-
 #endif
index 4bae953251408d6977b96970a1c2dc8230f132ca..15cf1478fd42c370495fb681b251bc18f0b875a7 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -34,6 +34,7 @@
 #define FUTEX_LOCK_PI          6
 #define FUTEX_UNLOCK_PI                7
 #define FUTEX_TRYLOCK_PI       8
+#define FUTEX_PRIVATE_FLAG     128
 
 /* Initializer for compatibility lock. */
 #define LLL_MUTEX_LOCK_INITIALIZER (0)
@@ -267,8 +268,6 @@ typedef int lll_lock_t;
 #define LLL_LOCK_INITIALIZER           (0)
 #define LLL_LOCK_INITIALIZER_LOCKED    (1)
 
-extern int lll_unlock_wake_cb (int *__futex) attribute_hidden;
-
 /* The states of a lock are:
     0  -  untaken
     1  -  taken by one user
index a44ee95e1860561265a5f4948b3eabe029235e0b..3fb2186d21ed4f452a94fa2882a971b1b93e7a61 100644 (file)
@@ -126,3 +126,9 @@ extern int __local_multiple_threads attribute_hidden;
 # define NO_CANCELLATION 1
 
 #endif
+
+#ifndef __ASSEMBLER__
+# define RTLD_SINGLE_THREAD_P \
+  __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
+                                  header.multiple_threads) == 0, 1)
+#endif
index eda0a2fbe91f31f5520dd07e568bb24a40c5ac65..166a6c6aee3f8c08cbe06431d0aafd17803de7c6 100644 (file)
@@ -20,6 +20,8 @@
 #ifndef _BITS_PTHREADTYPES_H
 #define _BITS_PTHREADTYPES_H   1
 
+#include <endian.h>
+
 #if _MIPS_SIM == _ABI64
 # define __SIZEOF_PTHREAD_ATTR_T 56
 # define __SIZEOF_PTHREAD_MUTEX_T 40
@@ -157,9 +159,9 @@ typedef union
     unsigned int __nr_readers_queued;
     unsigned int __nr_writers_queued;
     int __writer;
-    int __pad1;
+    int __shared;
+    unsigned long int __pad1;
     unsigned long int __pad2;
-    unsigned long int __pad3;
     /* FLAGS must stay at this position in the structure to maintain
        binary compatibility.  */
     unsigned int __flags;
@@ -173,9 +175,21 @@ typedef union
     unsigned int __writer_wakeup;
     unsigned int __nr_readers_queued;
     unsigned int __nr_writers_queued;
+#if __BYTE_ORDER == __BIG_ENDIAN
+    unsigned char __pad1;
+    unsigned char __pad2;
+    unsigned char __shared;
     /* FLAGS must stay at this position in the structure to maintain
        binary compatibility.  */
-    unsigned int __flags;
+    unsigned char __flags;
+#else
+    /* FLAGS must stay at this position in the structure to maintain
+       binary compatibility.  */
+    unsigned char __flags;
+    unsigned char __shared;
+    unsigned char __pad1;
+    unsigned char __pad2;
+#endif
     int __writer;
   } __data;
 # endif
index 36a20f164a2267374da727565554c1c774a29a55..4542e5b91ff0316b28ba23dda97888cf20535ae0 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -35,6 +35,7 @@
 #define FUTEX_LOCK_PI          6
 #define FUTEX_UNLOCK_PI                7
 #define FUTEX_TRYLOCK_PI       8
+#define FUTEX_PRIVATE_FLAG     128
 
 /* Initializer for compatibility lock. */
 #define LLL_MUTEX_LOCK_INITIALIZER (0)
@@ -234,8 +235,6 @@ typedef int lll_lock_t;
 #define LLL_LOCK_INITIALIZER           (0)
 #define LLL_LOCK_INITIALIZER_LOCKED    (1)
 
-extern int lll_unlock_wake_cb (int *__futex) attribute_hidden;
-
 /* The states of a lock are:
     0  -  untaken
     1  -  taken by one user