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] New functions pthread_attr_[sg]et_default_np for defaultthread attributes


Hi,

Following the discussion on setting the default stack size for a
process, this patch implements API functions to get and set default
attributes for threads.  These functions can be used to get and set
the default values for attributes used during creation of threads in
the process.  This allows users to set default parameters just once
and then use pthread_create without any attributes to use the
customized defaults.  The way to do this is similar to the following:

pthread_attr_t attr;

pthread_attr_init (&attr);
pthread_attr_setstacksize (&attr, 1024 * 1024);
pthread_attr_set_default_np (&attr);

At this point ATTR may be destroyed and the rest of the program will
create threads with stack size of 1M.

The patch also includes a test case to verify that the functions work.
Tested on x86_64 and powerpc.  I'll write up a manual node for it
if/when this gets committed.

Siddhesh

	* Versions.def (libpthread): Add GLIBC_2.18.
	* sysdeps/unix/sysv/linux/i386/nptl/libpthread.abilist: Add
	GLIBC_2.18
	(GLIBC_2.18): Add pthread_attr_get_default_np and
	pthread_attr_set_default_np.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/nptl/libpthread.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libpthread.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/nptl/libpthread.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-64/nptl/libpthread.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/sh/nptl/libpthread.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/nptl/libpthread.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/nptl/libpthread.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/x86_64/64/nptl/libpthread.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/x86_64/x32/nptl/libpthread.abilist:
	Likewise.

nptl/ChangeLog:

	* Makefile (libpthread-routines): Add
	pthread_attr_set_default_np and pthread_attr_get_default_np.
	(tests): Add tst-default-attr.
	* Versions (libpthread): Add GLIBC_2.18.
	(GLIBC_2.18): Add pthread_attr_set_default_np and
	pthread_attr_get_default_np.
	* nptl-init.c (__pthread_initialize_minimal_internal):
	Initialize default guardsize.
	* pthread_attr_get_default_np.c: New file.
	* pthread_attr_set_default_np.c: New file.
	* pthread_create.c (__pthread_create_2_1): Allow default flags
	to be used.
	* sysdeps/pthread/pthread.h (pthread_attr_get_default_np,
	pthread_attr_set_default_np): Declare.
	* tst-default-attr.c: New test case.

ChangeLog.tile

	* ports/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libpthread.abilist:
	Add GLIBC_2.18.
	(GLIBC_2.18): Add pthread_attr_get_default_np and
	pthread_attr_set_default_np.
	* ports/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libpthread.abilist:
	Likewise.
	* ports/sysdeps/unix/sysv/linux/tile/tilepro/nptl/libpthread.abilist:
	Likewise.

ChangeLog.m68k
	* ports/sysdeps/unix/sysv/linux/m68k/coldfire/nptl/libpthread.abilist:
	Add GLIBC_2.18.
	(GLIBC_2.18): Add pthread_attr_get_default_np and
	pthread_attr_set_default_np.
	* ports/sysdeps/unix/sysv/linux/m68k/m680x0/nptl/libpthread.abilist:
	Likewise.

ChangeLog.ia64

	* ports/sysdeps/unix/sysv/linux/ia64/nptl/libpthread.abilist:
	Add GLIBC_2.18.
	(GLIBC_2.18): Add pthread_attr_get_default_np and
	pthread_attr_set_default_np.

ChangeLog.aarch64

	* ports/sysdeps/unix/sysv/linux/aarch64/nptl/libpthread.abilist:
	Add GLIBC_2.18.
	(GLIBC_2.18): Add pthread_attr_get_default_np and
	pthread_attr_set_default_np.

ChangeLog.alpha

	* ports/sysdeps/unix/sysv/linux/alpha/nptl/libpthread.abilist:
	Add GLIBC_2.18.
	(GLIBC_2.18): Add pthread_attr_get_default_np and
	pthread_attr_set_default_np.

