* iconvdata/gbk.c (BODY): Make buf and cp char instead of unsigned
authorUlrich Drepper <drepper@redhat.com>
Sat, 28 Jul 2007 20:16:07 +0000 (20:16 +0000)
committerUlrich Drepper <drepper@redhat.com>
Sat, 28 Jul 2007 20:16:07 +0000 (20:16 +0000)
char array resp. pointer.
* iconvdata/iso-2022-kr.c (BODY): Make buf unsigned char instead of
char array.
* iconvdata/cns11643.h (cns11643_to_ucs4): Change first argument
to const unsigned char **.
(ucs4_to_cns11643): Change second argument to unsigned char *.
* iconvdata/euc-tw.c (BODY): Change endp type to
const unsigned char *.
* iconvdata/iso-ir-165.h (ucs4_to_isoir165): Change second argument
to unsigned char *.
* iconvdata/ibm1008_420.c (LOOP_NEED_FLAGS): Don't define.
* iconvdata/iso-2022-cn.c (BODY): Change buf to unsigned char array.
* iconvdata/iso-2022-cn-ext.c (BODY): Change buf, tmpbuf, tmp
types to unsigned char pointers/arrays instead of char.
* iconvdata/jis0201.h (ucs4_to_jisx0201): Change second argument
to unsigned char *.
* iconvdata/jis0208.h (ucs4_to_jisx0208): Likewise.
* iconvdata/jis0212.h: Include assert.h.
(ucs4_to_jisx0212): Change second argument to unsigned char *.
assert that if cp[0] is not '\0', cp[1] is not '\0' either instead
of trying to handle that.
* iconvdata/euc-kr.c (euckr_from_ucs4): Initialize also cp[1] to
shut up a warning.
* iconvdata/euc-jp-ms.c (from_ucs4_lat1, from_ucs4_greek,
from_ucs4_cjk, from_ucs4_cjkcpt, from_ucs4_extra): Change type to
two dimensional const unsigned char arrays.
(BODY): Cast "" to (const unsigned char *) for assignment to cp.
Initialize endp to inptr to shut up a warning.

43 files changed:
ChangeLog
iconvdata/cns11643.h
iconvdata/euc-jp-ms.c
iconvdata/euc-kr.c
iconvdata/euc-tw.c
iconvdata/gbk.c
iconvdata/ibm1008_420.c
iconvdata/iso-2022-cn-ext.c
iconvdata/iso-2022-cn.c
iconvdata/iso-2022-kr.c
iconvdata/iso-ir-165.h
iconvdata/jis0201.h
iconvdata/jis0208.h
iconvdata/jis0212.h
nptl/ChangeLog
nptl/allocatestack.c
nptl/init.c
nptl/pthread_create.c
nptl/sysdeps/alpha/tls.h
nptl/sysdeps/i386/tls.h
nptl/sysdeps/ia64/tls.h
nptl/sysdeps/powerpc/tls.h
nptl/sysdeps/pthread/aio_misc.h
nptl/sysdeps/pthread/gai_misc.h
nptl/sysdeps/s390/tls.h
nptl/sysdeps/sh/tls.h
nptl/sysdeps/sparc/tls.h
nptl/sysdeps/unix/sysv/linux/alpha/lowlevellock.h
nptl/sysdeps/unix/sysv/linux/alpha/pthread_once.c
nptl/sysdeps/unix/sysv/linux/fork.c
nptl/sysdeps/unix/sysv/linux/ia64/lowlevellock.h
nptl/sysdeps/unix/sysv/linux/ia64/pthread_once.c
nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h
nptl/sysdeps/unix/sysv/linux/powerpc/pthread_once.c
nptl/sysdeps/unix/sysv/linux/rtld-lowlevel.h
nptl/sysdeps/unix/sysv/linux/s390/lowlevellock.h
nptl/sysdeps/unix/sysv/linux/s390/pthread_once.c
nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.h
nptl/sysdeps/unix/sysv/linux/sparc/lowlevellock.h
nptl/sysdeps/unix/sysv/linux/sparc/pthread_once.c
nptl/sysdeps/unix/sysv/linux/unregister-atfork.c
nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h
nptl/sysdeps/x86_64/tls.h

index c591d31..1c0e739 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,35 @@
+2007-07-26  Jakub Jelinek  <jakub@redhat.com>
+
+       * iconvdata/gbk.c (BODY): Make buf and cp char instead of unsigned
+       char array resp. pointer.
+       * iconvdata/iso-2022-kr.c (BODY): Make buf unsigned char instead of
+       char array.
+       * iconvdata/cns11643.h (cns11643_to_ucs4): Change first argument
+       to const unsigned char **.
+       (ucs4_to_cns11643): Change second argument to unsigned char *.
+       * iconvdata/euc-tw.c (BODY): Change endp type to
+       const unsigned char *.
+       * iconvdata/iso-ir-165.h (ucs4_to_isoir165): Change second argument
+       to unsigned char *.
+       * iconvdata/ibm1008_420.c (LOOP_NEED_FLAGS): Don't define.
+       * iconvdata/iso-2022-cn.c (BODY): Change buf to unsigned char array.
+       * iconvdata/iso-2022-cn-ext.c (BODY): Change buf, tmpbuf, tmp
+       types to unsigned char pointers/arrays instead of char.
+       * iconvdata/jis0201.h (ucs4_to_jisx0201): Change second argument
+       to unsigned char *.
+       * iconvdata/jis0208.h (ucs4_to_jisx0208): Likewise.
+       * iconvdata/jis0212.h: Include assert.h.
+       (ucs4_to_jisx0212): Change second argument to unsigned char *.
+       assert that if cp[0] is not '\0', cp[1] is not '\0' either instead
+       of trying to handle that.
+       * iconvdata/euc-kr.c (euckr_from_ucs4): Initialize also cp[1] to
+       shut up a warning.
+       * iconvdata/euc-jp-ms.c (from_ucs4_lat1, from_ucs4_greek,
+       from_ucs4_cjk, from_ucs4_cjkcpt, from_ucs4_extra): Change type to
+       two dimensional const unsigned char arrays.
+       (BODY): Cast "" to (const unsigned char *) for assignment to cp.
+       Initialize endp to inptr to shut up a warning.
+
 2007-07-20  Jakub Jelinek  <jakub@redhat.com>
 
        [BZ #4772]
index 125f55f..9d7968c 100644 (file)
@@ -1,5 +1,6 @@
 /* Access functions for CNS 11643 handling.
-   Copyright (C) 1998,1999,2000,2001,2002,2003 Free Software Foundation, Inc.
+   Copyright (C) 1998,1999,2000,2001,2002,2003,2007
+   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
 
@@ -41,7 +42,7 @@ extern const uint32_t __cns11643l15_to_ucs4_tab[];
 
 static inline uint32_t
 __attribute ((always_inline))
-cns11643_to_ucs4 (const char **s, size_t avail, unsigned char offset)
+cns11643_to_ucs4 (const unsigned char **s, size_t avail, unsigned char offset)
 {
   unsigned char ch = *(*s);
   unsigned char ch2;
@@ -142,7 +143,7 @@ extern const char __cns11643_from_ucs4p2c_tab[][3];
 
 static inline size_t
 __attribute ((always_inline))
-ucs4_to_cns11643 (uint32_t wch, char *s, size_t avail)
+ucs4_to_cns11643 (uint32_t wch, unsigned char *s, size_t avail)
 {
   unsigned int ch = (unsigned int) wch;
   char buf[2];
index 1c1cc2b..79907bd 100644 (file)
@@ -1,5 +1,5 @@
 /* Mapping tables for EUCJP-MS handling.
-   Copyright (C) 1998,1999,2000,2001,2003 Free Software Foundation, Inc.
+   Copyright (C) 1998,1999,2000,2001,2003,2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by MORIYAMA Masayuki <msyk@mtg.biglobe.ne.jp>, 2003.
 
@@ -158,7 +158,7 @@ static const uint16_t cjk_block_ibm[268] =
  /* 0x8ff4fd */ 0xfa2d, 0x9ed1
 };
 
-static const char from_ucs4_lat1[256][2] =
+static const unsigned char from_ucs4_lat1[256][2] =
 {
   /* start = 0x0000, end = 0x00ff */
   [    0] = "\x00\x00",  [    1] = "\x01\x00",  [    2] = "\x02\x00",
@@ -244,7 +244,7 @@ static const char from_ucs4_lat1[256][2] =
   [  255] = "\xab\x73"
 };
 
