This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH 08/14] Add a new distinctive PTHREAD_MUTEX_NORMAL


From: Andi Kleen <ak@linux.intel.com>

There was a lot of discussion about the POSIX statement that
PTHREAD_MUTEX_NORMAL "shall" deadlock for mutexes that
get re-acquired by the same thread.

Elided mutexes act like recursive locks and would only deadlock
sometimes (any time an abort happens, e.g. at program startup
or when context switches or syscalls happen), but not guaranteed
every time.

This does not apply to DEFAULT mutexes.  But currently in glibc DEFAULT and
NORMAL is the same number.

The original elision code always disabled elision for any
pthread_mutexattr_settype/setkind()

So what we do here is:
- Add a new numeric value for PTHREAD_MUTEX_NORMAL
- Add a new symbol version for pthread_mutexattr_setkind
(and its aliases pthread_mutexattr_settype_np and __pthread_mutexattr_settype)
that disables elision for the new PTHREAD_MUTEX_NORMAL value
- The compat version for the old symbol version always
disables elision when a 0 type (old ambigious DEFAULT/NORMAL)
is passed (behaviour before this patch)

The result is that old binaries that use pthread_mutexattr_setkind()
for NORMAL/DEFAULT/TIMED_NP will disable elision, and new programs that
use it with PTHREAD_MUTEX_NORMAL only (but not default/timed) will
also disable elision. Any mutex not using pthread_mutexattr_setkind
or setting an ADAPTIVE type uses elision. The use of
pthread_mutexattr_setkind() for the default type is expected to be
rare, so this should not affect many programs.

Note an alternative would be to just disable nesting for these
normal mutexes (so always _xabort() before starting a transaction).
This would require additional checks in the fast path, and
since this case should be rare we just disable elision instead.

This adds new symbol versions to pthread, so the ABI test
files needed to be updated.

Thanks to Torvald Riegel, Roland McGrath, Richard Henderson, Rich Felker
for input on the discussion. This patch is based on the proposal from
Rich Felker, with some help from H.J. on the aliases.

nptl/:
2013-06-21  Andi Kleen  <ak@linux.intel.com>
            H.J. Lu  <hongjiu.lu@intel.com>
            Rich Felker <dalias@aerifal.cx>

	* Versions (pthread_mutexattr_settype,
	  pthread_mutexattr_setkind_np, __pthread_mutexattr_settype): Add
	  new version for GLIBC_2.18.
	* pthreadP.h: Use PTHREAD_MUTEX_DEFAULT to define derived
	  NORMAL mutexes. These disable elision in any case.
	* pthread_mutexattr_init.c (pthread_mutexattr_init):
	  Use PTHREAD_MUTEX_DEFAULT instead of PTHREAD_MUTEX_NORMAL.
	* pthread_mutex_init.c (default_mutexattr): Use
	  PTHREAD_MUTEX_DEFAULT as base value.
	  (__pthread_mutex_init): Add elision checks.
	* pthread_mutexattr_settype.c
	  (pthread_mutexattr_settype_worker): Rename from
	  __pthread_mutexattr_settype.
	  (__pthread_mutexattr_settype_new):
          Add new symbol version. Disable lock elision for NORMAL type.
	  (__pthread_mutexattr_settype_old): New function to disable lock
	  elision for old DEFAULT/NORMAL/TIMED type.
	* sysdeps/pthread/pthread.h (PTHREAD_MUTEX_NORMAL): Redefine
	  as new value.
        * pthreadP.h (PTHREAD_MUTEX_NORMAL_INT): Add.
	  (PTHREAD_MUTEX_KIND_MASK_NP): Update.
	  Change various NORMAL users to DEFAULT.
	* tst-mutex5.c: Use PTHREAD_MUTEX_DEFAULT.

