Revert "Define PTHREAD_STACK_MIN to sysconf(_SC_THREAD_STACK_MIN)"

Message ID 20210715081339.1057-1-lukma@denx.de
State New
Headers show
Series
  • Revert "Define PTHREAD_STACK_MIN to sysconf(_SC_THREAD_STACK_MIN)"
Related show

Commit Message

Lukasz Majewski July 15, 2021, 8:13 a.m.
This reverts commit 5d98a7dae955bafa6740c26eaba9c86060ae0344.

The problem is with building gcc-runtime recipe (libgomp to be 
precise) under Yocto/OE (newest master).

This library calls sysconf function from glibc. Before this commit
it gave back the value based on some preprocessor defines.

Now it wants to call the sysconf syscall, which cannot be properly
served with the Yocto/OE environment and results if following error:
libgomp/config/linux/proc.c:85: undefined reference to `sysconf'

---
I've double checked and the sysconf symbol from glibc is properly 
exported.

The SHA1 of glibc: 8235f9311bddbe4cf8ff1fa8f72f41aa77e27e00
Branch: -master

---
 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, 626 insertions(+), 266 deletions(-)
 delete mode 100644 include/bits/local_lim.h
 delete mode 100644 sysdeps/posix/sysconf-pthread_stack_min.h
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/bits/local_lim.h
 delete mode 100644 sysdeps/unix/sysv/linux/aarch64/bits/pthread_stack_min.h
 create mode 100644 sysdeps/unix/sysv/linux/alpha/bits/local_lim.h
 delete mode 100644 sysdeps/unix/sysv/linux/alpha/bits/pthread_stack_min.h
 delete mode 100644 sysdeps/unix/sysv/linux/bits/pthread_stack_min.h
 create mode 100644 sysdeps/unix/sysv/linux/ia64/bits/local_lim.h
 delete mode 100644 sysdeps/unix/sysv/linux/ia64/bits/pthread_stack_min.h
 create mode 100644 sysdeps/unix/sysv/linux/mips/bits/local_lim.h
 delete mode 100644 sysdeps/unix/sysv/linux/mips/bits/pthread_stack_min.h
 create mode 100644 sysdeps/unix/sysv/linux/powerpc/bits/local_lim.h
 delete mode 100644 sysdeps/unix/sysv/linux/powerpc/bits/pthread_stack_min.h
 create mode 100644 sysdeps/unix/sysv/linux/sparc/bits/local_lim.h
 delete mode 100644 sysdeps/unix/sysv/linux/sparc/bits/pthread_stack_min.h
 delete mode 100644 sysdeps/unix/sysv/linux/sysconf-pthread_stack_min.h

-- 
2.20.1

Comments

Siddhesh Poyarekar July 15, 2021, 8:23 a.m. | #1
On 7/15/21 1:43 PM, Lukasz Majewski wrote:
> This reverts commit 5d98a7dae955bafa6740c26eaba9c86060ae0344.

> 

> The problem is with building gcc-runtime recipe (libgomp to be

> precise) under Yocto/OE (newest master).

> 

> This library calls sysconf function from glibc. Before this commit

> it gave back the value based on some preprocessor defines.

> 

> Now it wants to call the sysconf syscall, which cannot be properly

> served with the Yocto/OE environment and results if following error:

> libgomp/config/linux/proc.c:85: undefined reference to `sysconf'


Apparently the issue has been fixed so that a revert is unnecessary:

https://sourceware.org/pipermail/libc-alpha/2021-July/128963.html

Siddhesh
Lukasz Majewski July 15, 2021, 9:05 a.m. | #2
Hi Siddhesh,

> On 7/15/21 1:43 PM, Lukasz Majewski wrote:

> > This reverts commit 5d98a7dae955bafa6740c26eaba9c86060ae0344.

> > 

> > The problem is with building gcc-runtime recipe (libgomp to be

> > precise) under Yocto/OE (newest master).

> > 

> > This library calls sysconf function from glibc. Before this commit

> > it gave back the value based on some preprocessor defines.

> > 

> > Now it wants to call the sysconf syscall, which cannot be properly

> > served with the Yocto/OE environment and results if following error:

