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 1/2] Set default stack size from program environment


Hi,

The only way to currently set stack size of threads is to us the
pthreads API due to which it is only accessible to developers.  There
is no administrative way to do this.  Attached patch adds the ability
to set the default stack size for threads created using pthreads by
exporting an environment variable LIBC_PTHREAD_DEFAULT_STACKSIZE_NP to
the desired value.  This allows users to set stack sizes independent
of the process stack limit, which is controlled by RLIMIT_STACK.  This
is useful when one needs the process stack to be large enough, but
always allocate small stack sizes for other threads.

Along with this, the patch also adds equivalent functions
pthread_set_default_stacksize_np and pthread_get_default_stacksize_np
to set and get the default stack size to be used by pthread_create
calls in future if custom attributes are not provided.

I have tested on x86_64 to verify that it does not break any tests in
the testsuite.  The patch also has a test case that verifies the
functionality implemented in this patch.

[PATCH 2/2] is an additional chapter to the libc manual for NPTL.
This is mostly just a skeleton, with content for the feature
implemented by this current patch.

Siddhesh

ChangeLog:

	* Versions.def (libpthread): Add GLIBC_2.18.
	* csu/libc-start.c (__pthread_initialize_minimal): Change
	function arguments.
	* csu/libc-tls.c (__pthread_initialize_minimal): Likewise.
	* sysdeps/unix/sysv/linux/i386/nptl/libpthread.abilist
	(GLIBC_2.18): Add pthread_set_default_stacksize_np and
	pthread_get_default_stacksize_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_set_default_stacksize_np and
	pthread_get_default_stacksize_np.
	(tests): Add tst-pthread-stack-env.
	(tst-pthread-stack-env-ENV): Set environment for test.
	* Versions (GLIBC_2.18): Export
	pthread_set_default_stacksize_np and
	pthread_get_default_stacksize_np.
	* nptl-init.c (__pthread_initialize_minimal_internal): Accept
	ARGC, ARGV and ENVP.  Initialize __ENVIRON and set
	__DEFAULT_STACKSIZE.
	* pthreadP.h [IS_IN_libpthread]
	(__pthread_get_default_stacksize_np): Declare extern.
	(__pthread_set_default_stacksize_np): Likewise.
	* pthread_get_default_stacksize_np.c
	(__pthread_get_default_stacksize_np): New function.
	* pthread_set_default_stacksize_np.c
	(__pthread_set_default_stacksize_np): Likewise.
	(__adjust_and_set_stacksize): Likewise.
	* sysdeps/pthread/pthread.h
	(pthread_get_default_stacksize_np): Declare extern.
	(pthread_set_default_stacksize_np): Likewise.
	* tst-pthread-stack-env.c: New test case.


ChangeLog.aarch64:

	* sysdeps/unix/sysv/linux/aarch64/nptl/libpthread.abilist:
	(GLIBC_2.18): Add pthread_set_default_stacksize_np and
	pthread_get_default_stacksize_np.

ChangeLog.alpha:

	* sysdeps/unix/sysv/linux/alpha/nptl/libpthread.abilist:
	(GLIBC_2.18): Add pthread_set_default_stacksize_np and
	pthread_get_default_stacksize_np.

ChangeLog.arm:

	* sysdeps/unix/sysv/linux/arm/nptl/libpthread.abilist:
	(GLIBC_2.18): Add pthread_set_default_stacksize_np and
	pthread_get_default_stacksize_np.

ChangeLog.ia64:

	* sysdeps/unix/sysv/linux/ia64/nptl/libpthread.abilist:
	(GLIBC_2.18): Add pthread_set_default_stacksize_np and
	pthread_get_default_stacksize_np.

ChangeLog.m68k:

	* sysdeps/unix/sysv/linux/m68k/coldfire/nptl/libpthread.abilist:
	(GLIBC_2.18): Add pthread_set_default_stacksize_np and
	pthread_get_default_stacksize_np.
	* sysdeps/unix/sysv/linux/m68k/m680x0/nptl/libpthread.abilist:
	Likewise.

ChangeLog.mips:

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

ChangeLog.powerpc:

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

ChangeLog.tile:

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



