From: "H.J. Lu via Libc-alpha" <libc-alpha@sourceware.org>
To: Maxim Kuvyrkov <maxim.kuvyrkov@linaro.org>
Cc: GNU C Library <libc-alpha@sourceware.org>
Subject: Re: [PATCH v5] Define PTHREAD_STACK_MIN to sysconf(_SC_THREAD_STACK_MIN)
Date: Mon, 12 Jul 2021 12:45:35 -0700 [thread overview]
Message-ID: <CAMe9rOrKZLSwK-1daKFpoYoKCs3-rqVPTh2NYdLvbj7+i+Dz4w@mail.gmail.com> (raw)
In-Reply-To: <58AE31E3-6592-4E3F-8554-72836C599605@linaro.org>
On Mon, Jul 12, 2021 at 12:05 PM Maxim Kuvyrkov
<maxim.kuvyrkov@linaro.org> wrote:
>
> Hi H.J.,
>
> This breaks GCC’s libgomp build on at least aarch64-linux-gnu:
>
> /builds/destdir/x86_64-pc-linux-gnu/aarch64-linux-gnu/bin/ld: .libs/env.o: in function `initialize_env':
> /snapshots/gcc.git~master/libgomp/env.c:1536: undefined reference to `sysconf'
> /snapshots/gcc.git~master/libgomp/env.c:1538: undefined reference to `sysconf'
> /snapshots/gcc.git~master/libgomp/env.c:1539: undefined reference to `sysconf'
> /builds/destdir/x86_64-pc-linux-gnu/aarch64-linux-gnu/bin/ld: .libs/proc.o: in function `gomp_init_num_threads':
> /snapshots/gcc.git~master/libgomp/config/linux/proc.c:85: undefined reference to `sysconf'
> /snapshots/gcc.git~master/libgomp/config/linux/proc.c:143: undefined reference to `sysconf'
> /snapshots/gcc.git~master/libgomp/config/linux/proc.c:174: more undefined references to `sysconf' follow
> collect2: error: ld returned 1 exit status
> make[4]: *** [Makefile:728: libgomp.la] Error 1
>
> Both GCC and Glibc are tip of trunk.
>
> Would you please take a look? Please let me know if it doesn’t easily reproduce and I’ll take a look.
Known issue. Several patches, glibc and GCC, have been proposed, including:
commit aaacde11f2e814814fdd19dfb683e76f1dede4d5
Author: Florian Weimer <fweimer@redhat.com>
Date: Mon Jul 12 18:43:32 2021 +0200
Reduce <limits.h> pollution due to dynamic PTHREAD_STACK_MIN
> Thanks,
>
> --
> Maxim Kuvyrkov
> https://www.linaro.org
>
> > On 10 Jul 2021, at 00:09, H.J. Lu via Libc-alpha <libc-alpha@sourceware.org> wrote:
> >
> > 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.
> > ---
> > NEWS | 8 +-
> > include/bits/local_lim.h | 7 ++
> > include/features.h | 18 ++--
> > manual/creature.texi | 4 +-
> > nptl/tst-context1.c | 15 ++-
> > stdlib/test-atexit-race-common.c | 11 +-
> > support/support_path_support_time64.c | 1 +
> > sysdeps/posix/sysconf-pthread_stack_min.h | 29 +++++
> > sysdeps/posix/sysconf.c | 7 +-
> > sysdeps/unix/sysv/linux/Makefile | 3 +-
> > .../unix/sysv/linux/aarch64/bits/local_lim.h | 101 ------------------
> > .../linux/aarch64/bits/pthread_stack_min.h | 22 ++++
> > .../unix/sysv/linux/alpha/bits/local_lim.h | 99 -----------------
> > .../sysv/linux/alpha/bits/pthread_stack_min.h | 20 ++++
> > sysdeps/unix/sysv/linux/bits/local_lim.h | 8 +-
> > .../unix/sysv/linux/bits/pthread_stack_min.h | 20 ++++
> > sysdeps/unix/sysv/linux/bits/sigstksz.h | 2 +-
> > sysdeps/unix/sysv/linux/ia64/bits/local_lim.h | 99 -----------------
> > .../sysv/linux/ia64/bits/pthread_stack_min.h | 20 ++++
> > sysdeps/unix/sysv/linux/mips/bits/local_lim.h | 99 -----------------
> > .../sysv/linux/mips/bits/pthread_stack_min.h | 20 ++++
> > .../unix/sysv/linux/powerpc/bits/local_lim.h | 100 -----------------
> > .../linux/powerpc/bits/pthread_stack_min.h | 21 ++++
> > .../unix/sysv/linux/sparc/bits/local_lim.h | 99 -----------------
> > .../sysv/linux/sparc/bits/pthread_stack_min.h | 20 ++++
> > .../sysv/linux/sysconf-pthread_stack_min.h | 39 +++++++
> > 26 files changed, 266 insertions(+), 626 deletions(-)
> > create mode 100644 include/bits/local_lim.h
> > create mode 100644 sysdeps/posix/sysconf-pthread_stack_min.h
> > delete mode 100644 sysdeps/unix/sysv/linux/aarch64/bits/local_lim.h
> > create mode 100644 sysdeps/unix/sysv/linux/aarch64/bits/pthread_stack_min.h
> > delete mode 100644 sysdeps/unix/sysv/linux/alpha/bits/local_lim.h
> > create mode 100644 sysdeps/unix/sysv/linux/alpha/bits/pthread_stack_min.h
> > create mode 100644 sysdeps/unix/sysv/linux/bits/pthread_stack_min.h
> > delete mode 100644 sysdeps/unix/sysv/linux/ia64/bits/local_lim.h
> > create mode 100644 sysdeps/unix/sysv/linux/ia64/bits/pthread_stack_min.h
> > delete mode 100644 sysdeps/unix/sysv/linux/mips/bits/local_lim.h
> > create mode 100644 sysdeps/unix/sysv/linux/mips/bits/pthread_stack_min.h
> > delete mode 100644 sysdeps/unix/sysv/linux/powerpc/bits/local_lim.h
> > create mode 100644 sysdeps/unix/sysv/linux/powerpc/bits/pthread_stack_min.h
> > delete mode 100644 sysdeps/unix/sysv/linux/sparc/bits/local_lim.h
> > create mode 100644 sysdeps/unix/sysv/linux/sparc/bits/pthread_stack_min.h
> > create mode 100644 sysdeps/unix/sysv/linux/sysconf-pthread_stack_min.h
> >
> > diff --git a/NEWS b/NEWS
> > index 91d5f17598..13ffe627da 100644
> > --- 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
> > index 0000000000..46d82dc729
> > --- /dev/null
> > +++ b/include/bits/local_lim.h
> > @@ -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>
> > diff --git a/include/features.h b/include/features.h
> > index 039bcb112b..51c8a98fb0 100644
> > --- a/include/features.h
> > +++ b/include/features.h
> > @@ -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.
> >
> > @@ -143,7 +143,7 @@
> > #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
> > @@ -220,8 +220,8 @@
> > # 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,
> > @@ -399,8 +399,8 @@
> > # 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
> > diff --git a/manual/creature.texi b/manual/creature.texi
> > index d3c4fa4702..c13de52f1f 100644
> > --- a/manual/creature.texi
> > +++ b/manual/creature.texi
> > @@ -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
> > diff --git a/nptl/tst-context1.c b/nptl/tst-context1.c
> > index 821f3c2133..00e39aff9f 100644
> > --- a/nptl/tst-context1.c
> > +++ b/nptl/tst-context1.c
> > @@ -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;
> > }
> >
> > diff --git a/stdlib/test-atexit-race-common.c b/stdlib/test-atexit-race-common.c
> > index a2b5468580..b48bb16285 100644
> > --- a/stdlib/test-atexit-race-common.c
> > +++ b/stdlib/test-atexit-race-common.c
> > @@ -38,11 +38,6 @@
> >
> > 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) {
> > diff --git a/support/support_path_support_time64.c b/support/support_path_support_time64.c
> > index 33b2bdff66..619a4eab00 100644
> > --- a/support/support_path_support_time64.c
> > +++ b/support/support_path_support_time64.c
> > @@ -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
> > index 0000000000..f5be2e6f9f
> > --- /dev/null
> > +++ b/sysdeps/posix/sysconf-pthread_stack_min.h
> > @@ -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
> > +}
> > diff --git a/sysdeps/posix/sysconf.c b/sysdeps/posix/sysconf.c
> > index 3e8ec5cd51..5fb3fb6c1c 100644
> > --- a/sysdeps/posix/sysconf.c
> > +++ b/sysdeps/posix/sysconf.c
> > @@ -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
> > diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
> > index d45a16af8b..7d43dc95f2 100644
> > --- a/sysdeps/unix/sysv/linux/Makefile
> > +++ b/sysdeps/unix/sysv/linux/Makefile
> > @@ -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
> > index 0652bf4a06..0000000000
> > --- a/sysdeps/unix/sysv/linux/aarch64/bits/local_lim.h
> > +++ /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
> > index 0000000000..97215687ad
> > --- /dev/null
> > +++ b/sysdeps/unix/sysv/linux/aarch64/bits/pthread_stack_min.h
> > @@ -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
> > index 523407dc48..0000000000
> > --- a/sysdeps/unix/sysv/linux/alpha/bits/local_lim.h
> > +++ /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
> > index 0000000000..5bfb0e10dd
> > --- /dev/null
> > +++ b/sysdeps/unix/sysv/linux/alpha/bits/pthread_stack_min.h
> > @@ -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
> > diff --git a/sysdeps/unix/sysv/linux/bits/local_lim.h b/sysdeps/unix/sysv/linux/bits/local_lim.h
> > index b88ca3d4d2..0b1c7f40be 100644
> > --- a/sysdeps/unix/sysv/linux/bits/local_lim.h
> > +++ b/sysdeps/unix/sysv/linux/bits/local_lim.h
> > @@ -78,7 +78,13 @@
> > #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
> > index 0000000000..7bd6fa1242
> > --- /dev/null
> > +++ b/sysdeps/unix/sysv/linux/bits/pthread_stack_min.h
> > @@ -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
> > diff --git a/sysdeps/unix/sysv/linux/bits/sigstksz.h b/sysdeps/unix/sysv/linux/bits/sigstksz.h
> > index 926508f2b4..cd45d122e0 100644
> > --- a/sysdeps/unix/sysv/linux/bits/sigstksz.h
> > +++ b/sysdeps/unix/sysv/linux/bits/sigstksz.h
> > @@ -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
> > index 7a9f677ec8..0000000000
> > --- a/sysdeps/unix/sysv/linux/ia64/bits/local_lim.h
> > +++ /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
> > index 0000000000..73581506b2
> > --- /dev/null
> > +++ b/sysdeps/unix/sysv/linux/ia64/bits/pthread_stack_min.h
> > @@ -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
> > index a6a0d8a980..0000000000
> > --- a/sysdeps/unix/sysv/linux/mips/bits/local_lim.h
> > +++ /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
> > index 0000000000..132f1704a5
> > --- /dev/null
> > +++ b/sysdeps/unix/sysv/linux/mips/bits/pthread_stack_min.h
> > @@ -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
> > index 6caa627506..0000000000
> > --- a/sysdeps/unix/sysv/linux/powerpc/bits/local_lim.h
> > +++ /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
> > index 0000000000..d7017e7b24
> > --- /dev/null
> > +++ b/sysdeps/unix/sysv/linux/powerpc/bits/pthread_stack_min.h
> > @@ -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
> > index 4a9a8c1325..0000000000
> > --- a/sysdeps/unix/sysv/linux/sparc/bits/local_lim.h
> > +++ /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
> > index 0000000000..bcacedb73b
> > --- /dev/null
> > +++ b/sysdeps/unix/sysv/linux/sparc/bits/pthread_stack_min.h
> > @@ -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
> > index 0000000000..9e0eb0f7fc
> > --- /dev/null
> > +++ b/sysdeps/unix/sysv/linux/sysconf-pthread_stack_min.h
> > @@ -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;
> > +}
> > --
> > 2.31.1
> >
>
--
H.J.
next prev parent reply other threads:[~2021-07-12 19:47 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-09 21:09 [PATCH v5] Define PTHREAD_STACK_MIN to sysconf(_SC_THREAD_STACK_MIN) H.J. Lu via Libc-alpha
2021-07-09 22:07 ` Carlos O'Donell via Libc-alpha
2021-07-12 19:07 ` Maxim Kuvyrkov via Libc-alpha
2021-07-12 19:45 ` H.J. Lu via Libc-alpha [this message]
2021-07-12 19:50 ` Florian Weimer via Libc-alpha
2021-07-16 22:17 ` Khem Raj via Libc-alpha
2021-07-17 21:59 ` Carlos O'Donell via Libc-alpha
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/libc/involved.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAMe9rOrKZLSwK-1daKFpoYoKCs3-rqVPTh2NYdLvbj7+i+Dz4w@mail.gmail.com \
--to=libc-alpha@sourceware.org \
--cc=hjl.tools@gmail.com \
--cc=maxim.kuvyrkov@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).