]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Define PTHREAD_STACK_MIN to sysconf(_SC_THREAD_STACK_MIN)
authorH.J. Lu <hjl.tools@gmail.com>
Mon, 21 Jun 2021 19:42:56 +0000 (12:42 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Fri, 9 Jul 2021 22:10:35 +0000 (15:10 -0700)
The constant PTHREAD_STACK_MIN may be too small for some processors.
Rename _SC_SIGSTKSZ_SOURCE to _DYNAMIC_STACK_SIZE_SOURCE.  When
_DYNAMIC_STACK_SIZE_SOURCE or _GNU_SOURCE are defined, define
PTHREAD_STACK_MIN to sysconf(_SC_THREAD_STACK_MIN) which is changed
to MIN (PTHREAD_STACK_MIN, sysconf(_SC_MINSIGSTKSZ)).

Consolidate <bits/local_lim.h> with <bits/pthread_stack_min.h> to
provide a constant target specific PTHREAD_STACK_MIN value.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
26 files changed:
NEWS
include/bits/local_lim.h [new file with mode: 0644]
include/features.h
manual/creature.texi
nptl/tst-context1.c
stdlib/test-atexit-race-common.c
support/support_path_support_time64.c
sysdeps/posix/sysconf-pthread_stack_min.h [new file with mode: 0644]
sysdeps/posix/sysconf.c
sysdeps/unix/sysv/linux/Makefile
sysdeps/unix/sysv/linux/aarch64/bits/local_lim.h [deleted file]
sysdeps/unix/sysv/linux/aarch64/bits/pthread_stack_min.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/alpha/bits/local_lim.h [deleted file]
sysdeps/unix/sysv/linux/alpha/bits/pthread_stack_min.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/bits/local_lim.h
sysdeps/unix/sysv/linux/bits/pthread_stack_min.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/bits/sigstksz.h
sysdeps/unix/sysv/linux/ia64/bits/local_lim.h [deleted file]
sysdeps/unix/sysv/linux/ia64/bits/pthread_stack_min.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/mips/bits/local_lim.h [deleted file]
sysdeps/unix/sysv/linux/mips/bits/pthread_stack_min.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/powerpc/bits/local_lim.h [deleted file]
sysdeps/unix/sysv/linux/powerpc/bits/pthread_stack_min.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/sparc/bits/local_lim.h [deleted file]
sysdeps/unix/sysv/linux/sparc/bits/pthread_stack_min.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/sysconf-pthread_stack_min.h [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index 91d5f175989d37679ff738b785e197444c5f4998..13ffe627da577e96976823b83d3c60a4c348e45e 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -9,8 +9,12 @@ Version 2.34
 
 Major new features:
 
-* Add _SC_MINSIGSTKSZ and _SC_SIGSTKSZ.  When _SC_SIGSTKSZ_SOURCE or
-  _GNU_SOURCE are defined, MINSIGSTKSZ and SIGSTKSZ are no longer
+* When _DYNAMIC_STACK_SIZE_SOURCE or _GNU_SOURCE are defined,
+  PTHREAD_STACK_MIN is no longer constant and is redefined to
+  sysconf(_SC_THREAD_STACK_MIN).
+
+* Add _SC_MINSIGSTKSZ and _SC_SIGSTKSZ.  When _DYNAMIC_STACK_SIZE_SOURCE
+  or _GNU_SOURCE are defined, MINSIGSTKSZ and SIGSTKSZ are no longer
   constant on Linux.  MINSIGSTKSZ is redefined to sysconf(_SC_MINSIGSTKSZ)
   and SIGSTKSZ is redefined to sysconf (_SC_SIGSTKSZ).
 
diff --git a/include/bits/local_lim.h b/include/bits/local_lim.h
new file mode 100644 (file)
index 0000000..46d82dc
--- /dev/null
@@ -0,0 +1,7 @@
+/* Don't define PTHREAD_STACK_MIN to sysconf (_SC_THREAD_STACK_MIN) for
+   glibc build.  */
+#if !defined _ISOMAC
+# undef __USE_DYNAMIC_STACK_SIZE
+#endif
+
+#include_next <bits/local_lim.h>
index 039bcb112bebc76ccab0066112e0b22103ba5fb5..51c8a98fb0b65c1f52495bdd6827c4f1aa7113d1 100644 (file)
@@ -50,8 +50,8 @@
    _LARGEFILE64_SOURCE Additional functionality from LFS for large files.
    _FILE_OFFSET_BITS=N Select default filesystem interface.
    _ATFILE_SOURCE      Additional *at interfaces.
-   _SC_SIGSTKSZ_SOURCE Select correct (but non compile-time constant)
-                       MINSIGSTKSZ and SIGSTKSZ.
+   _DYNAMIC_STACK_SIZE_SOURCE Select correct (but non compile-time constant)
+                       MINSIGSTKSZ, SIGSTKSZ and PTHREAD_STACK_MIN.
    _GNU_SOURCE         All of the above, plus GNU extensions.
    _DEFAULT_SOURCE     The default set of features (taking precedence over
                        __STRICT_ANSI__).
@@ -98,8 +98,8 @@
    __USE_FILE_OFFSET64 Define 64bit interface as default.
    __USE_MISC          Define things from 4.3BSD or System V Unix.
    __USE_ATFILE                Define *at interfaces and AT_* constants for them.
-   __USE_SC_SIGSTKSZ   Define correct (but non compile-time constant)
-                       MINSIGSTKSZ and SIGSTKSZ.
+   __USE_DYNAMIC_STACK_SIZE Define correct (but non compile-time constant)
+                       MINSIGSTKSZ, SIGSTKSZ and PTHREAD_STACK_MIN.
    __USE_GNU           Define GNU extensions.
    __USE_FORTIFY_LEVEL Additional security measures used, according to level.
 
 #undef __USE_FILE_OFFSET64
 #undef __USE_MISC
 #undef __USE_ATFILE
-#undef __USE_SC_SIGSTKSZ
+#undef __USE_DYNAMIC_STACK_SIZE
 #undef __USE_GNU
 #undef __USE_FORTIFY_LEVEL
 #undef __KERNEL_STRICT_NAMES
 # define _DEFAULT_SOURCE       1
 # undef  _ATFILE_SOURCE
 # define _ATFILE_SOURCE        1
-# undef  _SC_SIGSTKSZ_SOURCE
-# define _SC_SIGSTKSZ_SOURCE 1
+# undef  _DYNAMIC_STACK_SIZE_SOURCE
+# define _DYNAMIC_STACK_SIZE_SOURCE 1
 #endif
 
 /* If nothing (other than _GNU_SOURCE and _DEFAULT_SOURCE) is defined,
 # define __USE_ATFILE  1
 #endif
 
-#ifdef _SC_SIGSTKSZ_SOURCE
-# define __USE_SC_SIGSTKSZ     1
+#ifdef _DYNAMIC_STACK_SIZE_SOURCE
+# define __USE_DYNAMIC_STACK_SIZE      1
 #endif
 
 #ifdef _GNU_SOURCE
index d3c4fa4702d79d9af8a8468c19fef9555616ebd0..c13de52f1f0cb247a572b0606be769d580c4426e 100644 (file)
@@ -308,10 +308,10 @@ checks are applied. If defined to @math{3}, @theglibc{} may also use
 checks that may have an additional performance overhead.
 @end defvr
 
-@defvr Macro _SC_SIGSTKSZ_SOURCE
+@defvr Macro _DYNAMIC_STACK_SIZE_SOURCE
 @standards{GNU, (none)}
 If this macro is defined, correct (but non compile-time constant)
-MINSIGSTKSZ and SIGSTKSZ are defined.
+MINSIGSTKSZ, SIGSTKSZ and PTHREAD_STACK_MIN are defined.
 @end defvr
 
 @defvr Macro _REENTRANT
index 821f3c2133798af520c61ae34e427513a42174c4..00e39aff9f83a7b56de4cd41322310431987d732 100644 (file)
@@ -23,6 +23,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <ucontext.h>
+#include <support/support.h>
 
 #define N      4
 #if __WORDSIZE == 64
@@ -36,7 +37,8 @@ typedef struct {
        unsigned long   guard[3];
    } tst_context_t;
 
-static char stacks[N][2 * PTHREAD_STACK_MIN];
+static char *stacks[N];
+static size_t stack_size;
 static tst_context_t ctx[N][2];
 static volatile int failures;
 
@@ -79,7 +81,7 @@ fct (long int n)
       exit (1);
     }
 
-  if (on_stack < stacks[n] || on_stack >= stacks[n] + sizeof (stacks[0]))
+  if (on_stack < stacks[n] || on_stack >= stacks[n] + stack_size)
     {
       printf ("%ld: on_stack not on appropriate stack\n", n);
       exit (1);
@@ -109,7 +111,7 @@ tf (void *arg)
   printf ("%d: %s: before makecontext\n", n, __FUNCTION__);
 
   ctx[n][1].uctx.uc_stack.ss_sp = stacks[n];
-  ctx[n][1].uctx.uc_stack.ss_size = sizeof (stacks[n]);
+  ctx[n][1].uctx.uc_stack.ss_size = stack_size;
   ctx[n][1].uctx.uc_link = &ctx[n][0].uctx;
   makecontext (&ctx[n][1].uctx, (void (*) (void)) fct, 1, (long int) n);
 
@@ -137,6 +139,10 @@ do_test (void)
   pthread_t th[N];
   ucontext_t mctx;
 
+  stack_size = 2 * PTHREAD_STACK_MIN;
+  for (int i = 0; i < N; i++)
+    stacks[i] = xmalloc (stack_size);
+
   puts ("making contexts");
   if (getcontext (&mctx) != 0)
     {
@@ -198,6 +204,9 @@ do_test (void)
        exit (1);
       }
 
+  for (int i = 0; i < N; i++)
+    free (stacks[i]);
+
   return failures;
 }
 
index a2b54685803b0ebec7d550a92509eb1105412277..b48bb162853fcb124051554b66a253fa9f64b1c8 100644 (file)
 
 const size_t kNumThreads = 1024;
 const size_t kNumHandlers = 1024;
-const size_t kStacksize =
-#ifdef PTHREAD_STACK_MIN
-       0x20000 < PTHREAD_STACK_MIN ? PTHREAD_STACK_MIN :
-#endif
-               0x20000;
 
 static void *
 threadfunc (void *unused)
@@ -66,6 +61,12 @@ do_test (void)
   /* With default 8MiB Linux stack size, creating 1024 threads can cause
      VM exhausiton on 32-bit machines.  Reduce stack size of each thread to
      128KiB for a maximum required VM size of 128MiB.  */
+  size_t kStacksize =
+#ifdef PTHREAD_STACK_MIN
+    0x20000 < PTHREAD_STACK_MIN ? PTHREAD_STACK_MIN :
+#endif
+    0x20000;
+
   xpthread_attr_setstacksize (&attr, kStacksize);
 
   for (i = 0; i < kNumThreads; ++i) {
index 33b2bdff6686a24fe6b9aac36f423f93fd44524c..619a4eab00e6b3d7789ad8f0eaf4b80c9f987e55 100644 (file)
@@ -17,6 +17,7 @@
    <https://www.gnu.org/licenses/>.  */
 
 #include <fcntl.h>
+#include <unistd.h>
 #include <support/check.h>
 #include <support/support.h>
 #include <sys/stat.h>
diff --git a/sysdeps/posix/sysconf-pthread_stack_min.h b/sysdeps/posix/sysconf-pthread_stack_min.h
new file mode 100644 (file)
index 0000000..f5be2e6
--- /dev/null
@@ -0,0 +1,29 @@
+/* __get_pthread_stack_min ().  POSIX version.
+   Copyright (C) 2021 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
+   <https://www.gnu.org/licenses/>.  */
+
+/* Return sysconf (_SC_THREAD_STACK_MIN).  */
+
+static inline long int
+__get_pthread_stack_min (void)
+{
+#ifdef PTHREAD_STACK_MIN
+      return PTHREAD_STACK_MIN;
+#else
+      return -1;
+#endif
+}
index 3e8ec5cd512d0e81cd32fc8ee65a5fc68f2db1ef..5fb3fb6c1c30ddbaa0ab51f1b27ac7393c6062d9 100644 (file)
@@ -31,6 +31,7 @@
 #include <sys/types.h>
 #include <sys/uio.h>
 #include <regex.h>
+#include <sysconf-pthread_stack_min.h>
 
 #define NEED_SPEC_ARRAY 0
 #include <posix-conf-vars.h>
@@ -569,11 +570,7 @@ __sysconf (int name)
 #endif
 
     case _SC_THREAD_STACK_MIN:
-#ifdef PTHREAD_STACK_MIN
-      return PTHREAD_STACK_MIN;
-#else
-      return -1;
-#endif
+      return __get_pthread_stack_min ();
 
     case _SC_THREAD_THREADS_MAX:
 #ifdef PTHREAD_THREADS_MAX
index d45a16af8ba9aaa067a6f26c6d1d737a57172520..7d43dc95f25b8ec0198c4cae23b4dbb1d462f3e8 100644 (file)
@@ -108,7 +108,8 @@ sysdep_headers += sys/mount.h sys/acct.h \
                  bits/types/struct_semid64_ds.h \
                  bits/types/struct_semid64_ds_helper.h \
                  bits/types/struct_shmid64_ds.h \
-                 bits/types/struct_shmid64_ds_helper.h
+                 bits/types/struct_shmid64_ds_helper.h \
+                 bits/pthread_stack_min.h
 
 tests += tst-clone tst-clone2 tst-clone3 tst-fanotify tst-personality \
         tst-quota tst-sync_file_range tst-sysconf-iov_max tst-ttyname \
diff --git a/sysdeps/unix/sysv/linux/aarch64/bits/local_lim.h b/sysdeps/unix/sysv/linux/aarch64/bits/local_lim.h
deleted file mode 100644 (file)
index 0652bf4..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-/* Minimum guaranteed maximum values for system limits.  Linux version.
-   Copyright (C) 1993-2021 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
-   <https://www.gnu.org/licenses/>.  */
-
-/* The kernel header pollutes the namespace with the NR_OPEN symbol
-   and defines LINK_MAX although filesystems have different maxima.  A
-   similar thing is true for OPEN_MAX: the limit can be changed at
-   runtime and therefore the macro must not be defined.  Remove this
-   after including the header if necessary.  */
-#ifndef NR_OPEN
-# define __undef_NR_OPEN
-#endif
-#ifndef LINK_MAX
-# define __undef_LINK_MAX
-#endif
-#ifndef OPEN_MAX
-# define __undef_OPEN_MAX
-#endif
-#ifndef ARG_MAX
-# define __undef_ARG_MAX
-#endif
-
-/* The kernel sources contain a file with all the needed information.  */
-#include <linux/limits.h>
-
-/* Have to remove NR_OPEN?  */
-#ifdef __undef_NR_OPEN
-# undef NR_OPEN
-# undef __undef_NR_OPEN
-#endif
-/* Have to remove LINK_MAX?  */
-#ifdef __undef_LINK_MAX
-# undef LINK_MAX
-# undef __undef_LINK_MAX
-#endif
-/* Have to remove OPEN_MAX?  */
-#ifdef __undef_OPEN_MAX
-# undef OPEN_MAX
-# undef __undef_OPEN_MAX
-#endif
-/* Have to remove ARG_MAX?  */
-#ifdef __undef_ARG_MAX
-# undef ARG_MAX
-# undef __undef_ARG_MAX
-#endif
-
-/* The number of data keys per process.  */
-#define _POSIX_THREAD_KEYS_MAX 128
-/* This is the value this implementation supports.  */
-#define PTHREAD_KEYS_MAX       1024
-
-/* Controlling the iterations of destructors for thread-specific data.  */
-#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS    4
-/* Number of iterations this implementation does.  */
-#define PTHREAD_DESTRUCTOR_ITERATIONS  _POSIX_THREAD_DESTRUCTOR_ITERATIONS
-
-/* The number of threads per process.  */
-#define _POSIX_THREAD_THREADS_MAX      64
-/* We have no predefined limit on the number of threads.  */
-#undef PTHREAD_THREADS_MAX
-
-/* Maximum amount by which a process can descrease its asynchronous I/O
-   priority level.  */
-#define AIO_PRIO_DELTA_MAX     20
-
-/* Minimum size for a thread.  At least two pages for systems with 64k
-   pages.  */
-#define PTHREAD_STACK_MIN      131072
-
-/* Maximum number of timer expiration overruns.  */
-#define DELAYTIMER_MAX 2147483647
-
-/* Maximum tty name length.  */
-#define TTY_NAME_MAX           32
-
-/* Maximum login name length.  This is arbitrary.  */
-#define LOGIN_NAME_MAX         256
-
-/* Maximum host name length.  */
-#define HOST_NAME_MAX          64
-
-/* Maximum message queue priority level.  */
-#define MQ_PRIO_MAX            32768
-
-/* Maximum value the semaphore can have.  */
-#define SEM_VALUE_MAX   (2147483647)
diff --git a/sysdeps/unix/sysv/linux/aarch64/bits/pthread_stack_min.h b/sysdeps/unix/sysv/linux/aarch64/bits/pthread_stack_min.h
new file mode 100644 (file)
index 0000000..9721568
--- /dev/null
@@ -0,0 +1,22 @@
+/* Definition of PTHREAD_STACK_MIN.  Linux/aarch64 version.
+   Copyright (C) 2021 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
+   <https://www.gnu.org/licenses/>.  */
+
+/* Minimum size for a thread.  At least two pages for systems with 64k
+   pages.  */
+#define PTHREAD_STACK_MIN      131072
diff --git a/sysdeps/unix/sysv/linux/alpha/bits/local_lim.h b/sysdeps/unix/sysv/linux/alpha/bits/local_lim.h
deleted file mode 100644 (file)
index 523407d..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-/* Minimum guaranteed maximum values for system limits.  Linux/Alpha version.
-   Copyright (C) 1993-2021 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 Library General Public License as
-   published by the Free Software Foundation; either version 2 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with the GNU C Library.  If not, see
-   <https://www.gnu.org/licenses/>.  */
-
-/* The kernel header pollutes the namespace with the NR_OPEN symbol
-   and defines LINK_MAX although filesystems have different maxima.  A
-   similar thing is true for OPEN_MAX: the limit can be changed at
-   runtime and therefore the macro must not be defined.  Remove this
-   after including the header if necessary.  */
-#ifndef NR_OPEN
-# define __undef_NR_OPEN
-#endif
-#ifndef LINK_MAX
-# define __undef_LINK_MAX
-#endif
-#ifndef OPEN_MAX
-# define __undef_OPEN_MAX
-#endif
-#ifndef ARG_MAX
-# define __undef_ARG_MAX
-#endif
-
-/* The kernel sources contain a file with all the needed information.  */
-#include <linux/limits.h>
-
-/* Have to remove NR_OPEN?  */
-#ifdef __undef_NR_OPEN
-# undef NR_OPEN
-# undef __undef_NR_OPEN
-#endif
-/* Have to remove LINK_MAX?  */
-#ifdef __undef_LINK_MAX
-# undef LINK_MAX
-# undef __undef_LINK_MAX
-#endif
-/* Have to remove OPEN_MAX?  */
-#ifdef __undef_OPEN_MAX
-# undef OPEN_MAX
-# undef __undef_OPEN_MAX
-#endif
-/* Have to remove ARG_MAX?  */
-#ifdef __undef_ARG_MAX
-# undef ARG_MAX
-# undef __undef_ARG_MAX
-#endif
-
-/* The number of data keys per process.  */
-#define _POSIX_THREAD_KEYS_MAX 128
-/* This is the value this implementation supports.  */
-#define PTHREAD_KEYS_MAX       1024
-
-/* Controlling the iterations of destructors for thread-specific data.  */
-#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS    4
-/* Number of iterations this implementation does.  */
-#define PTHREAD_DESTRUCTOR_ITERATIONS  _POSIX_THREAD_DESTRUCTOR_ITERATIONS
-
-/* The number of threads per process.  */
-#define _POSIX_THREAD_THREADS_MAX      64
-/* We have no predefined limit on the number of threads.  */
-#undef PTHREAD_THREADS_MAX
-
-/* Maximum amount by which a process can descrease its asynchronous I/O
-   priority level.  */
-#define AIO_PRIO_DELTA_MAX     20
-
-/* Minimum size for a thread.  We are free to choose a reasonable value.  */
-#define PTHREAD_STACK_MIN      24576
-
-/* Maximum number of timer expiration overruns.  */
-#define DELAYTIMER_MAX 2147483647
-
-/* Maximum tty name length.  */
-#define TTY_NAME_MAX           32
-
-/* Maximum login name length.  This is arbitrary.  */
-#define LOGIN_NAME_MAX         256
-
-/* Maximum host name length.  */
-#define HOST_NAME_MAX          64
-
-/* Maximum message queue priority level.  */
-#define MQ_PRIO_MAX            32768
-
-/* Maximum value the semaphore can have.  */
-#define SEM_VALUE_MAX   (2147483647)
diff --git a/sysdeps/unix/sysv/linux/alpha/bits/pthread_stack_min.h b/sysdeps/unix/sysv/linux/alpha/bits/pthread_stack_min.h
new file mode 100644 (file)
index 0000000..5bfb0e1
--- /dev/null
@@ -0,0 +1,20 @@
+/* Definition of PTHREAD_STACK_MIN.  Linux/Alpha version.
+   Copyright (C) 2021 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 Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library.  If not, see
+   <https://www.gnu.org/licenses/>.  */
+
+/* Minimum size for a thread.  We are free to choose a reasonable value.  */
+#define PTHREAD_STACK_MIN      24576
index b88ca3d4d201fb319315fefc998da1914bfc0543..0b1c7f40be62fcb4fd1bf4411537e08f1427ee4a 100644 (file)
 #define AIO_PRIO_DELTA_MAX     20
 
 /* Minimum size for a thread.  We are free to choose a reasonable value.  */
-#define PTHREAD_STACK_MIN      16384
+#undef PTHREAD_STACK_MIN
+#if defined __USE_DYNAMIC_STACK_SIZE && __USE_DYNAMIC_STACK_SIZE
+# include <unistd.h>
+# define PTHREAD_STACK_MIN     sysconf (_SC_THREAD_STACK_MIN)
+#else
+# include <bits/pthread_stack_min.h>
+#endif
 
 /* Maximum number of timer expiration overruns.  */
 #define DELAYTIMER_MAX 2147483647
diff --git a/sysdeps/unix/sysv/linux/bits/pthread_stack_min.h b/sysdeps/unix/sysv/linux/bits/pthread_stack_min.h
new file mode 100644 (file)
index 0000000..7bd6fa1
--- /dev/null
@@ -0,0 +1,20 @@
+/* Definition of PTHREAD_STACK_MIN.  Linux version.
+   Copyright (C) 2021 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
+   <https://www.gnu.org/licenses/>.  */
+
+/* Minimum size for a thread.  We are free to choose a reasonable value.  */
+#define PTHREAD_STACK_MIN      16384
index 926508f2b4545bcc8f5d47f5c504e77ea204dc02..cd45d122e093e6f560f0bc573667e7f6ea390245 100644 (file)
@@ -20,7 +20,7 @@
 # error "Never include <bits/sigstksz.h> directly; use <signal.h> instead."
 #endif
 
-#if defined __USE_SC_SIGSTKSZ && __USE_SC_SIGSTKSZ
+#if defined __USE_DYNAMIC_STACK_SIZE && __USE_DYNAMIC_STACK_SIZE
 # include <unistd.h>
 
 /* Default stack size for a signal handler: sysconf (SC_SIGSTKSZ).  */
diff --git a/sysdeps/unix/sysv/linux/ia64/bits/local_lim.h b/sysdeps/unix/sysv/linux/ia64/bits/local_lim.h
deleted file mode 100644 (file)
index 7a9f677..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-/* Minimum guaranteed maximum values for system limits.  Linux/IA-64 version.
-   Copyright (C) 1993-2021 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
-   <https://www.gnu.org/licenses/>.  */
-
-/* The kernel header pollutes the namespace with the NR_OPEN symbol
-   and defines LINK_MAX although filesystems have different maxima.  A
-   similar thing is true for OPEN_MAX: the limit can be changed at
-   runtime and therefore the macro must not be defined.  Remove this
-   after including the header if necessary.  */
-#ifndef NR_OPEN
-# define __undef_NR_OPEN
-#endif
-#ifndef LINK_MAX
-# define __undef_LINK_MAX
-#endif
-#ifndef OPEN_MAX
-# define __undef_OPEN_MAX
-#endif
-#ifndef ARG_MAX
-# define __undef_ARG_MAX
-#endif
-
-/* The kernel sources contain a file with all the needed information.  */
-#include <linux/limits.h>
-
-/* Have to remove NR_OPEN?  */
-#ifdef __undef_NR_OPEN
-# undef NR_OPEN
-# undef __undef_NR_OPEN
-#endif
-/* Have to remove LINK_MAX?  */
-#ifdef __undef_LINK_MAX
-# undef LINK_MAX
-# undef __undef_LINK_MAX
-#endif
-/* Have to remove OPEN_MAX?  */
-#ifdef __undef_OPEN_MAX
-# undef OPEN_MAX
-# undef __undef_OPEN_MAX
-#endif
-/* Have to remove ARG_MAX?  */
-#ifdef __undef_ARG_MAX
-# undef ARG_MAX
-# undef __undef_ARG_MAX
-#endif
-
-/* The number of data keys per process.  */
-#define _POSIX_THREAD_KEYS_MAX 128
-/* This is the value this implementation supports.  */
-#define PTHREAD_KEYS_MAX       1024
-
-/* Controlling the iterations of destructors for thread-specific data.  */
-#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS    4
-/* Number of iterations this implementation does.  */
-#define PTHREAD_DESTRUCTOR_ITERATIONS  _POSIX_THREAD_DESTRUCTOR_ITERATIONS
-
-/* The number of threads per process.  */
-#define _POSIX_THREAD_THREADS_MAX      64
-/* We have no predefined limit on the number of threads.  */
-#undef PTHREAD_THREADS_MAX
-
-/* Maximum amount by which a process can descrease its asynchronous I/O
-   priority level.  */
-#define AIO_PRIO_DELTA_MAX     20
-
-/* Minimum size for a thread.  We are free to choose a reasonable value.  */
-#define PTHREAD_STACK_MIN      196608
-
-/* Maximum number of timer expiration overruns.  */
-#define DELAYTIMER_MAX 2147483647
-
-/* Maximum tty name length.  */
-#define TTY_NAME_MAX           32
-
-/* Maximum login name length.  This is arbitrary.  */
-#define LOGIN_NAME_MAX         256
-
-/* Maximum host name length.  */
-#define HOST_NAME_MAX          64
-
-/* Maximum message queue priority level.  */
-#define MQ_PRIO_MAX            32768
-
-/* Maximum value the semaphore can have.  */
-#define SEM_VALUE_MAX   (2147483647)
diff --git a/sysdeps/unix/sysv/linux/ia64/bits/pthread_stack_min.h b/sysdeps/unix/sysv/linux/ia64/bits/pthread_stack_min.h
new file mode 100644 (file)
index 0000000..7358150
--- /dev/null
@@ -0,0 +1,20 @@
+/* Definition of PTHREAD_STACK_MIN.  Linux/IA-64 version.
+   Copyright (C) 2021 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
+   <https://www.gnu.org/licenses/>.  */
+
+/* Minimum size for a thread.  We are free to choose a reasonable value.  */
+#define PTHREAD_STACK_MIN      196608
diff --git a/sysdeps/unix/sysv/linux/mips/bits/local_lim.h b/sysdeps/unix/sysv/linux/mips/bits/local_lim.h
deleted file mode 100644 (file)
index a6a0d8a..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-/* Minimum guaranteed maximum values for system limits.  MIPS Linux version.
-   Copyright (C) 1993-2021 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
-   <https://www.gnu.org/licenses/>.  */
-
-/* The kernel header pollutes the namespace with the NR_OPEN symbol
-   and defines LINK_MAX although filesystems have different maxima.  A
-   similar thing is true for OPEN_MAX: the limit can be changed at
-   runtime and therefore the macro must not be defined.  Remove this
-   after including the header if necessary.  */
-#ifndef NR_OPEN
-# define __undef_NR_OPEN
-#endif
-#ifndef LINK_MAX
-# define __undef_LINK_MAX
-#endif
-#ifndef OPEN_MAX
-# define __undef_OPEN_MAX
-#endif
-#ifndef ARG_MAX
-# define __undef_ARG_MAX
-#endif
-
-/* The kernel sources contain a file with all the needed information.  */
-#include <linux/limits.h>
-
-/* Have to remove NR_OPEN?  */
-#ifdef __undef_NR_OPEN
-# undef NR_OPEN
-# undef __undef_NR_OPEN
-#endif
-/* Have to remove LINK_MAX?  */
-#ifdef __undef_LINK_MAX
-# undef LINK_MAX
-# undef __undef_LINK_MAX
-#endif
-/* Have to remove OPEN_MAX?  */
-#ifdef __undef_OPEN_MAX
-# undef OPEN_MAX
-# undef __undef_OPEN_MAX
-#endif
-/* Have to remove ARG_MAX?  */
-#ifdef __undef_ARG_MAX
-# undef ARG_MAX
-# undef __undef_ARG_MAX
-#endif
-
-/* The number of data keys per process.  */
-#define _POSIX_THREAD_KEYS_MAX 128
-/* This is the value this implementation supports.  */
-#define PTHREAD_KEYS_MAX       1024
-
-/* Controlling the iterations of destructors for thread-specific data.  */
-#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS    4
-/* Number of iterations this implementation does.  */
-#define PTHREAD_DESTRUCTOR_ITERATIONS  _POSIX_THREAD_DESTRUCTOR_ITERATIONS
-
-/* The number of threads per process.  */
-#define _POSIX_THREAD_THREADS_MAX      64
-/* We have no predefined limit on the number of threads.  */
-#undef PTHREAD_THREADS_MAX
-
-/* Maximum amount by which a process can descrease its asynchronous I/O
-   priority level.  */
-#define AIO_PRIO_DELTA_MAX     20
-
-/* Minimum size for a thread.  At least two pages with 64k pages.  */
-#define PTHREAD_STACK_MIN      131072
-
-/* Maximum number of timer expiration overruns.  */
-#define DELAYTIMER_MAX 2147483647
-
-/* Maximum tty name length.  */
-#define TTY_NAME_MAX           32
-
-/* Maximum login name length.  This is arbitrary.  */
-#define LOGIN_NAME_MAX         256
-
-/* Maximum host name length.  */
-#define HOST_NAME_MAX          64
-
-/* Maximum message queue priority level.  */
-#define MQ_PRIO_MAX            32768
-
-/* Maximum value the semaphore can have.  */
-#define SEM_VALUE_MAX   (2147483647)
diff --git a/sysdeps/unix/sysv/linux/mips/bits/pthread_stack_min.h b/sysdeps/unix/sysv/linux/mips/bits/pthread_stack_min.h
new file mode 100644 (file)
index 0000000..132f170
--- /dev/null
@@ -0,0 +1,20 @@
+/* Definition of PTHREAD_STACK_MIN.  MIPS Linux version.
+   Copyright (C) 2021 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
+   <https://www.gnu.org/licenses/>.  */
+
+/* Minimum size for a thread.  At least two pages with 64k pages.  */
+#define PTHREAD_STACK_MIN      131072
diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/local_lim.h b/sysdeps/unix/sysv/linux/powerpc/bits/local_lim.h
deleted file mode 100644 (file)
index 6caa627..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-/* Minimum guaranteed maximum values for system limits.  Linux/PPC version.
-   Copyright (C) 1993-2021 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; see the file COPYING.LIB.  If
-   not, see <https://www.gnu.org/licenses/>.  */
-
-/* The kernel header pollutes the namespace with the NR_OPEN symbol
-   and defines LINK_MAX although filesystems have different maxima.  A
-   similar thing is true for OPEN_MAX: the limit can be changed at
-   runtime and therefore the macro must not be defined.  Remove this
-   after including the header if necessary.  */
-#ifndef NR_OPEN
-# define __undef_NR_OPEN
-#endif
-#ifndef LINK_MAX
-# define __undef_LINK_MAX
-#endif
-#ifndef OPEN_MAX
-# define __undef_OPEN_MAX
-#endif
-#ifndef ARG_MAX
-# define __undef_ARG_MAX
-#endif
-
-/* The kernel sources contain a file with all the needed information.  */
-#include <linux/limits.h>
-
-/* Have to remove NR_OPEN?  */
-#ifdef __undef_NR_OPEN
-# undef NR_OPEN
-# undef __undef_NR_OPEN
-#endif
-/* Have to remove LINK_MAX?  */
-#ifdef __undef_LINK_MAX
-# undef LINK_MAX
-# undef __undef_LINK_MAX
-#endif
-/* Have to remove OPEN_MAX?  */
-#ifdef __undef_OPEN_MAX
-# undef OPEN_MAX
-# undef __undef_OPEN_MAX
-#endif
-/* Have to remove ARG_MAX?  */
-#ifdef __undef_ARG_MAX
-# undef ARG_MAX
-# undef __undef_ARG_MAX
-#endif
-
-/* The number of data keys per process.  */
-#define _POSIX_THREAD_KEYS_MAX 128
-/* This is the value this implementation supports.  */
-#define PTHREAD_KEYS_MAX       1024
-
-/* Controlling the iterations of destructors for thread-specific data.  */
-#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS    4
-/* Number of iterations this implementation does.  */
-#define PTHREAD_DESTRUCTOR_ITERATIONS  _POSIX_THREAD_DESTRUCTOR_ITERATIONS
-
-/* The number of threads per process.  */
-#define _POSIX_THREAD_THREADS_MAX      64
-/* We have no predefined limit on the number of threads.  */
-#undef PTHREAD_THREADS_MAX
-
-/* Maximum amount by which a process can descrease its asynchronous I/O
-   priority level.  */
-#define AIO_PRIO_DELTA_MAX     20
-
-/* Minimum size for a thread.  At least two pages for systems with 64k
-   pages.  */
-#define PTHREAD_STACK_MIN      131072
-
-/* Maximum number of timer expiration overruns.  */
-#define DELAYTIMER_MAX 2147483647
-
-/* Maximum tty name length.  */
-#define TTY_NAME_MAX           32
-
-/* Maximum login name length.  This is arbitrary.  */
-#define LOGIN_NAME_MAX         256
-
-/* Maximum host name length.  */
-#define HOST_NAME_MAX          64
-
-/* Maximum message queue priority level.  */
-#define MQ_PRIO_MAX            32768
-
-/* Maximum value the semaphore can have.  */
-#define SEM_VALUE_MAX   (2147483647)
diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/pthread_stack_min.h b/sysdeps/unix/sysv/linux/powerpc/bits/pthread_stack_min.h
new file mode 100644 (file)
index 0000000..d7017e7
--- /dev/null
@@ -0,0 +1,21 @@
+/* Definition of PTHREAD_STACK_MIN.  Linux/PPC version.
+   Copyright (C) 2021 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; see the file COPYING.LIB.  If
+   not, see <https://www.gnu.org/licenses/>.  */
+
+/* Minimum size for a thread.  At least two pages for systems with 64k
+   pages.  */
+#define PTHREAD_STACK_MIN      131072
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/local_lim.h b/sysdeps/unix/sysv/linux/sparc/bits/local_lim.h
deleted file mode 100644 (file)
index 4a9a8c1..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-/* Minimum guaranteed maximum values for system limits.  Linux/SPARC version.
-   Copyright (C) 1993-2021 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 Library General Public License as
-   published by the Free Software Foundation; either version 2 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with the GNU C Library; see the file COPYING.LIB.  If
-   not, see <https://www.gnu.org/licenses/>.  */
-
-/* The kernel header pollutes the namespace with the NR_OPEN symbol
-   and defines LINK_MAX although filesystems have different maxima.  A
-   similar thing is true for OPEN_MAX: the limit can be changed at
-   runtime and therefore the macro must not be defined.  Remove this
-   after including the header if necessary.  */
-#ifndef NR_OPEN
-# define __undef_NR_OPEN
-#endif
-#ifndef LINK_MAX
-# define __undef_LINK_MAX
-#endif
-#ifndef OPEN_MAX
-# define __undef_OPEN_MAX
-#endif
-#ifndef ARG_MAX
-# define __undef_ARG_MAX
-#endif
-
-/* The kernel sources contain a file with all the needed information.  */
-#include <linux/limits.h>
-
-/* Have to remove NR_OPEN?  */
-#ifdef __undef_NR_OPEN
-# undef NR_OPEN
-# undef __undef_NR_OPEN
-#endif
-/* Have to remove LINK_MAX?  */
-#ifdef __undef_LINK_MAX
-# undef LINK_MAX
-# undef __undef_LINK_MAX
-#endif
-/* Have to remove OPEN_MAX?  */
-#ifdef __undef_OPEN_MAX
-# undef OPEN_MAX
-# undef __undef_OPEN_MAX
-#endif
-/* Have to remove ARG_MAX?  */
-#ifdef __undef_ARG_MAX
-# undef ARG_MAX
-# undef __undef_ARG_MAX
-#endif
-
-/* The number of data keys per process.  */
-#define _POSIX_THREAD_KEYS_MAX 128
-/* This is the value this implementation supports.  */
-#define PTHREAD_KEYS_MAX       1024
-
-/* Controlling the iterations of destructors for thread-specific data.  */
-#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS    4
-/* Number of iterations this implementation does.  */
-#define PTHREAD_DESTRUCTOR_ITERATIONS  _POSIX_THREAD_DESTRUCTOR_ITERATIONS
-
-/* The number of threads per process.  */
-#define _POSIX_THREAD_THREADS_MAX      64
-/* We have no predefined limit on the number of threads.  */
-#undef PTHREAD_THREADS_MAX
-
-/* Maximum amount by which a process can descrease its asynchronous I/O
-   priority level.  */
-#define AIO_PRIO_DELTA_MAX     20
-
-/* Minimum size for a thread.  We are free to choose a reasonable value.  */
-#define PTHREAD_STACK_MIN      24576
-
-/* Maximum number of timer expiration overruns.  */
-#define DELAYTIMER_MAX 2147483647
-
-/* Maximum tty name length.  */
-#define TTY_NAME_MAX           32
-
-/* Maximum login name length.  This is arbitrary.  */
-#define LOGIN_NAME_MAX         256
-
-/* Maximum host name length.  */
-#define HOST_NAME_MAX          64
-
-/* Maximum message queue priority level.  */
-#define MQ_PRIO_MAX            32768
-
-/* Maximum value the semaphore can have.  */
-#define SEM_VALUE_MAX   (2147483647)
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/pthread_stack_min.h b/sysdeps/unix/sysv/linux/sparc/bits/pthread_stack_min.h
new file mode 100644 (file)
index 0000000..bcacedb
--- /dev/null
@@ -0,0 +1,20 @@
+/* Definition of PTHREAD_STACK_MIN.  Linux/SPARC version.
+   Copyright (C) 2021 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 Library General Public License as
+   published by the Free Software Foundation; either version 2 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If
+   not, see <https://www.gnu.org/licenses/>.  */
+
+/* Minimum size for a thread.  We are free to choose a reasonable value.  */
+#define PTHREAD_STACK_MIN      24576
diff --git a/sysdeps/unix/sysv/linux/sysconf-pthread_stack_min.h b/sysdeps/unix/sysv/linux/sysconf-pthread_stack_min.h
new file mode 100644 (file)
index 0000000..9e0eb0f
--- /dev/null
@@ -0,0 +1,39 @@
+/* __get_pthread_stack_min ().  Linux version.
+   Copyright (C) 2021 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
+   <https://www.gnu.org/licenses/>.  */
+
+/* Return sysconf (_SC_THREAD_STACK_MIN).  */
+
+static inline long int
+__get_pthread_stack_min (void)
+{
+  /* sysconf (_SC_THREAD_STACK_MIN) >= sysconf (_SC_MINSIGSTKSZ).  */
+  long int pthread_stack_min = GLRO(dl_minsigstacksize);
+  assert (pthread_stack_min != 0);
+  _Static_assert (__builtin_constant_p (PTHREAD_STACK_MIN),
+                 "PTHREAD_STACK_MIN is constant");
+  /* Return MAX (PTHREAD_STACK_MIN, pthread_stack_min).  */
+  if (pthread_stack_min < PTHREAD_STACK_MIN)
+    pthread_stack_min = PTHREAD_STACK_MIN;
+  /* We have a private interface, __pthread_get_minstack@GLIBC_PRIVATE
+     which returns a larger size that includes the required TLS variable
+     space which has been determined at startup.  For sysconf here we are
+     conservative and don't include the space required for TLS access.
+     Eventually the TLS variable space will not be part of the stack
+     (Bug 11787).  */
+  return pthread_stack_min;
+}