diff --git a/Versions.def b/Versions.def
index 3c9e0ae..899d6ee 100644
--- a/Versions.def
+++ b/Versions.def
@@ -99,6 +99,7 @@ libpthread {
   GLIBC_2.6
   GLIBC_2.11
   GLIBC_2.12
+  GLIBC_2.18
   GLIBC_PRIVATE
 }
 libresolv {
diff --git a/csu/libc-start.c b/csu/libc-start.c
index 3e62b8a..c49af5a 100644
--- a/csu/libc-start.c
+++ b/csu/libc-start.c
@@ -32,7 +32,7 @@ extern int __libc_multiple_libcs;
 #include <tls.h>
 #ifndef SHARED
 # include <dl-osinfo.h>
-extern void __pthread_initialize_minimal (void);
+extern void __pthread_initialize_minimal (int, char **, char **);
 # ifndef THREAD_SET_STACK_GUARD
 /* Only exported for architectures that don't store the stack guard canary
    in thread local area.  */
@@ -175,7 +175,7 @@ LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL),
   /* Initialize the thread library at least a bit since the libgcc
      functions are using thread functions if these are available and
      we need to setup errno.  */
-  __pthread_initialize_minimal ();
+  __pthread_initialize_minimal (argc, argv, __environ);
 
   /* Set up the stack checker's canary.  */
   uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard (_dl_random);
diff --git a/csu/libc-tls.c b/csu/libc-tls.c
index 90daaa6..f51a711 100644
--- a/csu/libc-tls.c
+++ b/csu/libc-tls.c
@@ -243,7 +243,7 @@ _dl_tls_setup (void)
    not used.  */
 void
 __attribute__ ((weak))
-__pthread_initialize_minimal (void)
+__pthread_initialize_minimal (int argc, char **argv, char **envp)
 {
   __libc_setup_tls (TLS_INIT_TCB_SIZE, TLS_INIT_TCB_ALIGN);
 }
diff --git a/nptl/Makefile b/nptl/Makefile
index 6af4b37..0f6ac5d 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -125,7 +125,9 @@ 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_set_default_stacksize_np \
+		      pthread_get_default_stacksize_np
 #		      pthread_setuid pthread_seteuid pthread_setreuid \
 #		      pthread_setresuid \
 #		      pthread_setgid pthread_setegid pthread_setregid \
@@ -251,7 +253,8 @@ tests = tst-typesizes \
 	tst-exec1 tst-exec2 tst-exec3 tst-exec4 \
 	tst-exit1 tst-exit2 tst-exit3 \
 	tst-stdio1 tst-stdio2 \
-	tst-stack1 tst-stack2 tst-stack3 tst-pthread-getattr \
+	tst-stack1 tst-stack2 tst-stack3 \
+	tst-pthread-getattr tst-pthread-stack-env \
 	tst-unload \
 	tst-dlsym1 \
 	tst-sysconf \
@@ -441,6 +444,8 @@ tst-cancel7-ARGS = --command "exec $(host-test-program-cmd)"
 tst-cancelx7-ARGS = $(tst-cancel7-ARGS)
 tst-umask1-ARGS = $(objpfx)tst-umask1.temp
 
+tst-pthread-stack-env-ENV = LIBC_PTHREAD_DEFAULT_STACKSIZE_NP=1048576
+
 $(objpfx)tst-atfork2: $(libdl) $(shared-thread-library)
 LDFLAGS-tst-atfork2 = -rdynamic
 tst-atfork2-ENV = MALLOC_TRACE=$(objpfx)tst-atfork2.mtrace
diff --git a/nptl/Versions b/nptl/Versions
index 6a10375..a4da80e 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -252,6 +252,11 @@ libpthread {
     pthread_setname_np; pthread_getname_np;
   };
 