-static const char from_ucs4_greek[864][2] =
+static const unsigned char from_ucs4_greek[864][2] =
 {
   /* start = 0x0100, end = 0x045f */
   [    0] = "\xaa\x27",  [    1] = "\xab\x27",  [    2] = "\xaa\x25",
@@ -351,7 +351,7 @@ static const char from_ucs4_greek[864][2] =
   [  860] = "\xa7\x7c",  [  862] = "\xa7\x7d",  [  863] = "\xa7\x7e"
 };
 
-static const char from_ucs4_cjk[32662][2] =
+static const unsigned char from_ucs4_cjk[32662][2] =
 {
   /* start = 0x2010, end = 0x9fa5 */
   [    0] = "\xa1\xbe",  [    4] = "\xa1\xbd",  [    5] = "\xa1\xbd",
@@ -4556,7 +4556,7 @@ static const char from_ucs4_cjk[32662][2] =
   [32661] = "\xed\x63"
 };
 
-static const char from_ucs4_cjkcpt[261][2] =
+static const unsigned char from_ucs4_cjkcpt[261][2] =
 {
   /* start = 0xf929, end = 0xfa2d */
   [    0] = "\xf4\x45",  [  179] = "\xf4\x72",  [  229] = "\xf4\x34",
@@ -4573,7 +4573,7 @@ static const char from_ucs4_cjkcpt[261][2] =
   [  260] = "\xf4\x7d"
 };
 
-static const char from_ucs4_extra[229][2] =
+static const unsigned char from_ucs4_extra[229][2] =
 {
   /* start = 0xff01, end = 0xffe5 */
   [    0] = "\xa1\xaa",  [    1] = "\xf4\x2a",  [    2] = "\xa1\xf4",
@@ -4719,7 +4719,7 @@ static const char from_ucs4_extra[229][2] =
          }                                                                   \
        else                                                                  \
          {                                                                   \
-           const unsigned char *endp;                                        \
+           const unsigned char *endp = inptr;                                \
            int mblen = 1;                                                    \
                                                                              \
            if (__builtin_expect(ch == 0x8f, 0))                              \
@@ -4758,7 +4758,7 @@ static const char from_ucs4_extra[229][2] =
                              ch = __UNKNOWN_10646_CHAR;                      \
                          }                                                   \
                        else                                                  \
-                           ch = __UNKNOWN_10646_CHAR;                        \
+                         ch = __UNKNOWN_10646_CHAR;                          \
                      }                                                       \
                    else if (ch2 <= 0xfe)                                     \
                      {                                                       \
@@ -4766,7 +4766,7 @@ static const char from_ucs4_extra[229][2] =
                        endp = inptr + mblen;                                 \
                      }                                                       \
                    else                                                      \
-                       ch = __UNKNOWN_10646_CHAR;                            \
+                     ch = __UNKNOWN_10646_CHAR;                              \
                  }                                                           \
              }                                                               \
            else if (__builtin_expect(0xa1 <= ch, 1))                         \
@@ -4804,10 +4804,10 @@ static const char from_ucs4_extra[229][2] =
                    endp = inptr + mblen;                                     \
                  }                                                           \
                else                                                          \
-                   ch = __UNKNOWN_10646_CHAR;                                \
+                 ch = __UNKNOWN_10646_CHAR;                                  \
              }                                                               \
            else                                                              \
-               ch = __UNKNOWN_10646_CHAR;                                    \
+             ch = __UNKNOWN_10646_CHAR;                                      \
                                                                              \
            if (__builtin_expect (ch, 1) == 0)                                \
              {                                                               \
@@ -4880,7 +4880,7 @@ static const char from_ucs4_extra[229][2] =
          {                                                                   \
            UNICODE_TAG_HANDLER (ch, 4);                                      \
            /* Illegal character.  */                                         \
-           cp = "";                                                          \
+           cp = (const unsigned char *) "";                                  \
          }                                                                   \
       }                                                                              \
     else                                                                     \
index 289ff4c..8e9120b 100644 (file)
@@ -1,5 +1,6 @@
 /* Mapping tables for EUC-KR handling.
-   Copyright (C) 1998, 1999, 2000-2002, 2003 Free Software Foundation, Inc.
+   Copyright (C) 1998, 1999, 2000-2002, 2003, 2007
+   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Jungshik Shin <jshin@pantheon.yale.edu>
    and Ulrich Drepper <drepper@cygnus.com>, 1998.
@@ -46,7 +47,7 @@ euckr_from_ucs4 (uint32_t ch, unsigned char *cp)
          cp[1] |= 0x80;
        }
       else
-       cp[0] = '\0';
+       cp[0] = cp[1] = '\0';
     }
   else
     {
index 7f10af8..e6d3e35 100644 (file)
@@ -1,5 +1,6 @@
 /* Mapping tables for EUC-TW handling.
-   Copyright (C) 1998, 1999, 2000-2002, 2003 Free Software Foundation, Inc.
+   Copyright (C) 1998, 1999, 2000-2002, 2003, 2007
+   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
 
@@ -74,7 +75,7 @@
        if (ch == 0x8e)                                                       \
          {                                                                   \
            /* This is code set 2: CNS 11643, planes 1 to 16.  */             \
-           const char *endp = inptr + 1;                                     \
+           const unsigned char *endp = inptr + 1;                            \
                                                                              \
            ch = cns11643_to_ucs4 (&endp, inend - inptr - 1, 0x80);           \
                                                                              \
index ad8a374..c90ad77 100644 (file)
@@ -13213,8 +13213,8 @@ static const char __gbk_from_ucs4_tab12[][2] =
 #define BODY \
   {                                                                          \
     uint32_t ch = get32 (inptr);                                             \
-    unsigned char buf[2];                                                    \
-    const unsigned char *cp = buf;                                           \
+    char buf[2];                                                             \
+    const char *cp = buf;                                                    \
                                                                              \
     if (ch <= L'\x7f')                                                       \
       /* It's plain ASCII.  */                                               \
index 7dd964a..0de95bf 100644 (file)
@@ -176,7 +176,6 @@ static const char __from_ibm420_to_ibm1008[256] =
     *outptr++ = ch;                                                          \
     ++inptr;                                                                 \
   }
-#define LOOP_NEED_FLAGS
 #include <iconv/loop.c>
 
 
@@ -190,7 +189,6 @@ static const char __from_ibm420_to_ibm1008[256] =
     *outptr++ = ch;                                                          \
     ++inptr;                                                                 \
   }
-#define LOOP_NEED_FLAGS
 #include <iconv/loop.c>
 
 /* Now define the toplevel functions.  */
index 3795d24..fd02d63 100644 (file)
@@ -1,5 +1,5 @@
 /* Conversion module for ISO-2022-CN-EXT.
-   Copyright (C) 2000-2002, 2004 Free Software Foundation, Inc.
+   Copyright (C) 2000-2002, 2004, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 2000.
 
@@ -304,8 +304,8 @@ enum
       {                                                                              \
        /* This is a character from CNS 11643 plane 3 or higher.              \
           XXX Currently GB7590 and GB13132 are not supported.  */            \
-       char buf[3];                                                          \
-       const char *tmp = buf;                                                \
+       unsigned char buf[3];                                                 \
+       const unsigned char *tmp = buf;                                       \
                                                                              \
        buf[1] = inptr[2];                                                    \
        buf[2] = inptr[3];                                                    \