/:
2013-06-21  Andi Kleen  <ak@linux.intel.com>

	* sysdeps/unix/sysv/linux/i386/nptl/libpthread.abilist: Add
          pthread_mutexattr_settype and related functions.
        * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/nptl/libpthread.abilist: dito.
        * sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libpthread.abilist: dito.
        * sysdeps/unix/sysv/linux/s390/s390-32/nptl/libpthread.abilist: dito.
        * sysdeps/unix/sysv/linux/s390/s390-64/nptl/libpthread.abilist: dito.
        * sysdeps/unix/sysv/linux/sh/nptl/libpthread.abilist: dito.
        * sysdeps/unix/sysv/linux/sparc/sparc32/nptl/libpthread.abilist: dito.
        * sysdeps/unix/sysv/linux/sparc/sparc64/nptl/libpthread.abilist: dito.
        * sysdeps/unix/sysv/linux/x86_64/64/nptl/libpthread.abilist: dito.
        * sysdeps/unix/sysv/linux/x86_64/x32/nptl/libpthread.abilist: dito.
---
 nptl/Versions                                      |  6 ++-
 nptl/pthreadP.h                                    | 12 +++--
 nptl/pthread_mutex_init.c                          | 24 ++++++++-
 nptl/pthread_mutexattr_init.c                      |  2 +-
 nptl/pthread_mutexattr_settype.c                   | 63 +++++++++++++++++++---
 nptl/sysdeps/pthread/pthread.h                     | 12 ++++-
 nptl/tst-mutex5.c                                  |  2 +-
 .../unix/sysv/linux/i386/nptl/libpthread.abilist   |  3 ++
 .../powerpc/powerpc32/fpu/nptl/libpthread.abilist  |  3 ++
 .../powerpc/powerpc64/nptl/libpthread.abilist      |  3 ++
 .../linux/s390/s390-32/nptl/libpthread.abilist     |  3 ++
 .../linux/s390/s390-64/nptl/libpthread.abilist     |  3 ++
 sysdeps/unix/sysv/linux/sh/nptl/libpthread.abilist |  3 ++
 .../linux/sparc/sparc32/nptl/libpthread.abilist    |  3 ++
 .../linux/sparc/sparc64/nptl/libpthread.abilist    |  3 ++
 .../sysv/linux/x86_64/64/nptl/libpthread.abilist   |  3 ++
 .../sysv/linux/x86_64/x32/nptl/libpthread.abilist  |  3 ++
 17 files changed, 133 insertions(+), 18 deletions(-)