> > libgomp/config/linux/proc.c:85: undefined reference to `sysconf'  

> 

> Apparently the issue has been fixed so that a revert is unnecessary:

> 

> https://sourceware.org/pipermail/libc-alpha/2021-July/128963.html

> 


Great. Thanks for sharing this info :-)

> Siddhesh





Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de

Patch

diff --git a/NEWS b/NEWS
index 13ffe627da5..91d5f175989 100644
--- a/NEWS
+++ b/NEWS
@@ -9,12 +9,8 @@  Version 2.34
 
 Major new features:
 
-* 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
+* Add _SC_MINSIGSTKSZ and _SC_SIGSTKSZ.  When _SC_SIGSTKSZ_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
deleted file mode 100644
index 46d82dc7298..00000000000
--- a/include/bits/local_lim.h
+++ /dev/null
@@ -1,7 +0,0 @@ 
-/* 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 51c8a98fb0b..039bcb112be 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.
-   _DYNAMIC_STACK_SIZE_SOURCE Select correct (but non compile-time constant)
-			MINSIGSTKSZ, SIGSTKSZ and PTHREAD_STACK_MIN.
+   _SC_SIGSTKSZ_SOURCE	Select correct (but non compile-time constant)
+			MINSIGSTKSZ and SIGSTKSZ.
    _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_DYNAMIC_STACK_SIZE Define correct (but non compile-time constant)
-			MINSIGSTKSZ, SIGSTKSZ and PTHREAD_STACK_MIN.
+   __USE_SC_SIGSTKSZ	Define correct (but non compile-time constant)
+			MINSIGSTKSZ and SIGSTKSZ.
    __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_DYNAMIC_STACK_SIZE
+#undef	__USE_SC_SIGSTKSZ
 #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  _DYNAMIC_STACK_SIZE_SOURCE
-# define _DYNAMIC_STACK_SIZE_SOURCE 1
+# undef  _SC_SIGSTKSZ_SOURCE
+# define _SC_SIGSTKSZ_SOURCE 1
 #endif
 
 /* If nothing (other than _GNU_SOURCE and _DEFAULT_SOURCE) is defined,
@@ -399,8 +399,8 @@ 
 # define __USE_ATFILE	1
 #endif
 
-#ifdef	_DYNAMIC_STACK_SIZE_SOURCE
-# define __USE_DYNAMIC_STACK_SIZE	1
+#ifdef	_SC_SIGSTKSZ_SOURCE
+# define __USE_SC_SIGSTKSZ	1
 #endif
 
 #ifdef	_GNU_SOURCE
diff --git a/manual/creature.texi b/manual/creature.texi
index c13de52f1f0..d3c4fa4702d 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 _DYNAMIC_STACK_SIZE_SOURCE
+@defvr Macro _SC_SIGSTKSZ_SOURCE
 @standards{GNU, (none)}
 If this macro is defined, correct (but non compile-time constant)
-MINSIGSTKSZ, SIGSTKSZ and PTHREAD_STACK_MIN are defined.
+MINSIGSTKSZ and SIGSTKSZ are defined.
 @end defvr
 
 @defvr Macro _REENTRANT
diff --git a/nptl/tst-context1.c b/nptl/tst-context1.c
index 00e39aff9f8..821f3c21337 100644
--- a/nptl/tst-context1.c
+++ b/nptl/tst-context1.c
@@ -23,7 +23,6 @@ 
 #include <stdio.h>
 #include <stdlib.h>
 #include <ucontext.h>
-#include <support/support.h>
 
 #define N	4
 #if __WORDSIZE == 64
@@ -37,8 +36,7 @@  typedef struct {
        unsigned long	guard[3];
    } tst_context_t;
 
-static char *stacks[N];
-static size_t stack_size;
+static char stacks[N][2 * PTHREAD_STACK_MIN];
 static tst_context_t ctx[N][2];
 static volatile int failures;
 
@@ -81,7 +79,7 @@  fct (long int n)
       exit (1);
     }
 
-  if (on_stack < stacks[n] || on_stack >= stacks[n] + stack_size)
+  if (on_stack < stacks[n] || on_stack >= stacks[n] + sizeof (stacks[0]))
     {
       printf ("%ld: on_stack not on appropriate stack\n", n);
       exit (1);
@@ -111,7 +109,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 = stack_size;
+  ctx[n][1].uctx.uc_stack.ss_size = sizeof (stacks[n]);
   ctx[n][1].uctx.uc_link = &ctx[n][0].uctx;
   makecontext (&ctx[n][1].uctx, (void (*) (void)) fct, 1, (long int) n);
 
@@ -139,10 +137,6 @@  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)
     {
@@ -204,9 +198,6 @@  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 b48bb162853..a2b54685803 100644
--- a/stdlib/test-atexit-race-common.c
+++ b/stdlib/test-atexit-race-common.c
@@ -38,6 +38,11 @@ 
 
 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)
@@ -61,12 +66,6 @@  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 619a4eab00e..33b2bdff668 100644
--- a/support/support_path_support_time64.c
+++ b/support/support_path_support_time64.c
@@ -17,7 +17,6 @@ 
    <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
deleted file mode 100644
index f5be2e6f9f8..00000000000
--- a/sysdeps/posix/sysconf-pthread_stack_min.h
+++ /dev/null
@@ -1,29 +0,0 @@ 
-/* __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 5fb3fb6c1c3..3e8ec5cd512 100644
--- a/sysdeps/posix/sysconf.c
+++ b/sysdeps/posix/sysconf.c
@@ -31,7 +31,6 @@ 
 #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>
@@ -570,7 +569,11 @@  __sysconf (int name)
 #endif
 
     case _SC_THREAD_STACK_MIN:
-      return __get_pthread_stack_min ();
+#ifdef	PTHREAD_STACK_MIN
+      return PTHREAD_STACK_MIN;
+#else
+      return -1;
+#endif
 
     case _SC_THREAD_THREADS_MAX:
 #ifdef	PTHREAD_THREADS_MAX
diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
index 7d43dc95f25..d45a16af8ba 100644
--- a/sysdeps/unix/sysv/linux/Makefile
+++ b/sysdeps/unix/sysv/linux/Makefile
@@ -108,8 +108,7 @@  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/pthread_stack_min.h
+		  bits/types/struct_shmid64_ds_helper.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
new file mode 100644
index 00000000000..0652bf4a068
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/aarch64/bits/local_lim.h
@@ -0,0 +1,101 @@ 
+/* 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
deleted file mode 100644
index 97215687ad2..00000000000
--- a/sysdeps/unix/sysv/linux/aarch64/bits/pthread_stack_min.h
+++ /dev/null
@@ -1,22 +0,0 @@ 
-/* 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
new file mode 100644
index 00000000000..523407dc486
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/alpha/bits/local_lim.h
@@ -0,0 +1,99 @@ 
+/* 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
deleted file mode 100644
index 5bfb0e10dd6..00000000000
--- a/sysdeps/unix/sysv/linux/alpha/bits/pthread_stack_min.h
+++ /dev/null
@@ -1,20 +0,0 @@ 
-/* 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 0b1c7f40be6..b88ca3d4d20 100644
--- a/sysdeps/unix/sysv/linux/bits/local_lim.h
+++ b/sysdeps/unix/sysv/linux/bits/local_lim.h
@@ -78,13 +78,7 @@ 
 #define AIO_PRIO_DELTA_MAX	20
 
 /* Minimum size for a thread.  We are free to choose a reasonable value.  */
-#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
+#define PTHREAD_STACK_MIN	16384
 
 /* 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
deleted file mode 100644
index 7bd6fa1242e..00000000000
--- a/sysdeps/unix/sysv/linux/bits/pthread_stack_min.h
+++ /dev/null
@@ -1,20 +0,0 @@ 
-/* 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 cd45d122e09..926508f2b45 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_DYNAMIC_STACK_SIZE && __USE_DYNAMIC_STACK_SIZE
+#if defined __USE_SC_SIGSTKSZ && __USE_SC_SIGSTKSZ
 # 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
new file mode 100644
index 00000000000..7a9f677ec86
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/ia64/bits/local_lim.h
@@ -0,0 +1,99 @@ 
+/* 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
deleted file mode 100644
index 73581506b26..00000000000
--- a/sysdeps/unix/sysv/linux/ia64/bits/pthread_stack_min.h
+++ /dev/null
@@ -1,20 +0,0 @@ 
-/* 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
new file mode 100644
index 00000000000..a6a0d8a9800
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/bits/local_lim.h
@@ -0,0 +1,99 @@ 
+/* 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
deleted file mode 100644
index 132f1704a57..00000000000
--- a/sysdeps/unix/sysv/linux/mips/bits/pthread_stack_min.h
+++ /dev/null
@@ -1,20 +0,0 @@ 
-/* 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
new file mode 100644
index 00000000000..6caa627506a
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/powerpc/bits/local_lim.h
@@ -0,0 +1,100 @@ 
+/* 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
deleted file mode 100644
index d7017e7b244..00000000000
--- a/sysdeps/unix/sysv/linux/powerpc/bits/pthread_stack_min.h
+++ /dev/null
@@ -1,21 +0,0 @@ 
-/* 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
new file mode 100644
index 00000000000..4a9a8c1325d
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/sparc/bits/local_lim.h
@@ -0,0 +1,99 @@ 
+/* 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
deleted file mode 100644
index bcacedb73b3..00000000000
--- a/sysdeps/unix/sysv/linux/sparc/bits/pthread_stack_min.h
+++ /dev/null
@@ -1,20 +0,0 @@ 
-/* 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
deleted file mode 100644
index 9e0eb0f7fc1..00000000000
--- a/sysdeps/unix/sysv/linux/sysconf-pthread_stack_min.h
+++ /dev/null
@@ -1,39 +0,0 @@ 
-/* __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;
-}