@@ -426,7 +426,7 @@ enum
       }                                                                              \
     else                                                                     \
       {                                                                              \
-       char buf[2];                                                          \
+       unsigned char buf[2];                                                 \
        int used;                                                             \
                                                                              \
        if (set == GB2312_set || ((ann & SO_ann) != CNS11643_1_ann            \
@@ -456,7 +456,7 @@ enum
              used = CNS11643_2_set;                                          \
            else                                                              \
              {                                                               \
-               char tmpbuf[3];                                               \
+               unsigned char tmpbuf[3];                                      \
                                                                              \
                switch (0)                                                    \
                  {                                                           \
index 4e4ae76..4825d72 100644 (file)
@@ -1,5 +1,5 @@
 /* Conversion module for ISO-2022-CN.
-   Copyright (C) 1999, 2000-2002 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2000-2002, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999.
 
@@ -263,7 +263,7 @@ enum
       }                                                                              \
     else                                                                     \
       {                                                                              \
-       char buf[2];                                                          \
+       unsigned char buf[2];                                                 \
        int used;                                                             \
        size_t written = 0;                                                   \
                                                                              \
index 8df101b..1a16d21 100644 (file)
@@ -1,5 +1,5 @@
 /* Conversion module for ISO-2022-KR.
-   Copyright (C) 1998, 1999, 2000-2002 Free Software Foundation, Inc.
+   Copyright (C) 1998, 1999, 2000-2002, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
 
@@ -223,7 +223,7 @@ enum
       }                                                                              \
     else                                                                     \
       {                                                                              \
-       char buf[2];                                                          \
+       unsigned char buf[2];                                                 \
        size_t written;                                                       \
                                                                              \
        written = ucs4_to_ksc5601 (ch, buf, 2);                               \
index b28e45d..80d1a1c 100644 (file)
@@ -1,6 +1,6 @@
 /* Tables for conversion to and from ISO-IR-165.
    converting from UCS using gaps.
-   Copyright (C) 2000, 2003 Free Software Foundation, Inc.
+   Copyright (C) 2000, 2003, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 2000.
 
@@ -72,7 +72,7 @@ extern const char __isoir165_from_tab[];
 
 static inline size_t
 __attribute ((always_inline))
-ucs4_to_isoir165 (uint32_t wch, char *s, size_t avail)
+ucs4_to_isoir165 (uint32_t wch, unsigned char *s, size_t avail)
 {
   unsigned int ch = (unsigned int) wch;
   const char *cp;
index 391e6d3..6719b7a 100644 (file)
@@ -1,5 +1,5 @@
 /* Access functions for JISX0201 conversion.
-   Copyright (C) 1997, 1998, 1999, 2003 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1998, 1999, 2003, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
@@ -40,9 +40,9 @@ jisx0201_to_ucs4 (char ch)
 
 static inline size_t
 __attribute ((always_inline))
-ucs4_to_jisx0201 (uint32_t wch, char *s)
+ucs4_to_jisx0201 (uint32_t wch, unsigned char *s)
 {
-  char ch;
+  unsigned char ch;
 
   if (wch == 0xa5)
     ch = '\x5c';
index 329e30f..134b45c 100644 (file)
@@ -1,5 +1,6 @@
 /* Access functions for JISX0208 conversion.
-   Copyright (C) 1997,1998,1999,2000,2003,2005 Free Software Foundation, Inc.
+   Copyright (C) 1997,1998,1999,2000,2003,2005,2007
+   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
@@ -75,7 +76,7 @@ jisx0208_to_ucs4 (const unsigned char **s, size_t avail, unsigned char offset)
 
 static inline size_t
 __attribute ((always_inline))
-ucs4_to_jisx0208 (uint32_t wch, char *s, size_t avail)
+ucs4_to_jisx0208 (uint32_t wch, unsigned char *s, size_t avail)
 {
   unsigned int ch = (unsigned int) wch;
   const char *cp;
index ba439e5..1f61c25 100644 (file)
@@ -1,5 +1,5 @@
 /* Access functions for JISX0212 conversion.
-   Copyright (C) 1997, 1998, 1999, 2003 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1998, 1999, 2003, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
@@ -21,6 +21,7 @@
 #ifndef _JIS0212_H
 #define _JIS0212_H     1
 
+#include <assert.h>
 #include <gconv.h>
 #include <stdint.h>
 
@@ -79,7 +80,7 @@ jisx0212_to_ucs4 (const unsigned char **s, size_t avail, unsigned char offset)
 
 static inline size_t
 __attribute ((always_inline))
-ucs4_to_jisx0212 (uint32_t wch, char *s, size_t avail)
+ucs4_to_jisx0212 (uint32_t wch, unsigned char *s, size_t avail)
 {
   const struct jisx0212_idx *rp = __jisx0212_from_ucs_idx;
   unsigned int ch = (unsigned int) wch;
@@ -98,14 +99,11 @@ ucs4_to_jisx0212 (uint32_t wch, char *s, size_t avail)
     return __UNKNOWN_10646_CHAR;
 
   s[0] = cp[0];
-  if (cp[1] != '\0')
-    {
-      if (avail < 2)
-       return 0;
-
-      s[1] = cp[1];
-    }
+  assert (cp[1] != '\0');
+  if (avail < 2)
+    return 0;
 
+  s[1] = cp[1];
   return 2;
 }
 
index 68a7d3a..84681bb 100644 (file)
@@ -1,3 +1,88 @@
+2007-07-24  Jakub Jelinek  <jakub@redhat.com>
+
+       * allocatestack.c (__nptl_setxid, __wait_lookup_done): Replace
+       lll_private_futex_* (*) with lll_futex_* (*, LLL_PRIVATE).
+       * pthread_create.c (start_thread): Likewise.
+       * init.c (sighandler_setxid): Likewise.
+       * sysdeps/alpha/tls.h (THREAD_GSCOPE_RESET_FLAG): Likewise.
+       * sysdeps/ia64/tls.h (THREAD_GSCOPE_RESET_FLAG): Likewise.
+       * sysdeps/i386/tls.h (THREAD_GSCOPE_RESET_FLAG): Likewise.
+       * sysdeps/s390/tls.h (THREAD_GSCOPE_RESET_FLAG): Likewise.
+       * sysdeps/powerpc/tls.h (THREAD_GSCOPE_RESET_FLAG): Likewise.
+       * sysdeps/x86_64/tls.h (THREAD_GSCOPE_RESET_FLAG): Likewise.
+       * sysdeps/sparc/tls.h (THREAD_GSCOPE_RESET_FLAG): Likewise.
+       * sysdeps/sh/tls.h (THREAD_GSCOPE_RESET_FLAG): Likewise.
+       * sysdeps/pthread/aio_misc.h (AIO_MISC_NOTIFY, AIO_MISC_WAIT):
+       Likewise.
+       * sysdeps/pthread/gai_misc.h (GAI_MISC_NOTIFY, GAI_MISC_WAIT):
+       Likewise.
+       * sysdeps/unix/sysv/linux/unregister-atfork.c (__unregister_atfork):
+       Likewise.
+       * sysdeps/unix/sysv/linux/rtld-lowlevel.h (__rtld_waitzero,
+       __rtld_notify): Likewise.
+       * sysdeps/unix/sysv/linux/fork.c (__libc_fork): Likewise.
+       * sysdeps/unix/sysv/linux/powerpc/pthread_once.c (clear_once_control,
+       __pthread_once): Likewise.
+       * sysdeps/unix/sysv/linux/alpha/pthread_once.c (clear_once_control,
+       __pthread_once): Add LLL_PRIVATE as last argument to lll_futex_*.
+       * sysdeps/unix/sysv/linux/alpha/lowlevellock.h (FUTEX_PRIVATE_FLAG,
+       LLL_PRIVATE, LLL_SHARED, __lll_private_flag): Define.
+       (lll_futex_wait): Add private argument, define as wrapper around
+       lll_futex_timed_wait.
+       (lll_futex_timed_wait, lll_futex_wake): Add private argument,
+       use __lll_private_flag macro.
+       (lll_robust_mutex_dead, __lll_mutex_unlock, __lll_robust_mutex_unlock,
+       __lll_mutex_unlock_force): Pass LLL_SHARED as last arg to lll_futex_*.
+       * sysdeps/unix/sysv/linux/ia64/pthread_once.c (clear_once_control,
+       __pthread_once): Add LLL_PRIVATE as last argument to lll_futex_*.
+       * sysdeps/unix/sysv/linux/ia64/lowlevellock.h (FUTEX_PRIVATE_FLAG,
+       LLL_PRIVATE, LLL_SHARED, __lll_private_flag): Define.
+       (lll_futex_wait): Add private argument, define as wrapper around
+       lll_futex_timed_wait.
+       (lll_futex_timed_wait, lll_futex_wake): Add private argument,
+       use __lll_private_flag macro.
+       (__lll_mutex_unlock, __lll_robust_mutex_unlock, lll_wait_tid,
+       __lll_mutex_unlock_force): Pass LLL_SHARED as last arg to lll_futex_*.
+       * sysdeps/unix/sysv/linux/i386/lowlevellock.h (__lll_private_flag):
+       Define.
+       (lll_futex_timed_wait, lll_futex_wake): Use it.
+       (lll_private_futex_wait, lll_private_futex_timed_wait,
+       lll_private_futex_wake): Removed.
+       * sysdeps/unix/sysv/linux/s390/pthread_once.c (clear_once_control,
+       __pthread_once): Add LLL_PRIVATE as last argument to lll_futex_*.
+       * sysdeps/unix/sysv/linux/s390/lowlevellock.h (FUTEX_PRIVATE_FLAG,
+       LLL_PRIVATE, LLL_SHARED, __lll_private_flag): Define.
+       (lll_futex_wait): Add private argument, define as wrapper around
+       lll_futex_timed_wait.
+       (lll_futex_timed_wait, lll_futex_wake): Add private argument,
+       use __lll_private_flag macro.
+       (lll_robust_mutex_dead, __lll_mutex_unlock, __lll_robust_mutex_unlock,
+       lll_wait_tid, __lll_mutex_unlock_force): Pass LLL_SHARED as last arg
+       to lll_futex_*.
+       * sysdeps/unix/sysv/linux/powerpc/lowlevellock.h
+       (lll_private_futex_wait, lll_private_futex_timed_wait,
+       lll_private_futex_wake): Removed.
+       * sysdeps/unix/sysv/linux/x86_64/lowlevellock.h (__lll_private_flag):
+       Fix !__ASSUME_PRIVATE_FUTEX non-constant private case.
+       (lll_private_futex_wait, lll_private_futex_timed_wait,
+       lll_private_futex_wake): Removed.
+       * sysdeps/unix/sysv/linux/sparc/pthread_once.c (clear_once_control,
+       __pthread_once): Add LLL_PRIVATE as last argument to lll_futex_*.
+       * sysdeps/unix/sysv/linux/sparc/lowlevellock.h (FUTEX_PRIVATE_FLAG,
+       LLL_PRIVATE, LLL_SHARED, __lll_private_flag): Define.
+       (lll_futex_wait): Add private argument, define as wrapper around
+       lll_futex_timed_wait.
+       (lll_futex_timed_wait, lll_futex_wake): Add private argument,
+       use __lll_private_flag macro.
+       (lll_robust_mutex_dead, __lll_mutex_unlock, __lll_robust_mutex_unlock,
+       lll_wait_tid, __lll_mutex_unlock_force): Pass LLL_SHARED as last arg
+       to lll_futex_*.
+       * sysdeps/unix/sysv/linux/sh/lowlevellock.h (__lll_private_flag):
+       Define.
+       (lll_futex_timed_wait, lll_futex_wake): Use it.
+       (lll_private_futex_wait, lll_private_futex_timed_wait,
+       lll_private_futex_wake): Removed.
+
 2007-07-27  Jakub Jelinek  <jakub@redhat.com>
 
        * sysdeps/sparc/tls.h (tcbhead_t): Move gscope_flag to the end
index 145fe0a..ddf91e5 100644 (file)
@@ -951,7 +951,7 @@ __nptl_setxid (struct xid_command *cmdp)
   int cur = cmdp->cntr;
   while (cur != 0)
     {
-      lll_private_futex_wait (&cmdp->cntr, cur);
+      lll_futex_wait (&cmdp->cntr, cur, LLL_PRIVATE);
       cur = cmdp->cntr;
     }
 
@@ -1037,7 +1037,7 @@ __wait_lookup_done (void)
        continue;
 
       do
-       lll_private_futex_wait (gscope_flagp, THREAD_GSCOPE_FLAG_WAIT);
+       lll_futex_wait (gscope_flagp, THREAD_GSCOPE_FLAG_WAIT, LLL_PRIVATE);
       while (*gscope_flagp == THREAD_GSCOPE_FLAG_WAIT);
     }
 
@@ -1059,7 +1059,7 @@ __wait_lookup_done (void)
        continue;
 
       do
-       lll_private_futex_wait (gscope_flagp, THREAD_GSCOPE_FLAG_WAIT);
+       lll_futex_wait (gscope_flagp, THREAD_GSCOPE_FLAG_WAIT, LLL_PRIVATE);
       while (*gscope_flagp == THREAD_GSCOPE_FLAG_WAIT);
     }
 
index a1aec6b..95b9c7b 100644 (file)
@@ -216,7 +216,7 @@ sighandler_setxid (int sig, siginfo_t *si, void *ctx)
                        __xidcmd->id[1], __xidcmd->id[2]);
 
   if (atomic_decrement_val (&__xidcmd->cntr) == 0)
-    lll_private_futex_wake (&__xidcmd->cntr, 1);
+    lll_futex_wake (&__xidcmd->cntr, 1, LLL_PRIVATE);
 
   /* Reset the SETXID flag.  */
   struct pthread *self = THREAD_SELF;
@@ -225,7 +225,7 @@ sighandler_setxid (int sig, siginfo_t *si, void *ctx)
 
   /* And release the futex.  */
   self->setxid_futex = 1;
-  lll_private_futex_wake (&self->setxid_futex, 1);
+  lll_futex_wake (&self->setxid_futex, 1, LLL_PRIVATE);
 }
 
 
index b1f852d..ca55903 100644 (file)
@@ -385,7 +385,7 @@ start_thread (void *arg)
       /* Some other thread might call any of the setXid functions and expect
         us to reply.  In this case wait until we did that.  */
       do
-       lll_private_futex_wait (&pd->setxid_futex, 0);
+       lll_futex_wait (&pd->setxid_futex, 0, LLL_PRIVATE);
       while (pd->cancelhandling & SETXID_BITMASK);
 
       /* Reset the value so that the stack can be reused.  */
index 388a399..e77b1ff 100644 (file)
@@ -131,7 +131,7 @@ typedef struct
        = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag,             \
                               THREAD_GSCOPE_FLAG_UNUSED);                   \
       if (__res == THREAD_GSCOPE_FLAG_WAIT)                                 \
-       lll_private_futex_wake (&THREAD_SELF->header.gscope_flag, 1);        \
+       lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE);   \
     }                                                                       \
   while (0)
 #define THREAD_GSCOPE_SET_FLAG() \
index 1ffd4cf..b512742 100644 (file)
@@ -449,7 +449,7 @@ union user_desc_init
                    : "i" (offsetof (struct pthread, header.gscope_flag)),    \
                      "0" (THREAD_GSCOPE_FLAG_UNUSED));                       \
       if (__res == THREAD_GSCOPE_FLAG_WAIT)                                  \