+  GLIBC_2.18 {
+    pthread_get_default_stacksize_np;
+    pthread_set_default_stacksize_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 19e6616..97b8589 100644
--- a/nptl/nptl-init.c
+++ b/nptl/nptl-init.c
@@ -277,7 +277,7 @@ extern void **__libc_dl_error_tsd (void) __attribute__ ((const));
 static bool __nptl_initial_report_events __attribute_used__;
 
 void
-__pthread_initialize_minimal_internal (void)
+__pthread_initialize_minimal_internal (int argc, char **argv, char **envp)
 {
 #ifndef SHARED
   /* Unlike in the dynamically linked case the dynamic linker has not
@@ -401,29 +401,44 @@ __pthread_initialize_minimal_internal (void)
 
   __static_tls_size = roundup (__static_tls_size, static_tls_align);
 
-  /* Determine the default allowed stack size.  This is the size used
-     in case the user does not specify one.  */
-  struct rlimit limit;
-  if (getrlimit (RLIMIT_STACK, &limit) != 0
-      || limit.rlim_cur == RLIM_INFINITY)
-    /* The system limit is not usable.  Use an architecture-specific
-       default.  */
-    limit.rlim_cur = ARCH_STACK_DEFAULT_SIZE;
-  else if (limit.rlim_cur < PTHREAD_STACK_MIN)
+  /* Initialize the environment.  libc.so gets initialized after us due to a
+     circular dependency and hence __environ is not available otherwise.  */
+    __environ = envp;
+
+#ifndef SHARED
+    __libc_init_secure ();
+#endif
+
+  size_t stacksize = 0;
+  char *envval = __libc_secure_getenv ("LIBC_PTHREAD_DEFAULT_STACKSIZE_NP");
+
+  if (__glibc_unlikely (envval != NULL && envval[0] != '\0'))
+    {
+      char *env_conv = envval;
+      size_t ret = strtoul (envval, &env_conv, 0);
+
+      if (*env_conv == '\0')
+	stacksize = ret;
+    }
+
+  if (stacksize == 0)
+    {
+      /* Determine the default allowed stack size.  This is the size used
+	 in case the user does not specify one.  */
+      struct rlimit limit;
+      if (getrlimit (RLIMIT_STACK, &limit) != 0
+	  || limit.rlim_cur == RLIM_INFINITY)
+	/* The system limit is not usable.  Use an architecture-specific
+	   default.  */
+	stacksize = ARCH_STACK_DEFAULT_SIZE;
+      else
+	stacksize = limit.rlim_cur;
+    }
+
+  if (__pthread_set_default_stacksize_np (stacksize))
     /* The system limit is unusably small.
        Use the minimal size acceptable.  */
-    limit.rlim_cur = PTHREAD_STACK_MIN;
-
-  /* Make sure it meets the minimum size that allocate_stack
-     (allocatestack.c) will demand, which depends on the page size.  */
-  const uintptr_t pagesz = GLRO(dl_pagesize);
-  const size_t minstack = pagesz + __static_tls_size + MINIMAL_REST_STACK;
-  if (limit.rlim_cur < minstack)
-    limit.rlim_cur = minstack;
-
-  /* Round the resource limit up to page size.  */
-  limit.rlim_cur = (limit.rlim_cur + pagesz - 1) & -pagesz;
-  __default_stacksize = limit.rlim_cur;
+    __adjust_and_set_stacksize (PTHREAD_STACK_MIN);
 
 #ifdef SHARED
   /* Transfer the old value from the dynamic linker's internal location.  */
diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
index 993a79e..71ea10d 100644
--- a/nptl/pthreadP.h
+++ b/nptl/pthreadP.h
@@ -543,6 +543,9 @@ extern void __pthread_cleanup_pop (struct _pthread_cleanup_buffer *buffer,
 # undef pthread_cleanup_pop
 # define pthread_cleanup_pop(execute) \
     __pthread_cleanup_pop (&_buffer, (execute)); }
+
+extern size_t __pthread_get_default_stacksize_np (void);
+extern int __pthread_set_default_stacksize (size_t);
 #endif
 
 extern void __pthread_cleanup_push_defer (struct _pthread_cleanup_buffer *buffer,
diff --git a/nptl/pthread_get_default_stacksize_np.c b/nptl/pthread_get_default_stacksize_np.c
new file mode 100644
index 0000000..474ee4e
--- /dev/null
+++ b/nptl/pthread_get_default_stacksize_np.c
@@ -0,0 +1,27 @@
+/* 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 "pthreadP.h"
+
+
+size_t
+__pthread_get_default_stacksize_np (void)
+{
+  return __default_stacksize;
+}
+strong_alias (__pthread_get_default_stacksize_np,
+	      pthread_get_default_stacksize_np)
diff --git a/nptl/pthread_set_default_stacksize_np.c b/nptl/pthread_set_default_stacksize_np.c
new file mode 100644
index 0000000..ac3b8c8
--- /dev/null
+++ b/nptl/pthread_set_default_stacksize_np.c
@@ -0,0 +1,51 @@
+/* Set the default stack size for a 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 "pthreadP.h"
+#include <ldsodefs.h>
+#include <errno.h>
+
+void
+attribute_hidden
+__adjust_and_set_stacksize (size_t stacksize)
+{
+  /* Make sure it meets the minimum size that allocate_stack
+     (allocatestack.c) will demand, which depends on the page size.  */
+  const uintptr_t pagesz = GLRO(dl_pagesize);
+  const size_t minstack = pagesz + __static_tls_size + MINIMAL_REST_STACK;
+
+  if (stacksize < minstack)
+    stacksize = minstack;
+
+  /* Round the resource limit up to page size.  */
+  stacksize = (stacksize + pagesz - 1) & -pagesz;
+  __default_stacksize = stacksize;
+}
+
+int
+__pthread_set_default_stacksize_np (size_t stacksize)
+{
+  if (stacksize < PTHREAD_STACK_MIN)
+    return -EINVAL;
+
+  __adjust_and_set_stacksize (stacksize);
+
+  return 0;
+}
+strong_alias (__pthread_set_default_stacksize_np,
+	      pthread_set_default_stacksize_np)
diff --git a/nptl/sysdeps/pthread/pthread.h b/nptl/sysdeps/pthread/pthread.h
index 10bcb80..d69c0e0 100644
--- a/nptl/sysdeps/pthread/pthread.h
+++ b/nptl/sysdeps/pthread/pthread.h
@@ -410,6 +410,12 @@ extern int pthread_attr_getaffinity_np (const pthread_attr_t *__attr,
    and destroyed with pthread_attr_destroy when no longer needed.  */
 extern int pthread_getattr_np (pthread_t __th, pthread_attr_t *__attr)
      __THROW __nonnull ((2));
+
+/* Get the default size that the stack of a new thread will have.  */
+extern size_t pthread_get_default_stacksize_np (void);
+
+/* Set a global default size for stacks of all threads created henceforth.  */
+extern int pthread_set_default_stacksize_np (size_t);
 #endif
 
 
diff --git a/nptl/tst-pthread-stack-env.c b/nptl/tst-pthread-stack-env.c
new file mode 100644
index 0000000..880faed
--- /dev/null
+++ b/nptl/tst-pthread-stack-env.c
@@ -0,0 +1,91 @@
+/* Verify that pthreads uses the default thread stack size set with the
+   LIBC_PTHREAD_DEFAULT_STACKSIZE_NP environment variable or the
+   pthread_set_default_stacksize_np function.
+   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 <string.h>
+
+#define STACKSIZE 1024 * 1024L
+
+void *
+thr (void *u)
+{
+  size_t stacksize, guardsize;
+  pthread_attr_t attr;
+  pthread_getattr_np (pthread_self (), &attr);
+  size_t default_stacksize;
+
+  pthread_attr_getstacksize (&attr, &stacksize);
+  pthread_attr_getguardsize (&attr, &guardsize);
+  default_stacksize = pthread_get_default_stacksize_np ();
+
+  /* FIXME once guardsize is excluded from stacksize.  */
+  if (stacksize - guardsize != default_stacksize)
+    {
+      printf ("Stack size is %zu, should be %zu\n", stacksize - guardsize,
+	      default_stacksize);
+      return (void *) 1;
+    }
+
+  return NULL;
+}
+
+int
+do_test_real (int set_stacksize)
+{
+  pthread_t t;
+  void *thr_ret;
+  int ret;
+
+  if (set_stacksize)
+    {
+      if (pthread_set_default_stacksize_np (STACKSIZE * 2))
+	{
+	  puts ("Setting default stack size failed");
+	  return 1;
+	}
+    }
+
+  if ((ret = pthread_create (&t, NULL, thr, NULL)) != 0)
+    {
+      printf ("thread create failed: %s\n", strerror (ret));
+      return 1;
+    }
+
+  if ((ret = pthread_join (t, &thr_ret)) != 0)
+    {
+      printf ("join failed: %s\n", strerror (ret));
+      return 1;
+    }
+
+  if (thr_ret != NULL && thr_ret != PTHREAD_CANCELED)
+    return 1;
+
+  return 0;
+}
+
+int
+do_test (int argc, char **argv)
+{
+  int ret = do_test_real (0);
+  return do_test_real (1) || ret;
+}
+
+#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 031c70e..3d056a4 100644
--- a/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libpthread.abilist
+++ b/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libpthread.abilist
@@ -223,3 +223,7 @@ GLIBC_2.17
  wait F
  waitpid F
  write F
+GLIBC_2.18
+ GLIBC_2.18 A
+ pthread_get_default_stacksize_np F
+ pthread_set_default_stacksize_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..6ab9416 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_get_default_stacksize_np F
+ pthread_set_default_stacksize_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 6c0bbde..ba3a05d 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_get_default_stacksize_np F
+ pthread_set_default_stacksize_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..3e32dbd 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_get_default_stacksize_np F
+ pthread_set_default_stacksize_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 6c0bbde..ba3a05d 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_get_default_stacksize_np F
+ pthread_set_default_stacksize_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..312be6b 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_get_default_stacksize_np F
+ pthread_set_default_stacksize_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..f052b7b 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_get_default_stacksize_np F
+ pthread_set_default_stacksize_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..589c97b 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_get_default_stacksize_np F
+ pthread_set_default_stacksize_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..589c97b 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_get_default_stacksize_np F
+ pthread_set_default_stacksize_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..6b6f71a 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_get_default_stacksize_np F
+ pthread_set_default_stacksize_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 3ab0046..53f88c0 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
@@ -223,3 +223,7 @@ GLIBC_2.12
  wait F
  waitpid F
  write F
+GLIBC_2.18
+ GLIBC_2.18 A
+ pthread_get_default_stacksize_np F
+ pthread_set_default_stacksize_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 3ab0046..53f88c0 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
@@ -223,3 +223,7 @@ GLIBC_2.12
  wait F
  waitpid F
  write F
+GLIBC_2.18
+ GLIBC_2.18 A
+ pthread_get_default_stacksize_np F
+ pthread_set_default_stacksize_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 3ab0046..53f88c0 100644
--- a/ports/sysdeps/unix/sysv/linux/tile/tilepro/nptl/libpthread.abilist
+++ b/ports/sysdeps/unix/sysv/linux/tile/tilepro/nptl/libpthread.abilist
@@ -223,3 +223,7 @@ GLIBC_2.12
  wait F
  waitpid F
  write F
+GLIBC_2.18
+ GLIBC_2.18 A
+ pthread_get_default_stacksize_np F
+ pthread_set_default_stacksize_np F
diff --git a/sysdeps/unix/sysv/linux/i386/nptl/libpthread.abilist b/sysdeps/unix/sysv/linux/i386/nptl/libpthread.abilist
index 827114f..312be6b 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_get_default_stacksize_np F
+ pthread_set_default_stacksize_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..6b6f71a 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_get_default_stacksize_np F
+ pthread_set_default_stacksize_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..4ca4ca9 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_get_default_stacksize_np F
+ pthread_set_default_stacksize_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..312be6b 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_get_default_stacksize_np F
+ pthread_set_default_stacksize_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..37ec664 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_get_default_stacksize_np F
+ pthread_set_default_stacksize_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..37ec664 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_get_default_stacksize_np F
+ pthread_set_default_stacksize_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..6ab9416 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_get_default_stacksize_np F
+ pthread_set_default_stacksize_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..3e32dbd 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_get_default_stacksize_np F
+ pthread_set_default_stacksize_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..5556887 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_get_default_stacksize_np F
+ pthread_set_default_stacksize_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 ee69932..b66183b 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/nptl/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/nptl/libpthread.abilist
@@ -223,3 +223,7 @@ GLIBC_2.16
  wait F
  waitpid F
  write F
+GLIBC_2.18
+ GLIBC_2.18 A
+ pthread_get_default_stacksize_np F
+ pthread_set_default_stacksize_np F


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