diff --git a/nptl/Versions b/nptl/Versions
index bb11277..7a3da25 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -255,7 +255,11 @@ libpthread {
   GLIBC_2.18 {
     pthread_getattr_default_np;
     pthread_setattr_default_np;
-  }
+    /* Changed value of PTHREAD_MUTEX_NORMAL.  */
+    pthread_mutexattr_settype;
+    pthread_mutexattr_setkind_np;
+    __pthread_mutexattr_settype;
+  };
 
   GLIBC_PRIVATE {
     __pthread_initialize_minimal;
diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
index 789bbf6..56a3d47 100644
--- a/nptl/pthreadP.h
+++ b/nptl/pthreadP.h
@@ -60,7 +60,13 @@
 /* Internal mutex type value.  */
 enum
 {
-  PTHREAD_MUTEX_KIND_MASK_NP = 3,
+  PTHREAD_MUTEX_KIND_MASK_NP = 7,
+
+  /* NORMAL is the same as default, except it makes settype
+     disable elision. Internally we always treat it the same
+     as DEFAULT. So we use the same value as DEFAULT
+     internally.  */
+  PTHREAD_MUTEX_NORMAL_INT = PTHREAD_MUTEX_DEFAULT,
 
   PTHREAD_MUTEX_ELISION_NP    = 256,
   PTHREAD_MUTEX_NO_ELISION_NP = 512,
@@ -74,7 +80,7 @@ enum
   = PTHREAD_MUTEX_ROBUST_NORMAL_NP | PTHREAD_MUTEX_ADAPTIVE_NP,
   PTHREAD_MUTEX_PRIO_INHERIT_NP = 32,
   PTHREAD_MUTEX_PI_NORMAL_NP
-  = PTHREAD_MUTEX_PRIO_INHERIT_NP | PTHREAD_MUTEX_NORMAL,
+  = PTHREAD_MUTEX_PRIO_INHERIT_NP | PTHREAD_MUTEX_NORMAL_INT,
   PTHREAD_MUTEX_PI_RECURSIVE_NP
   = PTHREAD_MUTEX_PRIO_INHERIT_NP | PTHREAD_MUTEX_RECURSIVE_NP,
   PTHREAD_MUTEX_PI_ERRORCHECK_NP
@@ -91,7 +97,7 @@ enum
   = PTHREAD_MUTEX_PRIO_INHERIT_NP | PTHREAD_MUTEX_ROBUST_ADAPTIVE_NP,
   PTHREAD_MUTEX_PRIO_PROTECT_NP = 64,
   PTHREAD_MUTEX_PP_NORMAL_NP
-  = PTHREAD_MUTEX_PRIO_PROTECT_NP | PTHREAD_MUTEX_NORMAL,
+  = PTHREAD_MUTEX_PRIO_PROTECT_NP | PTHREAD_MUTEX_NORMAL_INT,
   PTHREAD_MUTEX_PP_RECURSIVE_NP
   = PTHREAD_MUTEX_PRIO_PROTECT_NP | PTHREAD_MUTEX_RECURSIVE_NP,
   PTHREAD_MUTEX_PP_ERRORCHECK_NP
diff --git a/nptl/pthread_mutex_init.c b/nptl/pthread_mutex_init.c
index 174d900..eaec824 100644
--- a/nptl/pthread_mutex_init.c
+++ b/nptl/pthread_mutex_init.c
@@ -26,8 +26,8 @@
 
 static const struct pthread_mutexattr default_mutexattr =
   {
-    /* Default is a normal mutex, not shared between processes.  */
-    .mutexkind = PTHREAD_MUTEX_NORMAL
+    /* Default is a default mutex, not shared between processes.  */
+    .mutexkind = PTHREAD_MUTEX_DEFAULT
   };
 
 
@@ -128,6 +128,26 @@ __pthread_mutex_init (mutex, mutexattr)
   if ((imutexattr->mutexkind & (PTHREAD_MUTEXATTR_FLAG_PSHARED
 				| PTHREAD_MUTEXATTR_FLAG_ROBUST)) != 0)
     mutex->__data.__kind |= PTHREAD_MUTEX_PSHARED_BIT;
+  
+  /* When a NORMAL mutex is explicitly specified, default to no elision
+     to satisfy POSIX's deadlock requirement. Also convert the NORMAL
+     type to DEFAULT, as the rest of the lock library doesn't have
+     the code paths for them.  */
+  if ((mutex->__data.__kind & PTHREAD_MUTEX_KIND_MASK_NP) 
+      == PTHREAD_MUTEX_NORMAL)
+    {
+      if ((imutexattr->mutexkind & PTHREAD_MUTEX_ELISION_FLAGS_NP) == 0)
+	mutex->__data.__kind |= PTHREAD_MUTEX_NO_ELISION_NP;
+      mutex->__data.__kind = PTHREAD_MUTEX_DEFAULT
+	| (mutex->__data.__kind & ~PTHREAD_MUTEX_KIND_MASK_NP);
+    }
+
+  /* Drop elision bits for any unusual flags, except for PSHARED.
+     These can be set implicitely now, but the other code paths don't
+     expect them for all cases.  */
+  if ((mutex->__data.__kind & 
+       (PTHREAD_MUTEXATTR_FLAG_BITS & ~PTHREAD_MUTEXATTR_FLAG_PSHARED)))
+       mutex->__data.__kind &= ~PTHREAD_MUTEX_ELISION_FLAGS_NP;
 
   /* Default values: mutex not used yet.  */
   // mutex->__count = 0;	already done by memset
diff --git a/nptl/pthread_mutexattr_init.c b/nptl/pthread_mutexattr_init.c
index b08eeab..0c955f1 100644
--- a/nptl/pthread_mutexattr_init.c
+++ b/nptl/pthread_mutexattr_init.c
@@ -30,7 +30,7 @@ __pthread_mutexattr_init (attr)
   /* We use bit 31 to signal whether the mutex is going to be
      process-shared or not.  By default it is zero, i.e., the mutex is
      not process-shared.  */
-  ((struct pthread_mutexattr *) attr)->mutexkind = PTHREAD_MUTEX_NORMAL;
+  ((struct pthread_mutexattr *) attr)->mutexkind = PTHREAD_MUTEX_DEFAULT;
 
   return 0;
 }
diff --git a/nptl/pthread_mutexattr_settype.c b/nptl/pthread_mutexattr_settype.c
index a85cdcb..afc1c3c 100644
--- a/nptl/pthread_mutexattr_settype.c
+++ b/nptl/pthread_mutexattr_settype.c
@@ -18,16 +18,14 @@
 
 #include <errno.h>
 #include <pthreadP.h>
+#include <shlib-compat.h>
 
-
-int
-__pthread_mutexattr_settype (attr, kind)
-     pthread_mutexattr_t *attr;
-     int kind;
+static int
+pthread_mutexattr_settype_worker (pthread_mutexattr_t *attr, int kind)
 {
   struct pthread_mutexattr *iattr;
 
-  if (kind < PTHREAD_MUTEX_NORMAL || kind > PTHREAD_MUTEX_ADAPTIVE_NP)
+  if (kind < PTHREAD_MUTEX_DEFAULT || kind > PTHREAD_MUTEX_NORMAL)
     return EINVAL;
 
   /* Cannot distinguish between DEFAULT and NORMAL. So any settype
@@ -41,5 +39,54 @@ __pthread_mutexattr_settype (attr, kind)
 
   return 0;
 }
-weak_alias (__pthread_mutexattr_settype, pthread_mutexattr_setkind_np)
-strong_alias (__pthread_mutexattr_settype, pthread_mutexattr_settype)
+
+int
+__pthread_mutexattr_settype_new (pthread_mutexattr_t *attr, int kind)
+{
+  return pthread_mutexattr_settype_worker (attr, kind);
+}
+
+weak_alias (__pthread_mutexattr_settype_new, __new_pthread_mutexattr_setkind_np)
+strong_alias (__pthread_mutexattr_settype_new, __new_pthread_mutexattr_settype)
+
+versioned_symbol (libpthread, __new_pthread_mutexattr_setkind_np,
+		  pthread_mutexattr_setkind_np, GLIBC_2_18);
+versioned_symbol (libpthread, __new_pthread_mutexattr_settype,
+		  pthread_mutexattr_settype, GLIBC_2_18);
+versioned_symbol (libpthread, __pthread_mutexattr_settype_new,
+		  __pthread_mutexattr_settype, GLIBC_2_18);
+
+#if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_18) \
+    || SHLIB_COMPAT (libpthread, GLIBC_2_1, GLIBC_2_18) \
+
+int
+attribute_compat_text_section
+__pthread_mutexattr_settype_old (pthread_mutexattr_t *attr, int kind)
+{
+  /* Force NORMAL (= no elision) for the old ambigious
+     DEFAULT/NORMAL kind.  */
+  if (kind == PTHREAD_MUTEX_DEFAULT)
+    kind |= PTHREAD_MUTEX_NORMAL;
+  return pthread_mutexattr_settype_worker (attr, kind);
+}
+
+
+# if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_18)
+weak_alias (__pthread_mutexattr_settype_old, __old_pthread_mutexattr_setkind_np)
+strong_alias (__pthread_mutexattr_settype_old, __old_pthread_mutexattr_settype)
+compat_symbol (libpthread,
+	       __old_pthread_mutexattr_setkind_np,
+	       pthread_mutexattr_setkind_np,
+	       GLIBC_2_0);
+compat_symbol (libpthread,
+	       __old_pthread_mutexattr_settype,
+	       __pthread_mutexattr_settype,
+	       GLIBC_2_0);
+# endif
+# if SHLIB_COMPAT (libpthread, GLIBC_2_1, GLIBC_2_18)
+compat_symbol (libpthread,
+	       __pthread_mutexattr_settype_old,
+	       pthread_mutexattr_settype,
+	       GLIBC_2_1);
+# endif
+#endif
diff --git a/nptl/sysdeps/pthread/pthread.h b/nptl/sysdeps/pthread/pthread.h
index 61d5346..df4b725 100644
--- a/nptl/sysdeps/pthread/pthread.h
+++ b/nptl/sysdeps/pthread/pthread.h
@@ -46,11 +46,19 @@ enum
   PTHREAD_MUTEX_ERRORCHECK_NP,
   PTHREAD_MUTEX_ADAPTIVE_NP
 #if defined __USE_UNIX98 || defined __USE_XOPEN2K8
+  /* Before glibc 2.18 this used to be identical to TIMED_NP.
+     Now with lock elision it's a new type that does not enable
+     elision when set by pthread_mutexattr_settype(), to satisfy
+     POSIX's deadlock requirement.  */
+  ,
+  PTHREAD_MUTEX_NORMAL
+#endif
+
+#if defined __USE_UNIX98 || defined __USE_XOPEN2K8
   ,
-  PTHREAD_MUTEX_NORMAL = PTHREAD_MUTEX_TIMED_NP,
   PTHREAD_MUTEX_RECURSIVE = PTHREAD_MUTEX_RECURSIVE_NP,
   PTHREAD_MUTEX_ERRORCHECK = PTHREAD_MUTEX_ERRORCHECK_NP,
-  PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL
+  PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_TIMED_NP
 #endif
 #ifdef __USE_GNU
   /* For compatibility.  */
diff --git a/nptl/tst-mutex5.c b/nptl/tst-mutex5.c
index c223f67..bb57c4e 100644
--- a/nptl/tst-mutex5.c
+++ b/nptl/tst-mutex5.c
@@ -26,7 +26,7 @@
 
 
 #ifndef TYPE
-# define TYPE PTHREAD_MUTEX_NORMAL
+# define TYPE PTHREAD_MUTEX_DEFAULT
 #endif
 
 
diff --git a/sysdeps/unix/sysv/linux/i386/nptl/libpthread.abilist b/sysdeps/unix/sysv/linux/i386/nptl/libpthread.abilist
index 865364e..3437fde 100644
--- a/sysdeps/unix/sysv/linux/i386/nptl/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/i386/nptl/libpthread.abilist
@@ -176,7 +176,10 @@ GLIBC_2.12
  pthread_setname_np F
 GLIBC_2.18
  GLIBC_2.18 A
+ __pthread_mutexattr_settype F
  pthread_getattr_default_np F
+ pthread_mutexattr_setkind_np F
+ pthread_mutexattr_settype F
  pthread_setattr_default_np F
 GLIBC_2.2
  GLIBC_2.2 A
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/nptl/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/nptl/libpthread.abilist
index c8a2a04..6927ce1 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/nptl/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/nptl/libpthread.abilist
@@ -176,7 +176,10 @@ GLIBC_2.12
  pthread_setname_np F
 GLIBC_2.18
  GLIBC_2.18 A
+ __pthread_mutexattr_settype F
  pthread_getattr_default_np F
+ pthread_mutexattr_setkind_np F
+ pthread_mutexattr_settype F
  pthread_setattr_default_np F
 GLIBC_2.2
  GLIBC_2.2 A
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libpthread.abilist
index 0faa1b8..1821f67 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libpthread.abilist
@@ -10,7 +10,10 @@ GLIBC_2.12
  pthread_setname_np F
 GLIBC_2.18
  GLIBC_2.18 A
+ __pthread_mutexattr_settype F
  pthread_getattr_default_np F
+ pthread_mutexattr_setkind_np F
+ pthread_mutexattr_settype F
  pthread_setattr_default_np F
 GLIBC_2.3
  GLIBC_2.3 A
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/nptl/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/nptl/libpthread.abilist
index 865364e..3437fde 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/nptl/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/nptl/libpthread.abilist
@@ -176,7 +176,10 @@ GLIBC_2.12
  pthread_setname_np F
 GLIBC_2.18
  GLIBC_2.18 A
+ __pthread_mutexattr_settype F
  pthread_getattr_default_np F
+ pthread_mutexattr_setkind_np F
+ pthread_mutexattr_settype F
  pthread_setattr_default_np F
 GLIBC_2.2
  GLIBC_2.2 A
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/nptl/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/nptl/libpthread.abilist
index 6613c09..f69b3c8 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/nptl/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/nptl/libpthread.abilist
@@ -10,7 +10,10 @@ GLIBC_2.12
  pthread_setname_np F
 GLIBC_2.18
  GLIBC_2.18 A
+ __pthread_mutexattr_settype F
  pthread_getattr_default_np F
+ pthread_mutexattr_setkind_np F
+ pthread_mutexattr_settype F
  pthread_setattr_default_np F
 GLIBC_2.2
  GLIBC_2.2 A
diff --git a/sysdeps/unix/sysv/linux/sh/nptl/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/nptl/libpthread.abilist
index 6613c09..f69b3c8 100644
--- a/sysdeps/unix/sysv/linux/sh/nptl/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/nptl/libpthread.abilist
@@ -10,7 +10,10 @@ GLIBC_2.12
  pthread_setname_np F
 GLIBC_2.18
  GLIBC_2.18 A
+ __pthread_mutexattr_settype F
  pthread_getattr_default_np F
+ pthread_mutexattr_setkind_np F
+ pthread_mutexattr_settype F
  pthread_setattr_default_np F
 GLIBC_2.2
  GLIBC_2.2 A
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/nptl/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/nptl/libpthread.abilist
index 4c75b17..809c823 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/nptl/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/nptl/libpthread.abilist
@@ -176,7 +176,10 @@ GLIBC_2.12
  pthread_setname_np F
 GLIBC_2.18
  GLIBC_2.18 A
+ __pthread_mutexattr_settype F
  pthread_getattr_default_np F
+ pthread_mutexattr_setkind_np F
+ pthread_mutexattr_settype F
  pthread_setattr_default_np F
 GLIBC_2.2
  GLIBC_2.2 A
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/nptl/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/nptl/libpthread.abilist
index a84c113..29de71d 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/nptl/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/nptl/libpthread.abilist
@@ -12,6 +12,9 @@ GLIBC_2.18
  GLIBC_2.18 A
  pthread_getattr_default_np F
  pthread_setattr_default_np F
+ __pthread_mutexattr_settype F
+ pthread_mutexattr_setkind_np F
+ pthread_mutexattr_settype F
 GLIBC_2.2
  GLIBC_2.2 A
  _IO_flockfile F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/nptl/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/64/nptl/libpthread.abilist
index 1b5192b..5efbc4b 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/nptl/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/nptl/libpthread.abilist
@@ -10,7 +10,10 @@ GLIBC_2.12
  pthread_setname_np F
 GLIBC_2.18
  GLIBC_2.18 A
+ __pthread_mutexattr_settype F
  pthread_getattr_default_np F
+ pthread_mutexattr_setkind_np F
+ pthread_mutexattr_settype F
  pthread_setattr_default_np F
 GLIBC_2.2.5
  GLIBC_2.2.5 A
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/nptl/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/nptl/libpthread.abilist
index 328f69a..8f5f841 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/nptl/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/nptl/libpthread.abilist
@@ -224,5 +224,8 @@ GLIBC_2.16
  write F
 GLIBC_2.18
  GLIBC_2.18 A
+ __pthread_mutexattr_settype F
  pthread_getattr_default_np F
+ pthread_mutexattr_setkind_np F
+ pthread_mutexattr_settype F
  pthread_setattr_default_np F
-- 
1.8.1.4


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]