-       lll_private_futex_wake (&THREAD_SELF->header.gscope_flag, 1);         \
+       lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE);    \
     }                                                                        \
   while (0)
 #define THREAD_GSCOPE_SET_FLAG() \
index a5b7b76..936ff01 100644 (file)
@@ -173,7 +173,7 @@ register struct pthread *__thread_self __asm__("r13");
        = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag,             \
                               THREAD_GSCOPE_FLAG_UNUSED);                   \
       if (__res == THREAD_GSCOPE_FLAG_WAIT)                                 \
-       lll_private_futex_wake (&THREAD_SELF->header.gscope_flag, 1);        \
+       lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE);   \
     }                                                                       \
   while (0)
 #define THREAD_GSCOPE_SET_FLAG() \
index 06c60e8..0f4d529 100644 (file)
@@ -190,7 +190,7 @@ register void *__thread_register __asm__ ("r13");
        = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag,             \
                               THREAD_GSCOPE_FLAG_UNUSED);                   \
       if (__res == THREAD_GSCOPE_FLAG_WAIT)                                 \
-       lll_private_futex_wake (&THREAD_SELF->header.gscope_flag, 1);        \
+       lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE);   \
     }                                                                       \
   while (0)
 #define THREAD_GSCOPE_SET_FLAG() \
index 25ab74e..f36825e 100644 (file)
@@ -30,7 +30,7 @@
 #define AIO_MISC_NOTIFY(waitlist) \
   do {                                                                       \
     if (*waitlist->counterp > 0 && --*waitlist->counterp == 0)               \
-      lll_private_futex_wake (waitlist->counterp, 1);                        \
+      lll_futex_wake (waitlist->counterp, 1, LLL_PRIVATE);                   \
   } while (0)
 
 #define AIO_MISC_WAIT(result, futex, timeout, cancel)                        \