ChangeLog.powerpc

	* ports/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libpthread.abilist:
	Add GLIBC_2.18.
	(GLIBC_2.18): Add pthread_attr_get_default_np and
	pthread_attr_set_default_np.

ChangeLog.arm

	* ports/sysdeps/unix/sysv/linux/arm/nptl/libpthread.abilist:
	Add GLIBC_2.18.
	(GLIBC_2.18): Add pthread_attr_get_default_np and
	pthread_attr_set_default_np.

ChangeLog.mips

	* ports/sysdeps/unix/sysv/linux/mips/mips32/nptl/libpthread.abilist:
	Add GLIBC_2.18.
	(GLIBC_2.18): Add pthread_attr_get_default_np and
	pthread_attr_set_default_np.
	* ports/sysdeps/unix/sysv/linux/mips/mips64/n32/nptl/libpthread.abilist:
	Likewise.
	* ports/sysdeps/unix/sysv/linux/mips/mips64/n64/nptl/libpthread.abilist:
	Likewise.

diff --git a/Versions.def b/Versions.def
index 7c7d1f8..8210a75 100644
--- a/Versions.def
+++ b/Versions.def
@@ -101,6 +101,7 @@ libpthread {
   GLIBC_2.6
   GLIBC_2.11
   GLIBC_2.12
+  GLIBC_2.18
   GLIBC_PRIVATE
 }
 libresolv {
diff --git a/nptl/Makefile b/nptl/Makefile
index 6af4b37..e7e226a 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -125,7 +125,8 @@ libpthread-routines = nptl-init vars events version \
 		      pthread_mutexattr_setprioceiling tpp \
 		      pthread_mutex_getprioceiling \
 		      pthread_mutex_setprioceiling \
-		      pthread_setname pthread_getname
+		      pthread_setname pthread_getname \
+		      pthread_attr_set_default_np pthread_attr_get_default_np
 #		      pthread_setuid pthread_seteuid pthread_setreuid \
 #		      pthread_setresuid \
 #		      pthread_setgid pthread_setegid pthread_setregid \
@@ -201,7 +202,7 @@ CFLAGS-pt-system.c = -fexceptions
 
 
 tests = tst-typesizes \
-	tst-attr1 tst-attr2 tst-attr3 \
+	tst-attr1 tst-attr2 tst-attr3 tst-default-attr \
 	tst-mutex1 tst-mutex2 tst-mutex3 tst-mutex4 tst-mutex5 tst-mutex6 \
 	tst-mutex7 tst-mutex8 tst-mutex9 tst-mutex5a tst-mutex7a \
 	tst-mutexpi1 tst-mutexpi2 tst-mutexpi3 tst-mutexpi4 tst-mutexpi5 \
diff --git a/nptl/Versions b/nptl/Versions
index 6a10375..69092e4 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -252,6 +252,11 @@ libpthread {
     pthread_setname_np; pthread_getname_np;
   };
 
+  GLIBC_2.18 {
+    pthread_attr_get_default_np;
+    pthread_attr_set_default_np;
+  }
+
   GLIBC_PRIVATE {
     __pthread_initialize_minimal;
     __pthread_clock_gettime; __pthread_clock_settime;
diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
index 23d3430..b18382a 100644
--- a/nptl/nptl-init.c
+++ b/nptl/nptl-init.c
@@ -424,6 +424,7 @@ __pthread_initialize_minimal_internal (void)
   /* Round the resource limit up to page size.  */
   limit.rlim_cur = (limit.rlim_cur + pagesz - 1) & -pagesz;
   default_attr.stacksize = limit.rlim_cur;
+  default_attr.guardsize = __getpagesize ();
 
 #ifdef SHARED
   /* Transfer the old value from the dynamic linker's internal location.  */
diff --git a/nptl/pthread_attr_get_default_np.c b/nptl/pthread_attr_get_default_np.c
new file mode 100644
index 0000000..0b2a81a
--- /dev/null
+++ b/nptl/pthread_attr_get_default_np.c
@@ -0,0 +1,35 @@
+/* Get the default attributes used by pthread_create in the process.
+   Copyright (C) 2013 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
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <stdlib.h>
+#include <pthreadP.h>
+#include <assert.h>
+
+int
+pthread_attr_get_default_np (pthread_attr_t *out)
+{
+  struct pthread_attr *real_out;
+
+  assert (sizeof (*out) >= sizeof (struct pthread_attr));
+  real_out = (struct pthread_attr *) out;
+
+  *real_out = default_attr;
+
+  return 0;
+}
diff --git a/nptl/pthread_attr_set_default_np.c b/nptl/pthread_attr_set_default_np.c
new file mode 100644
index 0000000..686d9a2
--- /dev/null
+++ b/nptl/pthread_attr_set_default_np.c
@@ -0,0 +1,71 @@
+/* Set the default attributes to be used by pthread_create in the process.
+   Copyright (C) 2013 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
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <stdlib.h>
+#include <pthreadP.h>
+#include <assert.h>
+
+int
+pthread_attr_set_default_np (const pthread_attr_t *in)
+{
+  struct pthread_attr *real_in;
+
+  assert (sizeof (*in) >= sizeof (struct pthread_attr));
+  real_in = (struct pthread_attr *) in;
+
+  /* Catch invalid values.  */
+  int policy = real_in->schedpolicy;
+
+  if (policy != SCHED_OTHER && policy != SCHED_FIFO && policy != SCHED_RR)
+    return EINVAL;
+
+  struct sched_param *param = &real_in->schedparam;
+
+  if (param->sched_priority > 0)
+    {
+      int min = sched_get_priority_min (policy);
+      int max = sched_get_priority_max (policy);
+
+      if (min == -1 || max == -1
+	  || param->sched_priority > max || param->sched_priority < min)
+	return EINVAL;
+    }
+
+  /* stacksize == 0 is fine.  It means that we don't change the current
+     value.  */
+  if (real_in->stacksize != 0 && real_in->stacksize < PTHREAD_STACK_MIN)
+    return EINVAL;
+
+  /* Everything is fine, so the values.  */
+  default_attr.schedparam = real_in->schedparam;
+  default_attr.schedpolicy = real_in->schedpolicy;
+  default_attr.flags = real_in->flags;
+  default_attr.guardsize = real_in->guardsize;
+  default_attr.stackaddr = real_in->stackaddr;
+  default_attr.cpuset = real_in->cpuset;
+  default_attr.cpusetsize = real_in->cpusetsize;
+
+  /* Mantain stacksize as a non-zero value.  This is a computed fallback that
+     we get on library initialization, so we don't want to overwrite it unless
+     there is a valid value to replace it.  */
+  if (real_in->stacksize > 0)
+    default_attr.stacksize = real_in->stacksize;
+
+  return 0;
+}
diff --git a/nptl/pthread_create.c b/nptl/pthread_create.c
index f81dcce..703cd62 100644
--- a/nptl/pthread_create.c
+++ b/nptl/pthread_create.c
@@ -507,8 +507,7 @@ __pthread_create_2_1 (newthread, attr, start_routine, arg)
 #endif
 
   /* Determine scheduling parameters for the thread.  */
-  if (attr != NULL
-      && __builtin_expect ((iattr->flags & ATTR_FLAG_NOTINHERITSCHED) != 0, 0)
+  if (__builtin_expect ((iattr->flags & ATTR_FLAG_NOTINHERITSCHED) != 0, 0)
       && (iattr->flags & (ATTR_FLAG_SCHED_SET | ATTR_FLAG_POLICY_SET)) != 0)
     {
       INTERNAL_SYSCALL_DECL (scerr);
diff --git a/nptl/sysdeps/pthread/pthread.h b/nptl/sysdeps/pthread/pthread.h
index 10bcb80..93a8b11 100644
--- a/nptl/sysdeps/pthread/pthread.h
+++ b/nptl/sysdeps/pthread/pthread.h
@@ -404,6 +404,14 @@ extern int pthread_attr_getaffinity_np (const pthread_attr_t *__attr,
 					cpu_set_t *__cpuset)
      __THROW __nonnull ((1, 3));
 
+/* Get the default attributes used by pthread_create in this process.  */
+extern int pthread_attr_get_default_np (pthread_attr_t *__attr)
+     __THROW __nonnull ((1));
+
+/* Set the default attributes to be used by pthread_create in this
+   process.  */
+extern int pthread_attr_set_default_np (const pthread_attr_t *__attr)
+     __THROW __nonnull ((1));
 
 /* Initialize thread attribute *ATTR with attributes corresponding to the
    already running thread TH.  It shall be called on uninitialized ATTR
diff --git a/nptl/tst-default-attr.c b/nptl/tst-default-attr.c
new file mode 100644
index 0000000..867e91e
--- /dev/null
+++ b/nptl/tst-default-attr.c
@@ -0,0 +1,161 @@
+/* Verify that pthread_attr_[gs]et_default work correctly.
+
+   Copyright (C) 2013 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
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <pthread.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+
+static size_t stacksize = 1024 * 1024;
+
+void *
+verify_result (pthread_attr_t *attr)
+{
+  int ret;
+  size_t stack;
+
+  if ((ret = pthread_attr_getstacksize (attr, &stack)) != 0)
+    {
+      printf ("pthread_attr_getstacksize failed: %s\n", strerror (ret));
+      return (void *) (uintptr_t) 1;
+    }
+
+  if (stacksize != stack)
+    {
+      printf ("pthread_attr_set_default failed for stacksize (%zu, %zu)\n",
+	      stacksize, stack);
+      return (void *) (uintptr_t) 1;
+    }
+
+  return NULL;
+}
+
+void *
+thr (void *unused)
+{
+  pthread_attr_t attr;
+  int ret;
+
+  /* To verify that the set_default_np worked.  */
+  puts ("verifying pthread_attr_get_default_np");
+  if ((ret = pthread_attr_get_default_np (&attr)) != 0)
+    {
+      printf ("pthread_attr_get_default_np failed: %s\n", strerror (ret));
+      return (void *) (uintptr_t) 1;
+    }
+
+  if (verify_result (&attr))
+    return (void *) (uintptr_t) 1;
+
+  /* To verify that the attributes actually got applied.  */
+  puts ("verifying pthread_getattr_np");
+  if ((ret = pthread_getattr_np (pthread_self (), &attr)) != 0)
+    {
+      printf ("pthread_getattr_np failed: %s\n", strerror (ret));
+      return (void *) (uintptr_t) 1;
+    }
+
+  return verify_result (&attr);
+}
+
+int
+run_threads (void)
+{
+  pthread_t t;
+  pthread_attr_t attr;
+  int ret, i;
+  void *tret;
+
+  if ((ret = pthread_attr_init (&attr)) != 0)
+    {
+      printf ("pthread_attr_init failed: %s\n", strerror (ret));
+      return 1;
+    }
+
+  if ((ret = pthread_attr_setstacksize (&attr, stacksize)) != 0)
+    {
+      printf ("pthread_attr_setstacksize failed: %s\n", strerror (ret));
+      return 1;
+    }
+
+  if ((ret = pthread_attr_set_default_np (&attr)) != 0)
+    {
+      printf ("pthread_attr_set_default_np failed: %s\n", strerror (ret));
+      return 1;
+    }
+
+  /* Run twice to ensure that the attributes do not get overwritten in the
+     first run somehow.  */
+  for (i = 0; i < 2; i++)
+    {
+      if ((ret = pthread_create (&t, NULL, thr, NULL)) != 0)
+	{
+	  printf ("pthread_create failed: %s\n", strerror (ret));
+	  return 1;
+	}
+
+      if ((ret = pthread_join (t, &tret)) != 0)
+	{
+	  printf ("pthread_join failed: %s\n", strerror (ret));
+	  return 1;
+	}
+
+      if (tret != NULL)
+	{
+	  puts ("Thread failed\n");
+	  return 1;
+	}
+    }
+
+  return 0;
+}
+
+int
+do_test (void)
+{
+  long pagesize = sysconf (_SC_PAGESIZE);
+
+  if (pagesize < 0)
+    {
+      printf ("sysconf failed: %s\n", strerror (errno));
+      return 1;
+    }
+
+  /* Perturb the size by a page so that we're not aligned on the 64K boundary.
+     pthread_create does this perturbation on x86 to avoid causing the 64k
+     aliasing conflict.  We want to prevent pthread_create from doing that
+     since it is not consistent for all architectures.  */
+  stacksize += pagesize;
+
+  /* Run twice to ensure that we don't give a false positive.  */
+  puts ("First iteration");
+  int ret = run_threads ();
+
+  if (ret)
+    return 1;
+
+  puts ("Second iteration");
+  stacksize *= 2;
+  return run_threads ();
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libpthread.abilist b/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libpthread.abilist
index 696158a..f24e2e8 100644
--- a/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libpthread.abilist
+++ b/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libpthread.abilist
@@ -222,3 +222,7 @@ GLIBC_2.17
  wait F
  waitpid F
  write F
+GLIBC_2.18
+ GLIBC_2.18 A
+ pthread_attr_get_default_np F
+ pthread_attr_set_default_np F
diff --git a/ports/sysdeps/unix/sysv/linux/alpha/nptl/libpthread.abilist b/ports/sysdeps/unix/sysv/linux/alpha/nptl/libpthread.abilist
index 9626730..191c00d 100644
--- a/ports/sysdeps/unix/sysv/linux/alpha/nptl/libpthread.abilist
+++ b/ports/sysdeps/unix/sysv/linux/alpha/nptl/libpthread.abilist
@@ -174,6 +174,10 @@ GLIBC_2.12
  pthread_mutexattr_getrobust F
  pthread_mutexattr_setrobust F
  pthread_setname_np F
+GLIBC_2.18
+ GLIBC_2.18 A
+ pthread_attr_get_default_np F
+ pthread_attr_set_default_np F
 GLIBC_2.2
  GLIBC_2.2 A
  __open64 F
diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/libpthread.abilist b/ports/sysdeps/unix/sysv/linux/arm/nptl/libpthread.abilist
index de8095a..d7abe69 100644
--- a/ports/sysdeps/unix/sysv/linux/arm/nptl/libpthread.abilist
+++ b/ports/sysdeps/unix/sysv/linux/arm/nptl/libpthread.abilist
@@ -8,6 +8,10 @@ GLIBC_2.12
  pthread_mutexattr_getrobust F
  pthread_mutexattr_setrobust F
  pthread_setname_np F
+GLIBC_2.18
+ GLIBC_2.18 A
+ pthread_attr_get_default_np F
+ pthread_attr_set_default_np F
 GLIBC_2.4
  GLIBC_2.4 A
  _IO_flockfile F
diff --git a/ports/sysdeps/unix/sysv/linux/ia64/nptl/libpthread.abilist b/ports/sysdeps/unix/sysv/linux/ia64/nptl/libpthread.abilist
index b7749e2..43df60b 100644
--- a/ports/sysdeps/unix/sysv/linux/ia64/nptl/libpthread.abilist
+++ b/ports/sysdeps/unix/sysv/linux/ia64/nptl/libpthread.abilist
@@ -8,6 +8,10 @@ GLIBC_2.12
  pthread_mutexattr_getrobust F
  pthread_mutexattr_setrobust F
  pthread_setname_np F
+GLIBC_2.18
+ GLIBC_2.18 A
+ pthread_attr_get_default_np F
+ pthread_attr_set_default_np F
 GLIBC_2.2
  GLIBC_2.2 A
  _IO_flockfile F
diff --git a/ports/sysdeps/unix/sysv/linux/m68k/coldfire/nptl/libpthread.abilist b/ports/sysdeps/unix/sysv/linux/m68k/coldfire/nptl/libpthread.abilist
index de8095a..d7abe69 100644
--- a/ports/sysdeps/unix/sysv/linux/m68k/coldfire/nptl/libpthread.abilist
+++ b/ports/sysdeps/unix/sysv/linux/m68k/coldfire/nptl/libpthread.abilist
@@ -8,6 +8,10 @@ GLIBC_2.12
  pthread_mutexattr_getrobust F
  pthread_mutexattr_setrobust F
  pthread_setname_np F
+GLIBC_2.18
+ GLIBC_2.18 A
+ pthread_attr_get_default_np F
+ pthread_attr_set_default_np F
 GLIBC_2.4
  GLIBC_2.4 A
  _IO_flockfile F
diff --git a/ports/sysdeps/unix/sysv/linux/m68k/m680x0/nptl/libpthread.abilist b/ports/sysdeps/unix/sysv/linux/m68k/m680x0/nptl/libpthread.abilist
index 827114f..ece7edf 100644
--- a/ports/sysdeps/unix/sysv/linux/m68k/m680x0/nptl/libpthread.abilist
+++ b/ports/sysdeps/unix/sysv/linux/m68k/m680x0/nptl/libpthread.abilist
@@ -174,6 +174,10 @@ GLIBC_2.12
  pthread_mutexattr_getrobust F
  pthread_mutexattr_setrobust F
  pthread_setname_np F
+GLIBC_2.18
+ GLIBC_2.18 A
+ pthread_attr_get_default_np F
+ pthread_attr_set_default_np F
 GLIBC_2.2
  GLIBC_2.2 A
  __open64 F
diff --git a/ports/sysdeps/unix/sysv/linux/mips/mips32/nptl/libpthread.abilist b/ports/sysdeps/unix/sysv/linux/mips/mips32/nptl/libpthread.abilist
index c3ba9d4..05cfb3d 100644
--- a/ports/sysdeps/unix/sysv/linux/mips/mips32/nptl/libpthread.abilist
+++ b/ports/sysdeps/unix/sysv/linux/mips/mips32/nptl/libpthread.abilist
@@ -130,6 +130,10 @@ GLIBC_2.12
  pthread_mutexattr_getrobust F
  pthread_mutexattr_setrobust F
  pthread_setname_np F
+GLIBC_2.18
+ GLIBC_2.18 A
+ pthread_attr_get_default_np F
+ pthread_attr_set_default_np F
 GLIBC_2.2
  GLIBC_2.2 A
  __libc_allocate_rtsig F
diff --git a/ports/sysdeps/unix/sysv/linux/mips/mips64/n32/nptl/libpthread.abilist b/ports/sysdeps/unix/sysv/linux/mips/mips64/n32/nptl/libpthread.abilist
index 4e0b07f..71634eb 100644
--- a/ports/sysdeps/unix/sysv/linux/mips/mips64/n32/nptl/libpthread.abilist
+++ b/ports/sysdeps/unix/sysv/linux/mips/mips64/n32/nptl/libpthread.abilist
@@ -130,6 +130,10 @@ GLIBC_2.12
  pthread_mutexattr_getrobust F
  pthread_mutexattr_setrobust F
  pthread_setname_np F
+GLIBC_2.18
+ GLIBC_2.18 A
+ pthread_attr_get_default_np F
+ pthread_attr_set_default_np F
 GLIBC_2.2
  GLIBC_2.2 A
  __libc_allocate_rtsig F
diff --git a/ports/sysdeps/unix/sysv/linux/mips/mips64/n64/nptl/libpthread.abilist b/ports/sysdeps/unix/sysv/linux/mips/mips64/n64/nptl/libpthread.abilist
index 4e0b07f..71634eb 100644
--- a/ports/sysdeps/unix/sysv/linux/mips/mips64/n64/nptl/libpthread.abilist
+++ b/ports/sysdeps/unix/sysv/linux/mips/mips64/n64/nptl/libpthread.abilist
@@ -130,6 +130,10 @@ GLIBC_2.12
  pthread_mutexattr_getrobust F
  pthread_mutexattr_setrobust F
  pthread_setname_np F
+GLIBC_2.18
+ GLIBC_2.18 A
+ pthread_attr_get_default_np F
+ pthread_attr_set_default_np F
 GLIBC_2.2
  GLIBC_2.2 A
  __libc_allocate_rtsig F
diff --git a/ports/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libpthread.abilist b/ports/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libpthread.abilist
index 7719099..18d24ed 100644
--- a/ports/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libpthread.abilist
+++ b/ports/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/nptl/libpthread.abilist
@@ -174,6 +174,10 @@ GLIBC_2.12
  pthread_mutexattr_getrobust F
  pthread_mutexattr_setrobust F
  pthread_setname_np F
+GLIBC_2.18
+ GLIBC_2.18 A
+ pthread_attr_get_default_np F
+ pthread_attr_set_default_np F
 GLIBC_2.2
  GLIBC_2.2 A
  __open64 F
diff --git a/ports/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libpthread.abilist b/ports/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libpthread.abilist
index 658c4bf..de4f231 100644
--- a/ports/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libpthread.abilist
+++ b/ports/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libpthread.abilist
@@ -222,3 +222,7 @@ GLIBC_2.12
  wait F
  waitpid F
  write F
+GLIBC_2.18
+ GLIBC_2.18 A
+ pthread_attr_get_default_np F
+ pthread_attr_set_default_np F
diff --git a/ports/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libpthread.abilist b/ports/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libpthread.abilist
index 658c4bf..de4f231 100644
--- a/ports/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libpthread.abilist
+++ b/ports/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libpthread.abilist
@@ -222,3 +222,7 @@ GLIBC_2.12
  wait F
  waitpid F
  write F
+GLIBC_2.18
+ GLIBC_2.18 A
+ pthread_attr_get_default_np F
+ pthread_attr_set_default_np F
diff --git a/ports/sysdeps/unix/sysv/linux/tile/tilepro/nptl/libpthread.abilist b/ports/sysdeps/unix/sysv/linux/tile/tilepro/nptl/libpthread.abilist
index 658c4bf..de4f231 100644
--- a/ports/sysdeps/unix/sysv/linux/tile/tilepro/nptl/libpthread.abilist
+++ b/ports/sysdeps/unix/sysv/linux/tile/tilepro/nptl/libpthread.abilist
@@ -222,3 +222,7 @@ GLIBC_2.12
  wait F
  waitpid F
  write F
+GLIBC_2.18
+ GLIBC_2.18 A
+ pthread_attr_get_default_np F
+ pthread_attr_set_default_np F
diff --git a/sysdeps/unix/sysv/linux/i386/nptl/libpthread.abilist b/sysdeps/unix/sysv/linux/i386/nptl/libpthread.abilist
index 827114f..ece7edf 100644
--- a/sysdeps/unix/sysv/linux/i386/nptl/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/i386/nptl/libpthread.abilist
@@ -174,6 +174,10 @@ GLIBC_2.12
  pthread_mutexattr_getrobust F
  pthread_mutexattr_setrobust F
  pthread_setname_np F
+GLIBC_2.18
+ GLIBC_2.18 A
+ pthread_attr_get_default_np F
+ pthread_attr_set_default_np F
 GLIBC_2.2
  GLIBC_2.2 A
  __open64 F
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 7719099..18d24ed 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/nptl/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/nptl/libpthread.abilist
@@ -174,6 +174,10 @@ GLIBC_2.12
  pthread_mutexattr_getrobust F
  pthread_mutexattr_setrobust F
  pthread_setname_np F
+GLIBC_2.18
+ GLIBC_2.18 A
+ pthread_attr_get_default_np F
+ pthread_attr_set_default_np F
 GLIBC_2.2
  GLIBC_2.2 A
  __open64 F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libpthread.abilist
index 7930c75..1ccc2e7 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libpthread.abilist
@@ -8,6 +8,10 @@ GLIBC_2.12
  pthread_mutexattr_getrobust F
  pthread_mutexattr_setrobust F
  pthread_setname_np F
+GLIBC_2.18
+ GLIBC_2.18 A
+ pthread_attr_get_default_np F
+ pthread_attr_set_default_np F
 GLIBC_2.3
  GLIBC_2.3 A
  _IO_flockfile F
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 827114f..ece7edf 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/nptl/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/nptl/libpthread.abilist
@@ -174,6 +174,10 @@ GLIBC_2.12
  pthread_mutexattr_getrobust F
  pthread_mutexattr_setrobust F
  pthread_setname_np F
+GLIBC_2.18
+ GLIBC_2.18 A
+ pthread_attr_get_default_np F
+ pthread_attr_set_default_np F
 GLIBC_2.2
  GLIBC_2.2 A
  __open64 F
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 596fdd3..ef9786b 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/nptl/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/nptl/libpthread.abilist
@@ -8,6 +8,10 @@ GLIBC_2.12
  pthread_mutexattr_getrobust F
  pthread_mutexattr_setrobust F
  pthread_setname_np F
+GLIBC_2.18
+ GLIBC_2.18 A
+ pthread_attr_get_default_np F
+ pthread_attr_set_default_np F
 GLIBC_2.2
  GLIBC_2.2 A
  _IO_flockfile F
diff --git a/sysdeps/unix/sysv/linux/sh/nptl/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/nptl/libpthread.abilist
index 596fdd3..ef9786b 100644
--- a/sysdeps/unix/sysv/linux/sh/nptl/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/nptl/libpthread.abilist
@@ -8,6 +8,10 @@ GLIBC_2.12
  pthread_mutexattr_getrobust F
  pthread_mutexattr_setrobust F
  pthread_setname_np F
+GLIBC_2.18
+ GLIBC_2.18 A
+ pthread_attr_get_default_np F
+ pthread_attr_set_default_np F
 GLIBC_2.2
  GLIBC_2.2 A
  _IO_flockfile F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/nptl/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/nptl/libpthread.abilist
index 9626730..191c00d 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/nptl/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/nptl/libpthread.abilist
@@ -174,6 +174,10 @@ GLIBC_2.12
  pthread_mutexattr_getrobust F
  pthread_mutexattr_setrobust F
  pthread_setname_np F
+GLIBC_2.18
+ GLIBC_2.18 A
+ pthread_attr_get_default_np F
+ pthread_attr_set_default_np F
 GLIBC_2.2
  GLIBC_2.2 A
  __open64 F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/nptl/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/nptl/libpthread.abilist
index b7749e2..43df60b 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/nptl/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/nptl/libpthread.abilist
@@ -8,6 +8,10 @@ GLIBC_2.12
  pthread_mutexattr_getrobust F
  pthread_mutexattr_setrobust F
  pthread_setname_np F
+GLIBC_2.18
+ GLIBC_2.18 A
+ pthread_attr_get_default_np F
+ pthread_attr_set_default_np 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 7c33f35..8d3c68e 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/nptl/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/nptl/libpthread.abilist
@@ -8,6 +8,10 @@ GLIBC_2.12
  pthread_mutexattr_getrobust F
  pthread_mutexattr_setrobust F
  pthread_setname_np F
+GLIBC_2.18
+ GLIBC_2.18 A
+ pthread_attr_get_default_np F
+ pthread_attr_set_default_np F
 GLIBC_2.2.5
  GLIBC_2.2.5 A
  _IO_flockfile F
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 b07d16f..fe53c17 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/nptl/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/nptl/libpthread.abilist
@@ -222,3 +222,7 @@ GLIBC_2.16
  wait F
  waitpid F
  write F
+GLIBC_2.18
+ GLIBC_2.18 A
+ pthread_attr_get_default_np F
+ pthread_attr_set_default_np F


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