@@ -49,8 +49,8 @@
        int status;                                                           \
        do                                                                    \
          {                                                                   \
-           status = lll_private_futex_timed_wait (futexaddr, oldval,         \
-                                                  timeout);                  \
+           status = lll_futex_timed_wait (futexaddr, oldval, timeout,        \
+                                          LLL_PRIVATE);                      \
            if (status != -EWOULDBLOCK)                                       \
              break;                                                          \
                                                                              \
index 5f69900..0a2686c 100644 (file)
@@ -31,7 +31,7 @@
 #define GAI_MISC_NOTIFY(waitlist) \
   do {                                                                       \
     if (*waitlist->counterp > 0 && --*waitlist->counterp == 0)               \
-      lll_private_futex_wake (waitlist->counterp, 1);                        \
+      lll_futex_wake (waitlist->counterp, 1, LLL_PRIVATE);                   \
   } while (0)
 
 #define GAI_MISC_WAIT(result, futex, timeout, cancel) \
@@ -50,8 +50,8 @@
        int status;                                                           \
        do                                                                    \
          {                                                                   \
-           status = lll_private_futex_timed_wait (futexaddr, oldval,         \
-                                                  timeout);                  \
+           status = lll_futex_timed_wait (futexaddr, oldval, timeout,        \
+                                          LLL_PRIVATE);                      \
            if (status != -EWOULDBLOCK)                                       \
              break;                                                          \
                                                                              \
index f10db8f..3be459e 100644 (file)
@@ -183,7 +183,7 @@ typedef struct
        = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag,             \
                               THREAD_GSCOPE_FLAG_UNUSED);                   \
       if (__res == THREAD_GSCOPE_FLAG_WAIT)                                 \
-       lll_private_futex_wake (&THREAD_SELF->header.gscope_flag, 1);        \
+       lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE);   \
     }                                                                       \
   while (0)
 #define THREAD_GSCOPE_SET_FLAG() \
index e07e29f..a2d4d56 100644 (file)
@@ -164,7 +164,7 @@ typedef struct
        = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag,             \
                               THREAD_GSCOPE_FLAG_UNUSED);                   \
       if (__res == THREAD_GSCOPE_FLAG_WAIT)                                 \
-       lll_private_futex_wake (&THREAD_SELF->header.gscope_flag, 1);        \
+       lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE);   \
     }                                                                       \
   while (0)
 #define THREAD_GSCOPE_SET_FLAG() \
index c4741c8..601b537 100644 (file)
@@ -157,7 +157,7 @@ register struct pthread *__thread_self __asm__("%g7");
        = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag,             \
                               THREAD_GSCOPE_FLAG_UNUSED);                   \
       if (__res == THREAD_GSCOPE_FLAG_WAIT)                                 \
-       lll_private_futex_wake (&THREAD_SELF->header.gscope_flag, 1);        \
+       lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE);   \
     }                                                                       \
   while (0)
 #define THREAD_GSCOPE_SET_FLAG() \
index 04ac006..5f08673 100644 (file)
 #define FUTEX_LOCK_PI          6
 #define FUTEX_UNLOCK_PI                7
 #define FUTEX_TRYLOCK_PI       8
+#define FUTEX_PRIVATE_FLAG     128
+
+/* 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.  */
+#define LLL_PRIVATE    0
+#define LLL_SHARED     FUTEX_PRIVATE_FLAG
+
+
+#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
+
 
 /* Initializer for compatibility lock. */
 #define LLL_MUTEX_LOCK_INITIALIZER (0)
 
-#define lll_futex_wait(futexp, val) \
-  ({                                                                         \
-    INTERNAL_SYSCALL_DECL (__err);                                           \
-    long int __ret;                                                          \
-    __ret = INTERNAL_SYSCALL (futex, __err, 4,                               \
-                             (futexp), FUTEX_WAIT, (val), 0);                \
-    INTERNAL_SYSCALL_ERROR_P (__ret, __err)? -__ret : __ret;                 \
-  })
+#define lll_futex_wait(futexp, val, private) \
+  lll_futex_timed_wait (futexp, val, NULL, private)
 
-#define lll_futex_timed_wait(futexp, val, timespec) \
+#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 (futex, __err, 4, (futexp),                     \
+                             __lll_private_flag (FUTEX_WAIT, private),       \
+                             (val), (timespec));                             \
     INTERNAL_SYSCALL_ERROR_P (__ret, __err)? -__ret : __ret;                 \
   })
 
-#define lll_futex_wake(futexp, nr) \
+#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 (futex, __err, 4, (futexp),                     \
+                             __lll_private_flag (FUTEX_WAKE, private),       \
+                             (nr), 0);                                       \
     INTERNAL_SYSCALL_ERROR_P (__ret, __err)? -__ret : __ret;                 \
   })
 
     {                                                                        \
       int *__futexp = &(futexv);                                             \
       atomic_or (__futexp, FUTEX_OWNER_DIED);                                \
-      lll_futex_wake (__futexp, 1);                                          \
+      lll_futex_wake (__futexp, 1, LLL_SHARED);                                      \
     }                                                                        \
   while (0)
 
@@ -198,7 +227,7 @@ __lll_mutex_unlock (int *futex)
 {
   int val = atomic_exchange_rel (futex, 0);
   if (__builtin_expect (val > 1, 0))
-    lll_futex_wake (futex, 1);
+    lll_futex_wake (futex, 1, LLL_SHARED);
 }
 #define lll_mutex_unlock(futex) __lll_mutex_unlock(&(futex))
 
@@ -208,7 +237,7 @@ __lll_robust_mutex_unlock (int *futex, int mask)
 {
   int val = atomic_exchange_rel (futex, 0);
   if (__builtin_expect (val & mask, 0))
-    lll_futex_wake (futex, 1);
+    lll_futex_wake (futex, 1, LLL_SHARED);
 }
 #define lll_robust_mutex_unlock(futex) \
   __lll_robust_mutex_unlock(&(futex), FUTEX_WAITERS)
@@ -218,7 +247,7 @@ static inline void __attribute__ ((always_inline))
 __lll_mutex_unlock_force (int *futex)
 {
   (void) atomic_exchange_rel (futex, 0);
-  lll_futex_wake (futex, 1);
+  lll_futex_wake (futex, 1, LLL_SHARED);
 }
 #define lll_mutex_unlock_force(futex) __lll_mutex_unlock_force(&(futex))
 
@@ -252,10 +281,10 @@ typedef int lll_lock_t;
    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);  \
+  do {                                                 \
+    __typeof (tid) __tid;                              \
+    while ((__tid = (tid)) != 0)                       \
+      lll_futex_wait (&(tid), __tid, LLL_SHARED);      \
   } while (0)
 
 extern int __lll_timedwait_tid (int *, const struct timespec *)
index 79a3c47..0e7e979 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2004, 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
@@ -28,7 +28,7 @@ clear_once_control (void *arg)
   pthread_once_t *once_control = (pthread_once_t *) arg;
 
   *once_control = 0;
-  lll_futex_wake (once_control, INT_MAX);
+  lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
 }
 
 int
@@ -72,7 +72,7 @@ __pthread_once (pthread_once_t *once_control, void (*init_routine) (void))
        break;
 
       /* Same generation, some other thread was faster. Wait.  */
-      lll_futex_wait (once_control, oldval);
+      lll_futex_wait (once_control, oldval, LLL_PRIVATE);
     }
 
   /* This thread is the first here.  Do the initialization.
@@ -88,7 +88,7 @@ __pthread_once (pthread_once_t *once_control, void (*init_routine) (void))
   atomic_increment (once_control);
 
   /* Wake up all other threads.  */
-  lll_futex_wake (once_control, INT_MAX);
+  lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
 
   return 0;
 }
index c6dadb5..f9913c3 100644 (file)
@@ -203,7 +203,7 @@ __libc_fork (void)
 
          if (atomic_decrement_and_test (&allp->handler->refcntr)
              && allp->handler->need_signal)
-           lll_private_futex_wake (allp->handler->refcntr, 1);
+           lll_futex_wake (allp->handler->refcntr, 1, LLL_PRIVATE);
 
          allp = allp->next;
        }
index 1709347..095f0e8 100644 (file)
 #define FUTEX_LOCK_PI          6
 #define FUTEX_UNLOCK_PI                7
 #define FUTEX_TRYLOCK_PI       8
+#define FUTEX_PRIVATE_FLAG     128
+
+/* 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.  */
+#define LLL_PRIVATE    0
+#define LLL_SHARED     FUTEX_PRIVATE_FLAG
+
+
+#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
+
 
 /* Delay in spinlock loop.  */
 #define BUSY_WAIT_NOP          asm ("hint @pause")
 /* Initializer for compatibility lock. */
 #define LLL_MUTEX_LOCK_INITIALIZER (0)
 
-#define lll_futex_wait(futex, val) lll_futex_timed_wait (futex, val, 0)
+#define lll_futex_wait(futex, val, private) \
+  lll_futex_timed_wait (futex, val, NULL, private)
 
-#define lll_futex_timed_wait(ftx, val, timespec)                       \
+#define lll_futex_timed_wait(ftx, val, timespec, private)              \
 ({                                                                     \
-   DO_INLINE_SYSCALL(futex, 4, (long) (ftx), FUTEX_WAIT, (int) (val),  \
-                    (long) (timespec));                                \
+   DO_INLINE_SYSCALL(futex, 4, (long) (ftx),                           \
+                    __lll_private_flag (FUTEX_WAIT, private),          \
+                    (int) (val), (long) (timespec));                   \
    _r10 == -1 ? -_retval : _retval;                                    \
 })
 
-#define lll_futex_wake(ftx, nr)                                                \
+#define lll_futex_wake(ftx, nr, private)                               \
 ({                                                                     \
-   DO_INLINE_SYSCALL(futex, 3, (long) (ftx), FUTEX_WAKE, (int) (nr));  \
+   DO_INLINE_SYSCALL(futex, 3, (long) (ftx),                           \
+                    __lll_private_flag (FUTEX_WAKE, private),          \
+                    (int) (nr));                                       \
    _r10 == -1 ? -_retval : _retval;                                    \
 })
 
@@ -188,7 +225,7 @@ extern int __lll_robust_timedlock_wait (int *futex, const struct timespec *)
     int __val = atomic_exchange_rel (__futex, 0);      \
                                                        \
     if (__builtin_expect (__val > 1, 0))               \
-      lll_futex_wake (__futex, 1);                     \
+      lll_futex_wake (__futex, 1, LLL_SHARED);         \
   }))
 #define lll_mutex_unlock(futex) \
   __lll_mutex_unlock(&(futex))
@@ -200,7 +237,7 @@ extern int __lll_robust_timedlock_wait (int *futex, const struct timespec *)
     int __val = atomic_exchange_rel (__futex, 0);      \
                                                        \
     if (__builtin_expect (__val & FUTEX_WAITERS, 0))   \
-      lll_futex_wake (__futex, 1);                     \
+      lll_futex_wake (__futex, 1, LLL_SHARED);         \
   }))
 #define lll_robust_mutex_unlock(futex) \
   __lll_robust_mutex_unlock(&(futex))
@@ -210,7 +247,7 @@ extern int __lll_robust_timedlock_wait (int *futex, const struct timespec *)
   ((void) ({                                   \
     int *__futex = (futex);                    \
     (void) atomic_exchange_rel (__futex, 0);   \
-    lll_futex_wake (__futex, 1);               \
+    lll_futex_wake (__futex, 1, LLL_SHARED);   \
   }))
 #define lll_mutex_unlock_force(futex) \
   __lll_mutex_unlock_force(&(futex))
@@ -241,12 +278,12 @@ typedef int lll_lock_t;
    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);         \
-    }                                          \
+  do                                                   \
+    {                                                  \
+      __typeof (tid) __tid;                            \
+      while ((__tid = (tid)) != 0)                     \
+       lll_futex_wait (&(tid), __tid, LLL_SHARED);     \
+    }                                                  \
   while (0)
 
 extern int __lll_timedwait_tid (int *, const struct timespec *)
index 3b07cc1..22e2dd3 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
 
@@ -30,7 +30,7 @@ clear_once_control (void *arg)
   pthread_once_t *once_control = (pthread_once_t *) arg;
 
   *once_control = 0;
-  lll_futex_wake (once_control, INT_MAX);
+  lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
 }
 
 
@@ -65,7 +65,7 @@ __pthread_once (once_control, init_routine)
          if (((oldval ^ newval) & -4) == 0)
            {
              /* Same generation, some other thread was faster. Wait.  */
-             lll_futex_wait (once_control, newval);
+             lll_futex_wait (once_control, newval, LLL_PRIVATE);
              continue;
            }
        }
@@ -84,7 +84,7 @@ __pthread_once (once_control, init_routine)
       atomic_increment (once_control);
 
       /* Wake up all other threads.  */
-      lll_futex_wake (once_control, INT_MAX);
+      lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
       break;
     }
 
index ab79534..cf91f21 100644 (file)
   })
   
   
-#define lll_private_futex_wait(futexp, val) \
-  lll_futex_timed_wait (futexp, val, NULL, LLL_PRIVATE)
-
-#define lll_private_futex_timed_wait(futexp, val, timeout) \
-  lll_futex_timed_wait (futexp, val, timeout, LLL_PRIVATE)
-
-#define lll_private_futex_wake(futexp, val) \
-  lll_futex_wake (futexp, val, LLL_PRIVATE)
-
 #ifdef UP
 # define __lll_acq_instr       ""
 # define __lll_rel_instr       ""
index 3224568..9690780 100644 (file)
@@ -30,7 +30,7 @@ clear_once_control (void *arg)
   pthread_once_t *once_control = (pthread_once_t *) arg;
 
   *once_control = 0;
-  lll_private_futex_wake (once_control, INT_MAX);
+  lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
 }
 
 
@@ -74,7 +74,7 @@ __pthread_once (pthread_once_t *once_control, void (*init_routine) (void))
        break;
 
       /* Same generation, some other thread was faster. Wait.  */
-      lll_private_futex_wait (once_control, oldval);
+      lll_futex_wait (once_control, oldval, LLL_PRIVATE);
     }
 
 
@@ -92,7 +92,7 @@ __pthread_once (pthread_once_t *once_control, void (*init_routine) (void))
   atomic_increment (once_control);
 
   /* Wake up all other threads.  */
-  lll_private_futex_wake (once_control, INT_MAX);
+  lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
 
   return 0;
 }
index 1aeff8f..4a49925 100644 (file)
        int val = word;                                                       \
        if (val == 0)                                                         \
          break;                                                              \
-       lll_private_futex_wait (&(word), val);                                \
+       lll_futex_wait (&(word), val, LLL_PRIVATE);                           \
       }                                                                              \
   } while (0)
 
 
 #define __rtld_notify(word) \
-  lll_private_futex_wake (&(word), 1)
+  lll_futex_wake (&(word), 1, LLL_PRIVATE)
 
 #endif
index d915fac..4758b63 100644 (file)
 #define FUTEX_LOCK_PI          6
 #define FUTEX_UNLOCK_PI                7
 #define FUTEX_TRYLOCK_PI       8
+#define FUTEX_PRIVATE_FLAG     128
+
+/* 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.  */
+#define LLL_PRIVATE    0
+#define LLL_SHARED     FUTEX_PRIVATE_FLAG
+
+
+#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
 
 /* Initializer for compatibility lock. */
 #define LLL_MUTEX_LOCK_INITIALIZER (0)
 
-#define lll_futex_wait(futex, val) \
-  ({                                                                         \
-     register unsigned long int __r2 asm ("2") = (unsigned long int) (futex); \
-     register unsigned long int __r3 asm ("3") = FUTEX_WAIT;                 \
-     register unsigned long int __r4 asm ("4") = (unsigned long int) (val);   \
-     register unsigned long int __r5 asm ("5") = 0ul;                        \
-     register unsigned long __result asm ("2");                                      \
-                                                                             \
-    __asm __volatile ("svc %b1"                                                      \
-                     : "=d" (__result)                                       \
-                     : "i" (SYS_futex), "0" (__r2), "d" (__r3),              \
-                       "d" (__r4), "d" (__r5)                                \
-                     : "cc", "memory" );                                     \
-    __result;                                                                \
-  })
-
+#define lll_futex_wait(futex, val, private) \
+  lll_futex_timed_wait (futex, val, NULL, private)
 
-#define lll_futex_timed_wait(futex, val, timespec) \
+#define lll_futex_timed_wait(futex, val, timespec, private) \
   ({                                                                         \
     register unsigned long int __r2 asm ("2") = (unsigned long int) (futex);  \
-    register unsigned long int __r3 asm ("3") = FUTEX_WAIT;                  \
+    register unsigned long int __r3 asm ("3")                                \
+      = __lll_private_flag (FUTEX_WAIT, private);                            \
     register unsigned long int __r4 asm ("4") = (unsigned long int) (val);    \
     register unsigned long int __r5 asm ("5") = (unsigned long int)(timespec);\
     register unsigned long int __result asm ("2");                           \
   })
 
 
-#define lll_futex_wake(futex, nr) \
+#define lll_futex_wake(futex, nr, private) \
   ({                                                                         \
     register unsigned long int __r2 asm ("2") = (unsigned long int) (futex);  \
-    register unsigned long int __r3 asm ("3") = FUTEX_WAKE;                  \
+    register unsigned long int __r3 asm ("3")                                \
+      __lll_private_flag (FUTEX_WAKE, private);                                      \
     register unsigned long int __r4 asm ("4") = (unsigned long int) (nr);     \
     register unsigned long int __result asm ("2");                           \
                                                                              \
       int *__futexp = &(futexv);                                             \
                                                                              \
       atomic_or (__futexp, FUTEX_OWNER_DIED);                                \
-      lll_futex_wake (__futexp, 1);                                          \
+      lll_futex_wake (__futexp, 1, LLL_SHARED);                                      \
     }                                                                        \
   while (0)
 
@@ -271,7 +291,7 @@ __lll_mutex_unlock (int *futex)
 
   lll_compare_and_swap (futex, oldval, newval, "slr %2,%2");
   if (oldval > 1)
-    lll_futex_wake (futex, 1);
+    lll_futex_wake (futex, 1, LLL_SHARED);
 }
 #define lll_mutex_unlock(futex) \
   __lll_mutex_unlock(&(futex))
@@ -286,7 +306,7 @@ __lll_robust_mutex_unlock (int *futex, int mask)
 
   lll_compare_and_swap (futex, oldval, newval, "slr %2,%2");
   if (oldval & mask)
-    lll_futex_wake (futex, 1);
+    lll_futex_wake (futex, 1, LLL_SHARED);
 }
 #define lll_robust_mutex_unlock(futex) \
   __lll_robust_mutex_unlock(&(futex), FUTEX_WAITERS)
@@ -297,7 +317,7 @@ __attribute__ ((always_inline))
 __lll_mutex_unlock_force (int *futex)
 {
   *futex = 0;
-  lll_futex_wake (futex, 1);
+  lll_futex_wake (futex, 1, LLL_SHARED);
 }
 #define lll_mutex_unlock_force(futex) \
   __lll_mutex_unlock_force(&(futex))
@@ -338,7 +358,7 @@ __lll_wait_tid (int *ptid)
   int tid;
 
   while ((tid = *ptid) != 0)
-    lll_futex_wait (ptid, tid);
+    lll_futex_wait (ptid, tid, LLL_SHARED);
 }
 #define lll_wait_tid(tid) __lll_wait_tid(&(tid))
 
index f29e23f..0012e9a 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
 
@@ -30,7 +30,7 @@ clear_once_control (void *arg)
   pthread_once_t *once_control = (pthread_once_t *) arg;
 
   *once_control = 0;
-  lll_futex_wake (once_control, INT_MAX);
+  lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
 }
 
 
@@ -76,7 +76,7 @@ __pthread_once (once_control, init_routine)
          if (((oldval ^ newval) & -4) == 0)
            {
              /* Same generation, some other thread was faster. Wait.  */
-             lll_futex_wait (once_control, newval);
+             lll_futex_wait (once_control, newval, LLL_PRIVATE);
              continue;
            }
        }
@@ -101,7 +101,7 @@ __pthread_once (once_control, init_routine)
                        : "m" (*once_control) : "cc" );
 
       /* Wake up all other threads.  */
-      lll_futex_wake (once_control, INT_MAX);
+      lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
       break;
     }
 
index 3092b27..be47bd7 100644 (file)
 #define LLL_SHARED     FUTEX_PRIVATE_FLAG
 
 
+#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
+
+
 /* Initializer for compatibility lock.  */
 #define LLL_MUTEX_LOCK_INITIALIZER             (0)
 #define LLL_MUTEX_LOCK_INITIALIZER_LOCKED      (1)
@@ -278,7 +303,7 @@ extern int __lll_mutex_unlock_wake (int *__futex) attribute_hidden;
             1: mov r1,r15"\
                : "=&r" (__ignore) : "r" (__futex), "r" (FUTEX_OWNER_DIED) \
                : "r0", "r1", "memory");        \
-           lll_futex_wake (__futex, 1, 0); })
+           lll_futex_wake (__futex, 1, LLL_SHARED); })
 
 #define lll_mutex_islocked(futex) \
   (futex != 0)
@@ -312,7 +337,8 @@ typedef int lll_lock_t;
     int __status;                                                            \
     register unsigned long __r3 asm ("r3") = SYS_futex;                              \
     register unsigned long __r4 asm ("r4") = (unsigned long) (futex);        \
-    register unsigned long __r5 asm ("r5") = FUTEX_WAIT;                     \
+    register unsigned long __r5 asm ("r5")                                   \
+      = __lll_private_flag (FUTEX_WAIT, private);                            \
     register unsigned long __r6 asm ("r6") = (unsigned long) (val);          \
     register unsigned long __r7 asm ("r7") = (timeout);                              \
     __asm __volatile (SYSCALL_WITH_INST_PAD                                  \
@@ -329,7 +355,8 @@ typedef int lll_lock_t;
     int __ignore;                                                            \
     register unsigned long __r3 asm ("r3") = SYS_futex;                              \
     register unsigned long __r4 asm ("r4") = (unsigned long) (futex);        \
-    register unsigned long __r5 asm ("r5") = FUTEX_WAKE;                     \
+    register unsigned long __r5 asm ("r5")                                   \
+      = __lll_private_flag (FUTEX_WAKE, private);                            \
     register unsigned long __r6 asm ("r6") = (unsigned long) (nr);           \
     register unsigned long __r7 asm ("r7") = 0;                                      \
     __asm __volatile (SYSCALL_WITH_INST_PAD                                  \
@@ -340,81 +367,6 @@ typedef int lll_lock_t;
   } while (0)
 
 
-#define lll_private_futex_wait(futex, val) \
-  lll_private_futex_timed_wait (futex, val, NULL)
-
-
-#ifdef __ASSUME_PRIVATE_FUTEX
-# define lll_private_futex_timed_wait(futex, val, timeout) \
-  ({                                                                         \
-    int __status;                                                            \
-    register unsigned long __r3 asm ("r3") = SYS_futex;                              \
-    register unsigned long __r4 asm ("r4") = (unsigned long) (futex);        \
-    register unsigned long __r5 asm ("r5") = FUTEX_WAIT | FUTEX_PRIVATE_FLAG; \
-    register unsigned long __r6 asm ("r6") = (unsigned long) (val);          \
-    register unsigned long __r7 asm ("r7") = (timeout);                              \
-    __asm __volatile (SYSCALL_WITH_INST_PAD                                  \
-                     : "=z" (__status)                                       \
-                     : "r" (__r3), "r" (__r4), "r" (__r5),                   \
-                       "r" (__r6), "r" (__r7)                                \
-                     : "memory", "t");                                       \
-    __status;                                                                \
-  })
-
-
-# define lll_private_futex_wake(futex, nr) \
-  do {                                                                       \
-    int __ignore;                                                            \
-    register unsigned long __r3 asm ("r3") = SYS_futex;                              \
-    register unsigned long __r4 asm ("r4") = (unsigned long) (futex);        \
-    register unsigned long __r5 asm ("r5") = FUTEX_WAKE | FUTEX_PRIVATE_FLAG; \
-    register unsigned long __r6 asm ("r6") = (unsigned long) (nr);           \
-    register unsigned long __r7 asm ("r7") = 0;                                      \
-    __asm __volatile (SYSCALL_WITH_INST_PAD                                  \
-                     : "=z" (__ignore)                                       \
-                     : "r" (__r3), "r" (__r4), "r" (__r5),                   \
-                       "r" (__r6), "r" (__r7)                                \
-                     : "memory", "t");                                       \
-  } while (0)
-
-
-#else
-# define lll_private_futex_timed_wait(futex, val, timeout) \
-  ({                                                                         \
-    int __status;                                                            \
-    register unsigned long __r3 asm ("r3") = SYS_futex;                              \
-    register unsigned long __r4 asm ("r4") = (unsigned long) (futex);        \
-    register unsigned long __r5 asm ("r5");                                  \
-    register unsigned long __r6 asm ("r6") = (unsigned long) (val);          \
-    register unsigned long __r7 asm ("r7") = (timeout);                              \
-    __r5 = THREAD_GETMEM (THREAD_SELF, header.private_futex);                \
-    __asm __volatile (SYSCALL_WITH_INST_PAD                                  \
-                     : "=z" (__status)                                       \
-                     : "r" (__r3), "r" (__r4), "r" (__r5),                   \
-                       "r" (__r6), "r" (__r7)                                \
-                     : "memory", "t");                                       \
-    __status;                                                                \
-  })
-
-
-# define lll_private_futex_wake(futex, nr) \
-  do {                                                                       \
-    int __ignore;                                                            \
-    register unsigned long __r3 asm ("r3") = SYS_futex;                              \
-    register unsigned long __r4 asm ("r4") = (unsigned long) (futex);        \
-    register unsigned long __r5 asm ("r5") = FUTEX_WAKE;                     \
-    register unsigned long __r6 asm ("r6") = (unsigned long) (nr);           \
-    register unsigned long __r7 asm ("r7") = 0;                                      \
-    __r5 |= THREAD_GETMEM (THREAD_SELF,        header.private_futex);                \
-    __asm __volatile (SYSCALL_WITH_INST_PAD                                  \
-                     : "=z" (__ignore)                                       \
-                     : "r" (__r3), "r" (__r4), "r" (__r5),                   \
-                       "r" (__r6), "r" (__r7)                                \
-                     : "memory", "t");                                       \
-  } while (0)
-#endif
-
-
 /* The states of a lock are:
     0  -  untaken
     1  -  taken by one user
@@ -438,7 +390,7 @@ extern int __lll_wait_tid (int *tid) attribute_hidden;
   do {                                                                       \
     __typeof (tid) *__tid = &(tid);                                          \
     while (*__tid != 0)                                                              \
-      lll_futex_wait (__tid, *__tid, 0);                                     \
+      lll_futex_wait (__tid, *__tid, LLL_SHARED);                            \
   } while (0)
 
 extern int __lll_timedwait_tid (int *tid, const struct timespec *abstime)
index 6548970..922e3c2 100644 (file)
 #define FUTEX_LOCK_PI          6
 #define FUTEX_UNLOCK_PI                7
 #define FUTEX_TRYLOCK_PI       8
+#define FUTEX_PRIVATE_FLAG     128
+
+
+/* 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.  */
+#define LLL_PRIVATE    0
+#define LLL_SHARED     FUTEX_PRIVATE_FLAG
+
+
+#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
+
 
 /* Initializer for compatibility lock. */
 #define LLL_MUTEX_LOCK_INITIALIZER (0)
 
-#define lll_futex_wait(futexp, val) \
-  ({                                                                         \
-    INTERNAL_SYSCALL_DECL (__err);                                           \
-    long int __ret;                                                          \
-                                                                             \
-    __ret = INTERNAL_SYSCALL (futex, __err, 4,                               \
-                             (futexp), FUTEX_WAIT, (val), 0);                \
-    __ret;                                                                   \
-  })
+#define lll_futex_wait(futexp, val, private) \
+  lll_futex_timed_wait (futexp, val, NULL, private)
 
-#define lll_futex_timed_wait(futexp, val, timespec) \
+#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 (futex, __err, 4, (futexp),                     \
+                             __lll_private_flag (FUTEX_WAIT, private),       \
+                             (val), (timespec));                             \
     __ret;                                                                   \
   })
 
-#define lll_futex_wake(futexp, nr) \
+#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 (futex, __err, 4, (futexp),                     \
+                             __lll_private_flag (FUTEX_WAKE, private),       \
+                             (nr), 0);                                       \
     __ret;                                                                   \
   })
 
     {                                                                        \
       int *__futexp = &(futexv);                                             \
       atomic_or (__futexp, FUTEX_OWNER_DIED);                                \
-      lll_futex_wake (__futexp, 1);                                          \
+      lll_futex_wake (__futexp, 1, LLL_SHARED);                                      \
     }                                                                        \
   while (0)
 
@@ -212,7 +241,7 @@ __lll_robust_mutex_timedlock (int *futex, const struct timespec *abstime,
     int *__futex = &(lock);                                                  \
     int __val = atomic_exchange_24_rel (__futex, 0);                         \
     if (__builtin_expect (__val > 1, 0))                                     \
-      lll_futex_wake (__futex, 1);                                           \
+      lll_futex_wake (__futex, 1, LLL_SHARED);                               \
   }))
 
 #define lll_robust_mutex_unlock(lock) \
@@ -220,14 +249,14 @@ __lll_robust_mutex_timedlock (int *futex, const struct timespec *abstime,
     int *__futex = &(lock);                                                  \
     int __val = atomic_exchange_rel (__futex, 0);                            \
     if (__builtin_expect (__val & FUTEX_WAITERS, 0))                         \
-      lll_futex_wake (__futex, 1);                                           \
+      lll_futex_wake (__futex, 1, LLL_SHARED);                               \
   }))
 
 #define lll_mutex_unlock_force(lock) \
   ((void) ({                                                                 \
     int *__futex = &(lock);                                                  \
     (void) atomic_exchange_24_rel (__futex, 0);                                      \
-    lll_futex_wake (__futex, 1);                                             \
+    lll_futex_wake (__futex, 1, LLL_SHARED);                                 \
   }))
 
 #define lll_mutex_islocked(futex) \
@@ -255,12 +284,12 @@ typedef int lll_lock_t;
    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);         \
-    }                                          \
+  do                                                   \
+    {                                                  \
+      __typeof (tid) __tid;                            \
+      while ((__tid = (tid)) != 0)                     \
+       lll_futex_wait (&(tid), __tid, LLL_SHARED);     \
+    }                                                  \
   while (0)
 
 extern int __lll_timedwait_tid (int *, const struct timespec *)
index 83fedef..22e2dd3 100644 (file)
@@ -30,7 +30,7 @@ clear_once_control (void *arg)
   pthread_once_t *once_control = (pthread_once_t *) arg;
 
   *once_control = 0;
-  lll_private_futex_wake (once_control, INT_MAX);
+  lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
 }
 
 
@@ -65,7 +65,7 @@ __pthread_once (once_control, init_routine)
          if (((oldval ^ newval) & -4) == 0)
            {
              /* Same generation, some other thread was faster. Wait.  */
-             lll_futex_wait (once_control, newval);
+             lll_futex_wait (once_control, newval, LLL_PRIVATE);
              continue;
            }
        }
@@ -84,7 +84,7 @@ __pthread_once (once_control, init_routine)
       atomic_increment (once_control);
 
       /* Wake up all other threads.  */
-      lll_private_futex_wake (once_control, INT_MAX);
+      lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
       break;
     }
 
index 240ce59..bc5b753 100644 (file)
@@ -104,7 +104,7 @@ __unregister_atfork (dso_handle)
       atomic_decrement (&deleted->handler->refcntr);
       unsigned int val;
       while ((val = deleted->handler->refcntr) != 0)
-       lll_private_futex_wait (&deleted->handler->refcntr, val);
+       lll_futex_wait (&deleted->handler->refcntr, val, LLL_PRIVATE);
 
       deleted = deleted->next;
     }
index 6323d48..7ec7def 100644 (file)
@@ -71,8 +71,8 @@
       : (fl))                                                                \
    : ({ unsigned int __fl = ((private) ^ FUTEX_PRIVATE_FLAG);                \
        asm ("andl %%fs:%P1, %0" : "+r" (__fl)                                \
-            : "i" offsetof (struct pthread, header.private_futex));          \
-       __fl | (fl); })
+            : "i" (offsetof (struct pthread, header.private_futex)));        \
+       __fl | (fl); }))
 # endif              
 #endif
 
@@ -215,15 +215,6 @@ LLL_STUB_UNWIND_INFO_END
   } while (0)
 
 
-#define lll_private_futex_wait(futex, val) \
-  lll_futex_timed_wait (futex, val, NULL, LLL_PRIVATE)
-
-#define lll_private_futex_timed_wait(futex, val, timeout) \
-  lll_futex_timed_wait (futex, val, timeout, LLL_PRIVATE)
-
-#define lll_private_futex_wake(futex, nr) \
-  lll_futex_wake (futex, nr, LLL_PRIVATE)
-
 
 /* Does not preserve %eax and %ecx.  */
 extern int __lll_mutex_lock_wait (int *__futex, int __val) attribute_hidden;
index 029848a..79db61c 100644 (file)
@@ -355,7 +355,7 @@ typedef struct
                    : "i" (offsetof (struct pthread, header.gscope_flag)),    \
                      "0" (THREAD_GSCOPE_FLAG_UNUSED));                       \
       if (__res == THREAD_GSCOPE_FLAG_WAIT)                                  \
-       lll_private_futex_wake (&THREAD_SELF->header.gscope_flag, 1);         \
+       lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE);    \
     }                                                                        \
   while (0)
 #define THREAD_GSCOPE_SET_FLAG() \