Package: release.debian.org
Severity: normal
X-Debbugs-Cc: gl...@packages.debian.org
Control: affects -1 + src:glibc
User: release.debian....@packages.debian.org
Usertags: unblock

Please pre-approve unblocking of package glibc/2.41-7

[ Reason ]

* The upstream stable branch got a few fixes since the toolchain freeze,
  and this update pulls them into the debian package. From the
  changelog:
  - Build a FMA version of atanh, sinh and tanh functions using IFUNC on
    amd64.
    => This improves performance of thoses functions on AVX2 capable
    hosts. There is no code change in these functions, this is just the
    same code compiled with -mfma -mavx2 and this is already done for
    most math functions.

  - Fix a crash on amd64 when disabling XSAVEC through the glibc.cpu.hwcaps
    tunable.
    => This is due to a change that has been introduced in glibc 2.40,
    this is reproducible running IBM's Java runtime with this tunable.
    Please see https://sourceware.org/bugzilla/show_bug.cgi?id=32810 

  - Extend glibc.rtld.execstack tunable to force executable stack.
    => Starting with glibc 2.41, libraries requiring an executable stack
    cannot be dynamically loaded through the dlopen mechanism from a binary
    that does not require an executable stack.
    A few issues have been reported for other distribution with
    third-party applications (Discord, Steam, Julia, ...), but they have
    been fixed promptly. No issue have been reported on the Debian side,
    but testing has probably less exposure than stable. This provides a
    way for users to execute third-party binaries that have not been
    fixed.
    Please see https://sourceware.org/bugzilla/show_bug.cgi?id=32653

  - Detect Intel Arrow Lake, Panther Lake, Clearwater Forest, and Diamond
    Rapids CPUs.
    => Some glibc functions have multiple implementation (IFUNC)
    depending on the CPU features. For string functions, there are
    different implementations depending on the microarchitecture. This
    just update the mapping between the microarchitecture and the
    implementation for recent or future Intel CPUs.

  - Handle unknown Intel processors with default tuning.
    => Linked with the above change, this just enables better default
    for unknown (iow future and not yet announced) Intel CPUs.

* In addition to the upstream changes, there are a few small changes:
  - debhelper.in/libc.NEWS: add an entry to describe the executable stack
    change and provide workaround.
  
  - Update the Romanian and Turkish translations.

  - Make pthread_setcanceltype a cancellation point on Hurd. This is a
    change in the HTL library (equivalent to NPTL on Linux) so Hurd
    specific code that is not build on Linux architectures. It is needed
    to get the testsuite passing, following the addition of an upstream
    test in the previous upload.

[ Impact ]
If the unblock isn't granted:
- Users will not get a way to run libraries requiring an executable
  stack.
- Performance on recent or future Intel CPUs might not be optimal
- Difference with the upstream stable branch will increase, which might
  make future updates more complicated (e.g. for a security fix).

[ Tests ]
The FMA build of atanh, sinh and tanh are covered by the existing
upstream tests when built on AVX2 capables hosts, which is the case of
our build daemons, and also of my laptop for the local test build.

The XSAVEC change is covered by additional upstream tests.

The executable stack tunable change is also covered by additional
upstream tests.

The Intel model detection has been tested by upstream on Intel Software
Development Emulator.

The Hurd change is also covered by the upstream teste (the issue has
been found that way), but it's also not a release architecture.

[ Risks ]
I believe the risks are relatively low, the changes are not in the core
part of the library, and most of them are covered by the testsuite.

[ Checklist ]
  [x] all changes are documented in the d/changelog
  [x] I reviewed all changes and I approve them
  [x] attach debdiff against the package in testing

[ Other info ]
None

unblock glibc/2.41-7
diff --git a/debian/changelog b/debian/changelog
index 6a53b5a8..461eb68f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,29 @@
+glibc (2.41-7) UNRELEASED; urgency=medium
+
+  [ Samuel Thibault ]
+  * debian/patches/hurd-i386/git-pthread_setcancel.diff: Fix tst-cond32.
+
+  [ Atila KOÇ ]
+  * Update Turkish debconf translation.  Closes: #1101162.
+
+  [ Remus-Gabriel Chelu ]
+  * Update Romanian debconf translation.  Closes: #1101814.
+
+  [ Aurelien Jarno ]
+  * debian/patches/git-updates.diff: update from upstream stable branch:
+    - Build a FMA version of atanh, sinh and tanh functions using IFUNC on
+      amd64.
+    - Fix a crash on amd64 when disabling XSAVEC through the glibc.cpu.hwcaps
+      tunable.
+    - Extend glibc.rtld.execstack tunable to force executable stack.
+    - Detect Intel Arrow Lake, Panther Lake, Clearwater Forest, and Diamond
+      Rapids CPUs.
+    - Handle unknown Intel processors with default tuning.
+  * debhelper.in/libc.NEWS: add an entry to describe the executable stack
+    change and provide workaround.
+
+ -- Samuel Thibault <sthiba...@debian.org>  Sat, 15 Mar 2025 22:41:14 +0100
+
 glibc (2.41-6) unstable; urgency=medium
 
   [ Samuel Thibault ]
diff --git a/debian/debhelper.in/libc.NEWS b/debian/debhelper.in/libc.NEWS
index 5be9149b..d7f970b9 100644
--- a/debian/debhelper.in/libc.NEWS
+++ b/debian/debhelper.in/libc.NEWS
@@ -1,3 +1,25 @@
+glibc (2.41-7) unstable; urgency=medium
+
+  Starting with glibc 2.41, shared libraries requiring an executable stack
+  cannot be dynamically loaded through the dlopen mechanism from a binary that
+  does not require an executable stack. This change aims to improve security,
+  as the previous behavior was used as a vector for RCE (CVE-2023-38408).
+  Attempting to do so will result in the following error:
+
+    cannot enable executable stack as shared object requires: Invalid argument
+
+  While most libraries generated in the past 20 years do not require an
+  executable stack, some third-party software still need this capability. Many
+  vendors have already updated their binaries to address this.
+
+  If you need to run a program that requires an executable stack through
+  dynamic loaded shared libraries, you can use the glibc.rtld.execstack
+  tunable:
+
+    GLIBC_TUNABLES=glibc.rtld.execstack=2 ./program
+
+ -- Aurelien Jarno <aure...@debian.org>  Sun, 13 Apr 2025 14:41:11 +0200
+
 glibc (2.32-0experimental1) experimental; urgency=medium
 
   The libc0.3-xen and libc6-xen packages have been removed in this version,
diff --git a/debian/patches/git-updates.diff b/debian/patches/git-updates.diff
index 784a4c50..80295b6a 100644
--- a/debian/patches/git-updates.diff
+++ b/debian/patches/git-updates.diff
@@ -22,15 +22,21 @@ index d0108d2caa..aa547a443f 100644
  $(common-objdir):$(subst $(empty) ,:,$(patsubst 
../$(subdir),.,$(rpath-dirs:%=$(common-objpfx)%)))
  else  # build-static
 diff --git a/NEWS b/NEWS
-index b11422b060..6912162e01 100644
+index b11422b060..8740f5956a 100644
 --- a/NEWS
 +++ b/NEWS
-@@ -5,6 +5,19 @@ See the end for copying conditions.
+@@ -5,6 +5,28 @@ See the end for copying conditions.
  Please send GNU C library bug reports via <https://sourceware.org/bugzilla/>
  using `glibc' in the "product" field.
  
 +Version 2.41.1
 +
++Deprecated and removed features, and other changes affecting compatibility:
++
++* The glibc.rtld.execstack now supports a compatibility mode to allow
++  programs that require an executable stack through dynamic loaded
++  shared libraries.
++
 +The following bugs were resolved with this release:
 +
 +  [32269] RISC-V IFUNC resolver cannot access gp pointer
@@ -38,9 +44,12 @@ index b11422b060..6912162e01 100644
 +  [32627] math: math: sinhf is not correctly rounded
 +  [32630] math: math: tanf is not correctly rounded for all rounding
 +    modes
++  [32653] dynamic-link: Review options for improving both security and
++    backwards compatibility of glibc 2.41 dlopen / execstack handling
 +  [32781] Linux: Remove attribute access from sched_getattr
 +  [32782] nptl: Race conditions in pthread cancellation causing crash
 +  [32786] nptl: PTHREAD_COND_INITIALIZER compatibility with pre-2.41 versions
++  [32810] Crash on x86-64 if XSAVEC disable via tunable
 +
  Version 2.41
  
@@ -604,6 +613,30 @@ index 0000000000..102cb0078d
 +#define EXPECTED_SIGNAL SIGABRT
 +#define TEST_FUNCTION_ARGV do_test
 +#include <support/test-driver.c>
+diff --git a/benchtests/atanh-inputs b/benchtests/atanh-inputs
+index 455aa65b65..4985293254 100644
+--- a/benchtests/atanh-inputs
++++ b/benchtests/atanh-inputs
+@@ -1,6 +1,7 @@
+ ## args: double
+ ## ret: double
+ ## includes: math.h
++## name: workload-random
+ 0x1.5a2730bacd94ap-1
+ -0x1.b57eb40fc048ep-21
+ -0x1.c0b185fb450e2p-17
+diff --git a/benchtests/sinh-inputs b/benchtests/sinh-inputs
+index 7b1ac46a39..2fcb2fabf8 100644
+--- a/benchtests/sinh-inputs
++++ b/benchtests/sinh-inputs
+@@ -1,6 +1,7 @@
+ ## args: double
+ ## ret: double
+ ## includes: math.h
++## name: workload-random
+ 0x1.bcb6129b5ff2bp8
+ -0x1.63057386325ebp9
+ 0x1.62f1d7dc4e8bfp9
 diff --git a/config.make.in b/config.make.in
 index 36096881b7..59897eaec2 100644
 --- a/config.make.in
@@ -868,10 +901,31 @@ index 050bfa65e3..57cd24c87d 100644
  AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#ifdef PIE_UNSUPPORTED
  # error PIE is not supported
 diff --git a/elf/Makefile b/elf/Makefile
-index 4b1d0d8741..d6bba4b0ec 100644
+index 4b1d0d8741..3a3ae56a24 100644
 --- a/elf/Makefile
 +++ b/elf/Makefile
-@@ -1144,6 +1144,10 @@ tests-pie += \
+@@ -61,6 +61,7 @@ dl-routines = \
+   dl-deps \
+   dl-exception \
+   dl-execstack \
++  dl-execstack-tunable \
+   dl-fini \
+   dl-init \
+   dl-load \
+@@ -567,9 +568,11 @@ tests-execstack-yes = \
+   tst-execstack \
+   tst-execstack-needed \
+   tst-execstack-prog \
++  tst-execstack-tunable \
+   # tests-execstack-yes
+ tests-execstack-static-yes = \
+-  tst-execstack-prog-static
++  tst-execstack-prog-static \
++  tst-execstack-prog-static-tunable \
+   # tests-execstack-static-yes
+ ifeq (yes,$(run-built-tests))
+ tests-execstack-special-yes = \
+@@ -1144,6 +1147,10 @@ tests-pie += \
    tst-pie1 \
    tst-pie2 \
    # tests-pie
@@ -882,7 +936,7 @@ index 4b1d0d8741..d6bba4b0ec 100644
  ifneq (,$(load-address-ldflag))
  tests += \
    tst-pie-address \
-@@ -1159,6 +1163,10 @@ tests += \
+@@ -1159,6 +1166,10 @@ tests += \
  tests-static += \
    tst-pie-address-static \
    # tests-static
@@ -893,7 +947,7 @@ index 4b1d0d8741..d6bba4b0ec 100644
  LDFLAGS-tst-pie-address-static += \
    $(load-address-ldflag)=$(pde-load-address)
  endif
-@@ -1988,6 +1996,9 @@ $(objpfx)tst-execstack.out: $(objpfx)tst-execstack-mod.so
+@@ -1988,6 +1999,9 @@ $(objpfx)tst-execstack.out: $(objpfx)tst-execstack-mod.so
  CPPFLAGS-tst-execstack.c += -DUSE_PTHREADS=0
  LDFLAGS-tst-execstack = -Wl,-z,noexecstack
  LDFLAGS-tst-execstack-mod.so = -Wl,-z,execstack
@@ -903,9 +957,18 @@ index 4b1d0d8741..d6bba4b0ec 100644
  
  $(objpfx)tst-execstack-needed: $(objpfx)tst-execstack-mod.so
  LDFLAGS-tst-execstack-needed = -Wl,-z,noexecstack
-@@ -1997,6 +2008,9 @@ CFLAGS-tst-execstack-prog.c += -Wno-trampolines
+@@ -1996,7 +2010,18 @@ LDFLAGS-tst-execstack-prog = -Wl,-z,execstack
+ CFLAGS-tst-execstack-prog.c += -Wno-trampolines
  CFLAGS-tst-execstack-mod.c += -Wno-trampolines
  
++# It expects loading a module with executable stack to work.
++CFLAGS-tst-execstack-tunable.c += -DUSE_PTHREADS=0 -DDEFAULT_RWX_STACK=1
++$(objpfx)tst-execstack-tunable.out: $(objpfx)tst-execstack-mod.so
++tst-execstack-tunable-ENV = GLIBC_TUNABLES=glibc.rtld.execstack=2
++
++LDFLAGS-tst-execstack-prog-static-tunable = -Wl,-z,noexecstack
++tst-execstack-prog-static-tunable-ENV = GLIBC_TUNABLES=glibc.rtld.execstack=2
++
  LDFLAGS-tst-execstack-prog-static = -Wl,-z,execstack
 +ifeq ($(have-no-error-execstack),yes)
 +LDFLAGS-tst-execstack-prog-static += -Wl,--no-error-execstack
@@ -913,7 +976,7 @@ index 4b1d0d8741..d6bba4b0ec 100644
  CFLAGS-tst-execstack-prog-static.c += -Wno-trampolines
  
  ifeq (yes,$(build-hardcoded-path-in-tests))
-@@ -2074,6 +2088,7 @@ $(objpfx)tst-array5-static-cmp.out: 
tst-array5-static.exp \
+@@ -2074,6 +2099,7 @@ $(objpfx)tst-array5-static-cmp.out: 
tst-array5-static.exp \
  
  CFLAGS-tst-pie1.c += $(pie-ccflag)
  CFLAGS-tst-pie2.c += $(pie-ccflag)
@@ -921,6 +984,51 @@ index 4b1d0d8741..d6bba4b0ec 100644
  CFLAGS-tst-pie-address.c += $(pie-ccflag)
  
  $(objpfx)tst-piemod1.so: $(libsupport)
+diff --git a/elf/dl-execstack-tunable.c b/elf/dl-execstack-tunable.c
+new file mode 100644
+index 0000000000..6cef1a3036
+--- /dev/null
++++ b/elf/dl-execstack-tunable.c
+@@ -0,0 +1,39 @@
++/* Stack executability handling for GNU dynamic linker.
++   Copyright (C) 2025 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/>.  */
++
++#include <ldsodefs.h>
++#include <dl-tunables.h>
++
++void
++_dl_handle_execstack_tunable (void)
++{
++  switch (TUNABLE_GET (glibc, rtld, execstack, int32_t, NULL))
++    {
++    case stack_tunable_mode_disable:
++      if ((__glibc_unlikely (GL(dl_stack_flags)) & PF_X))
++      _dl_fatal_printf (
++"Fatal glibc error: executable stack is not allowed\n");
++      break;
++
++    case stack_tunable_mode_force:
++      if (_dl_make_stack_executable (&__libc_stack_end) != 0)
++      _dl_fatal_printf (
++"Fatal glibc error: cannot enable executable stack as tunable requires");
++      break;
++    }
++}
 diff --git a/elf/dl-reloc-static-pie.c b/elf/dl-reloc-static-pie.c
 index e34bf5f7ce..758bf9893e 100644
 --- a/elf/dl-reloc-static-pie.c
@@ -935,6 +1043,65 @@ index e34bf5f7ce..758bf9893e 100644
          file_p_vaddr = ph->p_vaddr;
        break;
        case PT_DYNAMIC:
+diff --git a/elf/dl-support.c b/elf/dl-support.c
+index a7d5a5e8ab..0388e23448 100644
+--- a/elf/dl-support.c
++++ b/elf/dl-support.c
+@@ -332,9 +332,7 @@ _dl_non_dynamic_init (void)
+       break;
+       }
+ 
+-  if ((__glibc_unlikely (GL(dl_stack_flags)) & PF_X)
+-      && TUNABLE_GET (glibc, rtld, execstack, int32_t, NULL) == 0)
+-    _dl_fatal_printf ("Fatal glibc error: executable stack is not allowed\n");
++  _dl_handle_execstack_tunable ();
+ 
+   call_function_static_weak (_dl_find_object_init);
+ 
+diff --git a/elf/dl-tunables.list b/elf/dl-tunables.list
+index 0b6721bc51..c03c9967f0 100644
+--- a/elf/dl-tunables.list
++++ b/elf/dl-tunables.list
+@@ -138,7 +138,7 @@ glibc {
+     execstack {
+       type: INT_32
+       minval: 0
+-      maxval: 1
++      maxval: 2
+       default: 1
+     }
+   }
+diff --git a/elf/rtld.c b/elf/rtld.c
+index 00bec15316..7a8aa56377 100644
+--- a/elf/rtld.c
++++ b/elf/rtld.c
+@@ -1626,9 +1626,9 @@ dl_main (const ElfW(Phdr) *phdr,
+ 
+   bool has_interp = rtld_setup_main_map (main_map);
+ 
+-  if ((__glibc_unlikely (GL(dl_stack_flags)) & PF_X)
+-      && TUNABLE_GET (glibc, rtld, execstack, int32_t, NULL) == 0)
+-    _dl_fatal_printf ("Fatal glibc error: executable stack is not allowed\n");
++  /* Handle this after PT_GNU_STACK parse, because it updates dl_stack_flags
++     if required.  */
++  _dl_handle_execstack_tunable ();
+ 
+   /* If the current libname is different from the SONAME, add the
+      latter as well.  */
+diff --git a/elf/tst-execstack-prog-static-tunable.c 
b/elf/tst-execstack-prog-static-tunable.c
+new file mode 100644
+index 0000000000..88b0ca1263
+--- /dev/null
++++ b/elf/tst-execstack-prog-static-tunable.c
+@@ -0,0 +1 @@
++#include <tst-execstack-prog-static.c>
+diff --git a/elf/tst-execstack-tunable.c b/elf/tst-execstack-tunable.c
+new file mode 100644
+index 0000000000..9f03b0f7ca
+--- /dev/null
++++ b/elf/tst-execstack-tunable.c
+@@ -0,0 +1 @@
++#include <tst-execstack.c>
 diff --git a/elf/tst-pie-bss-static.c b/elf/tst-pie-bss-static.c
 new file mode 100644
 index 0000000000..5df542f9ee
@@ -996,6 +1163,18 @@ index 0000000000..ee92754249
 +}
 +
 +#include <support/test-driver.c>
+diff --git a/elf/tst-rtld-list-tunables.exp b/elf/tst-rtld-list-tunables.exp
+index 9f5990f340..8df6f5906e 100644
+--- a/elf/tst-rtld-list-tunables.exp
++++ b/elf/tst-rtld-list-tunables.exp
+@@ -13,6 +13,6 @@ glibc.malloc.top_pad: 0x20000 (min: 0x0, max: 0x[f]+)
+ glibc.malloc.trim_threshold: 0x0 (min: 0x0, max: 0x[f]+)
+ glibc.rtld.dynamic_sort: 2 (min: 1, max: 2)
+ glibc.rtld.enable_secure: 0 (min: 0, max: 1)
+-glibc.rtld.execstack: 1 (min: 0, max: 1)
++glibc.rtld.execstack: 1 (min: 0, max: 2)
+ glibc.rtld.nns: 0x4 (min: 0x1, max: 0x10)
+ glibc.rtld.optional_static_tls: 0x200 (min: 0x0, max: 0x[f]+)
 diff --git a/math/auto-libm-test-in b/math/auto-libm-test-in
 index 01ba689aa8..4f194da19d 100644
 --- a/math/auto-libm-test-in
@@ -2604,6 +2783,78 @@ index 0000000000..7fb40fdd9e
 +
 +END (__memset_sve_zva64)
 +#endif
+diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h
+index e871f27ff2..4b44beb3f4 100644
+--- a/sysdeps/generic/ldsodefs.h
++++ b/sysdeps/generic/ldsodefs.h
+@@ -695,6 +695,19 @@ extern const ElfW(Phdr) *_dl_phdr;
+ extern size_t _dl_phnum;
+ #endif
+ 
++/* Possible values for the glibc.rtld.execstack tunable.  */
++enum stack_tunable_mode
++  {
++    /* Do not allow executable stacks, even if program requires it.  */
++    stack_tunable_mode_disable = 0,
++    /* Follows either ABI requirement, or the PT_GNU_STACK value.  */
++    stack_tunable_mode_enable = 1,
++    /* Always enable an executable stack.  */
++    stack_tunable_mode_force = 2
++  };
++
++void _dl_handle_execstack_tunable (void) attribute_hidden;
++
+ /* This function changes the permission of the memory region pointed
+    by STACK_ENDP to executable and update the internal memory protection
+    flags for future thread stack creation.  */
+diff --git a/sysdeps/ieee754/dbl-64/e_atanh.c 
b/sysdeps/ieee754/dbl-64/e_atanh.c
+index 1e09e46f0f..d1c71b2aa4 100644
+--- a/sysdeps/ieee754/dbl-64/e_atanh.c
++++ b/sysdeps/ieee754/dbl-64/e_atanh.c
+@@ -44,6 +44,11 @@
+ 
+ static const double huge = 1e300;
+ 
++#ifndef SECTION
++# define SECTION
++#endif
++
++SECTION
+ double
+ __ieee754_atanh (double x)
+ {
+@@ -73,4 +78,7 @@ __ieee754_atanh (double x)
+ 
+   return copysign (t, x);
+ }
++
++#ifndef __ieee754_atanh
+ libm_alias_finite (__ieee754_atanh, __atanh)
++#endif
+diff --git a/sysdeps/ieee754/dbl-64/e_sinh.c b/sysdeps/ieee754/dbl-64/e_sinh.c
+index b4b5857ddd..3f787967f9 100644
+--- a/sysdeps/ieee754/dbl-64/e_sinh.c
++++ b/sysdeps/ieee754/dbl-64/e_sinh.c
+@@ -41,6 +41,11 @@ static char rcsid[] = "$NetBSD: e_sinh.c,v 1.7 1995/05/10 
20:46:13 jtc Exp $";
+ 
+ static const double one = 1.0, shuge = 1.0e307;
+ 
++#ifndef SECTION
++# define SECTION
++#endif
++
++SECTION
+ double
+ __ieee754_sinh (double x)
+ {
+@@ -90,4 +95,7 @@ __ieee754_sinh (double x)
+   /* |x| > overflowthresold, sinh(x) overflow */
+   return math_narrow_eval (x * shuge);
+ }
++
++#ifndef __ieee754_sinh
+ libm_alias_finite (__ieee754_sinh, __sinh)
++#endif
 diff --git a/sysdeps/ieee754/dbl-64/math_config.h 
b/sysdeps/ieee754/dbl-64/math_config.h
 index 299a2ff8c1..3382e385f9 100644
 --- a/sysdeps/ieee754/dbl-64/math_config.h
@@ -2643,6 +2894,22 @@ index 20f617b996..42351c6b34 100644
    if (__glibc_likely (adjust == 0))
      {
        if ((u.ieee.mantissa1 & 1) == 0 && u.ieee.exponent != 0x7ff)
+diff --git a/sysdeps/ieee754/dbl-64/s_tanh.c b/sysdeps/ieee754/dbl-64/s_tanh.c
+index 673a97102d..13063db04e 100644
+--- a/sysdeps/ieee754/dbl-64/s_tanh.c
++++ b/sysdeps/ieee754/dbl-64/s_tanh.c
+@@ -46,6 +46,11 @@ static char rcsid[] = "$NetBSD: s_tanh.c,v 1.7 1995/05/10 
20:48:22 jtc Exp $";
+ 
+ static const double one = 1.0, two = 2.0, tiny = 1.0e-300;
+ 
++#ifndef SECTION
++# define SECTION
++#endif
++
++SECTION
+ double
+ __tanh (double x)
+ {
 diff --git a/sysdeps/ieee754/flt-32/e_sinhf.c 
b/sysdeps/ieee754/flt-32/e_sinhf.c
 index c007c7d174..dee96fc7cb 100644
 --- a/sysdeps/ieee754/flt-32/e_sinhf.c
@@ -3661,6 +3928,46 @@ index f89e784243..d2ab4cb829 100644
  
        int ret = INTERNAL_SYSCALL_CALL (rseq, RSEQ_SELF (), size, 0, RSEQ_SIG);
        if (!INTERNAL_SYSCALL_ERROR_P (ret))
+diff --git a/sysdeps/x86/Makefile b/sysdeps/x86/Makefile
+index 5311b594af..01b0192ddf 100644
+--- a/sysdeps/x86/Makefile
++++ b/sysdeps/x86/Makefile
+@@ -21,6 +21,9 @@ tests += \
+   tst-cpu-features-supports-static \
+   tst-get-cpu-features \
+   tst-get-cpu-features-static \
++  tst-gnu2-tls2-x86-noxsave \
++  tst-gnu2-tls2-x86-noxsavec \
++  tst-gnu2-tls2-x86-noxsavexsavec \
+   tst-hwcap-tunables \
+ # tests
+ tests-static += \
+@@ -91,6 +94,25 @@ CFLAGS-tst-gnu2-tls2.c += -msse
+ CFLAGS-tst-gnu2-tls2mod0.c += -msse2 -mtune=haswell
+ CFLAGS-tst-gnu2-tls2mod1.c += -msse2 -mtune=haswell
+ CFLAGS-tst-gnu2-tls2mod2.c += -msse2 -mtune=haswell
++
++LDFLAGS-tst-gnu2-tls2-x86-noxsave += -Wl,-z,lazy
++LDFLAGS-tst-gnu2-tls2-x86-noxsavec += -Wl,-z,lazy
++LDFLAGS-tst-gnu2-tls2-x86-noxsavexsavec += -Wl,-z,lazy
++
++# Test for bug 32810: incorrect XSAVE state size if XSAVEC is disabled
++# via tunable.
++tst-gnu2-tls2-x86-noxsave-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=-XSAVE
++tst-gnu2-tls2-x86-noxsavec-ENV = GLIBC_TUNABLES=glibc.cpu.hwcaps=-XSAVEC
++tst-gnu2-tls2-x86-noxsavexsavec-ENV = 
GLIBC_TUNABLES=glibc.cpu.hwcaps=-XSAVE,-XSAVEC
++$(objpfx)tst-gnu2-tls2-x86-noxsave: $(shared-thread-library)
++$(objpfx)tst-gnu2-tls2-x86-noxsavec: $(shared-thread-library)
++$(objpfx)tst-gnu2-tls2-x86-noxsavexsavec: $(shared-thread-library)
++$(objpfx)tst-gnu2-tls2-x86-noxsave.out \
++$(objpfx)tst-gnu2-tls2-x86-noxsavec.out \
++$(objpfx)tst-gnu2-tls2-x86-noxsavexsavec.out: \
++  $(objpfx)tst-gnu2-tls2mod0.so \
++  $(objpfx)tst-gnu2-tls2mod1.so \
++  $(objpfx)tst-gnu2-tls2mod2.so
+ endif
+ 
+ ifeq ($(subdir),math)
 diff --git a/sysdeps/x86/bits/floatn.h b/sysdeps/x86/bits/floatn.h
 index d197cb10dd..4674165bd7 100644
 --- a/sysdeps/x86/bits/floatn.h
@@ -3692,3 +3999,871 @@ index d197cb10dd..4674165bd7 100644
  typedef __float128 _Float128;
  #  endif
  
+diff --git a/sysdeps/x86/cpu-features.c b/sysdeps/x86/cpu-features.c
+index 27abaca8b7..e50f1d6932 100644
+--- a/sysdeps/x86/cpu-features.c
++++ b/sysdeps/x86/cpu-features.c
+@@ -24,6 +24,7 @@
+ #include <dl-cacheinfo.h>
+ #include <dl-minsigstacksize.h>
+ #include <dl-hwcap2.h>
++#include <gcc-macros.h>
+ 
+ extern void TUNABLE_CALLBACK (set_hwcaps) (tunable_val_t *)
+   attribute_hidden;
+@@ -83,6 +84,8 @@ extern void TUNABLE_CALLBACK (set_x86_shstk) (tunable_val_t 
*)
+ # include <dl-cet.h>
+ #endif
+ 
++unsigned long int _dl_x86_features_tlsdesc_state_size;
++
+ static void
+ update_active (struct cpu_features *cpu_features)
+ {
+@@ -317,17 +320,13 @@ update_active (struct cpu_features *cpu_features)
+               = xsave_state_full_size;
+             cpu_features->xsave_state_full_size
+               = xsave_state_full_size;
++            _dl_x86_features_tlsdesc_state_size = xsave_state_full_size;
+ 
+             /* Check if XSAVEC is available.  */
+             if (CPU_FEATURES_CPU_P (cpu_features, XSAVEC))
+               {
+-                unsigned int xstate_comp_offsets[32];
+-                unsigned int xstate_comp_sizes[32];
+-#ifdef __x86_64__
+-                unsigned int xstate_amx_comp_offsets[32];
+-                unsigned int xstate_amx_comp_sizes[32];
+-                unsigned int amx_ecx;
+-#endif
++                unsigned int xstate_comp_offsets[X86_XSTATE_MAX_ID + 1];
++                unsigned int xstate_comp_sizes[X86_XSTATE_MAX_ID + 1];
+                 unsigned int i;
+ 
+                 xstate_comp_offsets[0] = 0;
+@@ -335,39 +334,16 @@ update_active (struct cpu_features *cpu_features)
+                 xstate_comp_offsets[2] = 576;
+                 xstate_comp_sizes[0] = 160;
+                 xstate_comp_sizes[1] = 256;
+-#ifdef __x86_64__
+-                xstate_amx_comp_offsets[0] = 0;
+-                xstate_amx_comp_offsets[1] = 160;
+-                xstate_amx_comp_offsets[2] = 576;
+-                xstate_amx_comp_sizes[0] = 160;
+-                xstate_amx_comp_sizes[1] = 256;
+-#endif
+ 
+-                for (i = 2; i < 32; i++)
++                for (i = 2; i <= X86_XSTATE_MAX_ID; i++)
+                   {
+                     if ((FULL_STATE_SAVE_MASK & (1 << i)) != 0)
+                       {
+                         __cpuid_count (0xd, i, eax, ebx, ecx, edx);
+-#ifdef __x86_64__
+-                        /* Include this in xsave_state_full_size.  */
+-                        amx_ecx = ecx;
+-                        xstate_amx_comp_sizes[i] = eax;
+-                        if ((AMX_STATE_SAVE_MASK & (1 << i)) != 0)
+-                          {
+-                            /* Exclude this from xsave_state_size.  */
+-                            ecx = 0;
+-                            xstate_comp_sizes[i] = 0;
+-                          }
+-                        else
+-#endif
+-                          xstate_comp_sizes[i] = eax;
++                        xstate_comp_sizes[i] = eax;
+                       }
+                     else
+                       {
+-#ifdef __x86_64__
+-                        amx_ecx = 0;
+-                        xstate_amx_comp_sizes[i] = 0;
+-#endif
+                         ecx = 0;
+                         xstate_comp_sizes[i] = 0;
+                       }
+@@ -376,44 +352,32 @@ update_active (struct cpu_features *cpu_features)
+                       {
+                         xstate_comp_offsets[i]
+                           = (xstate_comp_offsets[i - 1]
+-                             + xstate_comp_sizes[i -1]);
++                             + xstate_comp_sizes[i - 1]);
+                         if ((ecx & (1 << 1)) != 0)
+                           xstate_comp_offsets[i]
+                             = ALIGN_UP (xstate_comp_offsets[i], 64);
+-#ifdef __x86_64__
+-                        xstate_amx_comp_offsets[i]
+-                          = (xstate_amx_comp_offsets[i - 1]
+-                             + xstate_amx_comp_sizes[i - 1]);
+-                        if ((amx_ecx & (1 << 1)) != 0)
+-                          xstate_amx_comp_offsets[i]
+-                            = ALIGN_UP (xstate_amx_comp_offsets[i],
+-                                        64);
+-#endif
+                       }
+                   }
+ 
+                 /* Use XSAVEC.  */
+                 unsigned int size
+-                  = xstate_comp_offsets[31] + xstate_comp_sizes[31];
++                  = (xstate_comp_offsets[X86_XSTATE_MAX_ID]
++                     + xstate_comp_sizes[X86_XSTATE_MAX_ID]);
+                 if (size)
+                   {
++                    size = ALIGN_UP (size + TLSDESC_CALL_REGISTER_SAVE_AREA,
++                                     64);
+ #ifdef __x86_64__
+-                    unsigned int amx_size
+-                      = (xstate_amx_comp_offsets[31]
+-                         + xstate_amx_comp_sizes[31]);
+-                    amx_size
+-                      = ALIGN_UP ((amx_size
+-                                   + TLSDESC_CALL_REGISTER_SAVE_AREA),
+-                                  64);
+-                    /* Set xsave_state_full_size to the compact AMX
+-                       state size for XSAVEC.  NB: xsave_state_full_size
+-                       is only used in _dl_tlsdesc_dynamic_xsave and
+-                       _dl_tlsdesc_dynamic_xsavec.  */
+-                    cpu_features->xsave_state_full_size = amx_size;
++                    _dl_x86_features_tlsdesc_state_size = size;
++                    /* Exclude the AMX space from the start of TILECFG
++                       space to the end of TILEDATA space.  If CPU
++                       doesn't support AMX, TILECFG offset is the same
++                       as TILEDATA + 1 offset.  Otherwise, they are
++                       multiples of 64.  */
++                    size -= (xstate_comp_offsets[X86_XSTATE_TILEDATA_ID + 1]
++                             - xstate_comp_offsets[X86_XSTATE_TILECFG_ID]);
+ #endif
+-                    cpu_features->xsave_state_size
+-                      = ALIGN_UP (size + TLSDESC_CALL_REGISTER_SAVE_AREA,
+-                                  64);
++                    cpu_features->xsave_state_size = size;
+                     CPU_FEATURE_SET (cpu_features, XSAVEC);
+                   }
+               }
+@@ -538,8 +502,8 @@ _Static_assert (((index_arch_Fast_Unaligned_Load
+               "Incorrect index_arch_Fast_Unaligned_Load");
+ 
+ 
+-/* Intel Family-6 microarch list.  */
+-enum
++/* Intel microarch list.  */
++enum intel_microarch
+ {
+   /* Atom processors.  */
+   INTEL_ATOM_BONNELL,
+@@ -548,6 +512,7 @@ enum
+   INTEL_ATOM_GOLDMONT,
+   INTEL_ATOM_GOLDMONT_PLUS,
+   INTEL_ATOM_SIERRAFOREST,
++  INTEL_ATOM_CLEARWATERFOREST,
+   INTEL_ATOM_GRANDRIDGE,
+   INTEL_ATOM_TREMONT,
+ 
+@@ -575,7 +540,9 @@ enum
+   INTEL_BIGCORE_METEORLAKE,
+   INTEL_BIGCORE_LUNARLAKE,
+   INTEL_BIGCORE_ARROWLAKE,
++  INTEL_BIGCORE_PANTHERLAKE,
+   INTEL_BIGCORE_GRANITERAPIDS,
++  INTEL_BIGCORE_DIAMONDRAPIDS,
+ 
+   /* Mixed (bigcore + atom SOC).  */
+   INTEL_MIXED_LAKEFIELD,
+@@ -589,7 +556,7 @@ enum
+   INTEL_UNKNOWN,
+ };
+ 
+-static unsigned int
++static enum intel_microarch
+ intel_get_fam6_microarch (unsigned int model,
+                         __attribute__ ((unused)) unsigned int stepping)
+ {
+@@ -620,6 +587,8 @@ intel_get_fam6_microarch (unsigned int model,
+       return INTEL_ATOM_GOLDMONT_PLUS;
+     case 0xAF:
+       return INTEL_ATOM_SIERRAFOREST;
++    case 0xDD:
++      return INTEL_ATOM_CLEARWATERFOREST;
+     case 0xB6:
+       return INTEL_ATOM_GRANDRIDGE;
+     case 0x86:
+@@ -727,8 +696,12 @@ intel_get_fam6_microarch (unsigned int model,
+       return INTEL_BIGCORE_METEORLAKE;
+     case 0xbd:
+       return INTEL_BIGCORE_LUNARLAKE;
++    case 0xb5:
++    case 0xc5:
+     case 0xc6:
+       return INTEL_BIGCORE_ARROWLAKE;
++    case 0xCC:
++      return INTEL_BIGCORE_PANTHERLAKE;
+     case 0xAD:
+     case 0xAE:
+       return INTEL_BIGCORE_GRANITERAPIDS;
+@@ -792,133 +765,20 @@ init_cpu_features (struct cpu_features *cpu_features)
+       cpu_features->preferred[index_arch_Avoid_Non_Temporal_Memset]
+         &= ~bit_arch_Avoid_Non_Temporal_Memset;
+ 
++      enum intel_microarch microarch = INTEL_UNKNOWN;
+       if (family == 0x06)
+       {
+         model += extended_model;
+-        unsigned int microarch
+-            = intel_get_fam6_microarch (model, stepping);
++        microarch = intel_get_fam6_microarch (model, stepping);
+ 
++        /* Disable TSX on some processors to avoid TSX on kernels that
++           weren't updated with the latest microcode package (which
++           disables broken feature by default).  */
+         switch (microarch)
+           {
+-            /* Atom / KNL tuning.  */
+-          case INTEL_ATOM_BONNELL:
+-            /* BSF is slow on Bonnell.  */
+-            cpu_features->preferred[index_arch_Slow_BSF]
+-                |= bit_arch_Slow_BSF;
+-            break;
+-
+-            /* Unaligned load versions are faster than SSSE3
+-                   on Airmont, Silvermont, Goldmont, and Goldmont Plus.  */
+-          case INTEL_ATOM_AIRMONT:
+-          case INTEL_ATOM_SILVERMONT:
+-          case INTEL_ATOM_GOLDMONT:
+-          case INTEL_ATOM_GOLDMONT_PLUS:
+-
+-          /* Knights Landing.  Enable Silvermont optimizations.  */
+-          case INTEL_KNIGHTS_LANDING:
+-
+-            cpu_features->preferred[index_arch_Fast_Unaligned_Load]
+-                |= (bit_arch_Fast_Unaligned_Load
+-                    | bit_arch_Fast_Unaligned_Copy
+-                    | bit_arch_Prefer_PMINUB_for_stringop
+-                    | bit_arch_Slow_SSE4_2);
+-            break;
+-
+-          case INTEL_ATOM_TREMONT:
+-            /* Enable rep string instructions, unaligned load, unaligned
+-               copy, pminub and avoid SSE 4.2 on Tremont.  */
+-            cpu_features->preferred[index_arch_Fast_Rep_String]
+-                |= (bit_arch_Fast_Rep_String
+-                    | bit_arch_Fast_Unaligned_Load
+-                    | bit_arch_Fast_Unaligned_Copy
+-                    | bit_arch_Prefer_PMINUB_for_stringop
+-                    | bit_arch_Slow_SSE4_2);
+-            break;
+-
+-         /*
+-          Default tuned Knights microarch.
+-          case INTEL_KNIGHTS_MILL:
+-        */
+-
+-         /*
+-          Default tuned atom microarch.
+-          case INTEL_ATOM_SIERRAFOREST:
+-          case INTEL_ATOM_GRANDRIDGE:
+-         */
+-
+-            /* Bigcore/Default Tuning.  */
+           default:
+-          default_tuning:
+-            /* Unknown family 0x06 processors.  Assuming this is one
+-               of Core i3/i5/i7 processors if AVX is available.  */
+-            if (!CPU_FEATURES_CPU_P (cpu_features, AVX))
+-              break;
+-
+-          enable_modern_features:
+-            /* Rep string instructions, unaligned load, unaligned copy,
+-               and pminub are fast on Intel Core i3, i5 and i7.  */
+-            cpu_features->preferred[index_arch_Fast_Rep_String]
+-                |= (bit_arch_Fast_Rep_String
+-                    | bit_arch_Fast_Unaligned_Load
+-                    | bit_arch_Fast_Unaligned_Copy
+-                    | bit_arch_Prefer_PMINUB_for_stringop);
+             break;
+ 
+-          case INTEL_BIGCORE_NEHALEM:
+-          case INTEL_BIGCORE_WESTMERE:
+-            /* Older CPUs prefer non-temporal stores at lower threshold.  */
+-            cpu_features->cachesize_non_temporal_divisor = 8;
+-            goto enable_modern_features;
+-
+-            /* Older Bigcore microarch (smaller non-temporal store
+-               threshold).  */
+-          case INTEL_BIGCORE_SANDYBRIDGE:
+-          case INTEL_BIGCORE_IVYBRIDGE:
+-          case INTEL_BIGCORE_HASWELL:
+-          case INTEL_BIGCORE_BROADWELL:
+-            cpu_features->cachesize_non_temporal_divisor = 8;
+-            goto default_tuning;
+-
+-            /* Newer Bigcore microarch (larger non-temporal store
+-               threshold).  */
+-          case INTEL_BIGCORE_SKYLAKE_AVX512:
+-          case INTEL_BIGCORE_CANNONLAKE:
+-            /* Benchmarks indicate non-temporal memset is not
+-                   necessarily profitable on SKX (and in some cases much
+-                   worse). This is likely unique to SKX due its it unique
+-                   mesh interconnect (not present on ICX or BWD). Disable
+-                   non-temporal on all Skylake servers. */
+-            cpu_features->preferred[index_arch_Avoid_Non_Temporal_Memset]
+-                |= bit_arch_Avoid_Non_Temporal_Memset;
+-            /* fallthrough */
+-          case INTEL_BIGCORE_COMETLAKE:
+-          case INTEL_BIGCORE_SKYLAKE:
+-          case INTEL_BIGCORE_KABYLAKE:
+-          case INTEL_BIGCORE_ICELAKE:
+-          case INTEL_BIGCORE_TIGERLAKE:
+-          case INTEL_BIGCORE_ROCKETLAKE:
+-          case INTEL_BIGCORE_RAPTORLAKE:
+-          case INTEL_BIGCORE_METEORLAKE:
+-          case INTEL_BIGCORE_LUNARLAKE:
+-          case INTEL_BIGCORE_ARROWLAKE:
+-          case INTEL_BIGCORE_SAPPHIRERAPIDS:
+-          case INTEL_BIGCORE_EMERALDRAPIDS:
+-          case INTEL_BIGCORE_GRANITERAPIDS:
+-            cpu_features->cachesize_non_temporal_divisor = 2;
+-            goto default_tuning;
+-
+-            /* Default tuned Mixed (bigcore + atom SOC). */
+-          case INTEL_MIXED_LAKEFIELD:
+-          case INTEL_MIXED_ALDERLAKE:
+-            cpu_features->cachesize_non_temporal_divisor = 2;
+-            goto default_tuning;
+-          }
+-
+-            /* Disable TSX on some processors to avoid TSX on kernels that
+-               weren't updated with the latest microcode package (which
+-               disables broken feature by default).  */
+-        switch (microarch)
+-          {
+           case INTEL_BIGCORE_SKYLAKE_AVX512:
+             /* 0x55 (Skylake-avx512) && stepping <= 5 disable TSX. */
+             if (stepping <= 5)
+@@ -927,38 +787,163 @@ init_cpu_features (struct cpu_features *cpu_features)
+ 
+           case INTEL_BIGCORE_KABYLAKE:
+             /* NB: Although the errata documents that for model == 0x8e
+-                   (kabylake skylake client), only 0xb stepping or lower are
+-                   impacted, the intention of the errata was to disable TSX on
+-                   all client processors on all steppings.  Include 0xc
+-                   stepping which is an Intel Core i7-8665U, a client mobile
+-                   processor.  */
++               (kabylake skylake client), only 0xb stepping or lower are
++               impacted, the intention of the errata was to disable TSX on
++               all client processors on all steppings.  Include 0xc
++               stepping which is an Intel Core i7-8665U, a client mobile
++               processor.  */
+             if (stepping > 0xc)
+               break;
+             /* Fall through.  */
+           case INTEL_BIGCORE_SKYLAKE:
+-              /* Disable Intel TSX and enable RTM_ALWAYS_ABORT for
+-                 processors listed in:
+-
+-https://www.intel.com/content/www/us/en/support/articles/000059422/processors.html
+-               */
+-          disable_tsx:
+-              CPU_FEATURE_UNSET (cpu_features, HLE);
+-              CPU_FEATURE_UNSET (cpu_features, RTM);
+-              CPU_FEATURE_SET (cpu_features, RTM_ALWAYS_ABORT);
+-              break;
++            /* Disable Intel TSX and enable RTM_ALWAYS_ABORT for
++               processors listed in:
++
++               
https://www.intel.com/content/www/us/en/support/articles/000059422/processors.html
++             */
++disable_tsx:
++            CPU_FEATURE_UNSET (cpu_features, HLE);
++            CPU_FEATURE_UNSET (cpu_features, RTM);
++            CPU_FEATURE_SET (cpu_features, RTM_ALWAYS_ABORT);
++            break;
+ 
+           case INTEL_BIGCORE_HASWELL:
+-              /* Xeon E7 v3 (model == 0x3f) with stepping >= 4 has working
+-                 TSX.  Haswell also include other model numbers that have
+-                 working TSX.  */
+-              if (model == 0x3f && stepping >= 4)
++            /* Xeon E7 v3 (model == 0x3f) with stepping >= 4 has working
++               TSX.  Haswell also includes other model numbers that have
++               working TSX.  */
++            if (model == 0x3f && stepping >= 4)
+               break;
+ 
+-              CPU_FEATURE_UNSET (cpu_features, RTM);
+-              break;
++            CPU_FEATURE_UNSET (cpu_features, RTM);
++            break;
+           }
+       }
++      else if (family == 19)
++      switch (model)
++        {
++        case 0x01:
++          microarch = INTEL_BIGCORE_DIAMONDRAPIDS;
++          break;
+ 
++        default:
++          break;
++        }
++
++      switch (microarch)
++      {
++        /* Atom / KNL tuning.  */
++      case INTEL_ATOM_BONNELL:
++        /* BSF is slow on Bonnell.  */
++        cpu_features->preferred[index_arch_Slow_BSF]
++          |= bit_arch_Slow_BSF;
++        break;
++
++        /* Unaligned load versions are faster than SSSE3
++           on Airmont, Silvermont, Goldmont, and Goldmont Plus.  */
++      case INTEL_ATOM_AIRMONT:
++      case INTEL_ATOM_SILVERMONT:
++      case INTEL_ATOM_GOLDMONT:
++      case INTEL_ATOM_GOLDMONT_PLUS:
++
++        /* Knights Landing.  Enable Silvermont optimizations.  */
++      case INTEL_KNIGHTS_LANDING:
++
++        cpu_features->preferred[index_arch_Fast_Unaligned_Load]
++          |= (bit_arch_Fast_Unaligned_Load
++              | bit_arch_Fast_Unaligned_Copy
++              | bit_arch_Prefer_PMINUB_for_stringop
++              | bit_arch_Slow_SSE4_2);
++        break;
++
++      case INTEL_ATOM_TREMONT:
++        /* Enable rep string instructions, unaligned load, unaligned
++           copy, pminub and avoid SSE 4.2 on Tremont.  */
++        cpu_features->preferred[index_arch_Fast_Rep_String]
++          |= (bit_arch_Fast_Rep_String
++              | bit_arch_Fast_Unaligned_Load
++              | bit_arch_Fast_Unaligned_Copy
++              | bit_arch_Prefer_PMINUB_for_stringop
++              | bit_arch_Slow_SSE4_2);
++        break;
++
++        /*
++           Default tuned Knights microarch.
++           case INTEL_KNIGHTS_MILL:
++           */
++
++        /*
++           Default tuned atom microarch.
++           case INTEL_ATOM_SIERRAFOREST:
++           case INTEL_ATOM_GRANDRIDGE:
++           case INTEL_ATOM_CLEARWATERFOREST:
++           */
++
++        /* Bigcore/Default Tuning.  */
++      default:
++      default_tuning:
++        /* Unknown Intel processors.  Assuming this is one of Core
++           i3/i5/i7 processors if AVX is available.  */
++        if (!CPU_FEATURES_CPU_P (cpu_features, AVX))
++          break;
++
++      enable_modern_features:
++        /* Rep string instructions, unaligned load, unaligned copy,
++           and pminub are fast on Intel Core i3, i5 and i7.  */
++        cpu_features->preferred[index_arch_Fast_Rep_String]
++          |= (bit_arch_Fast_Rep_String
++              | bit_arch_Fast_Unaligned_Load
++              | bit_arch_Fast_Unaligned_Copy
++              | bit_arch_Prefer_PMINUB_for_stringop);
++        break;
++
++      case INTEL_BIGCORE_NEHALEM:
++      case INTEL_BIGCORE_WESTMERE:
++        /* Older CPUs prefer non-temporal stores at lower threshold.  */
++        cpu_features->cachesize_non_temporal_divisor = 8;
++        goto enable_modern_features;
++
++        /* Older Bigcore microarch (smaller non-temporal store
++           threshold).  */
++      case INTEL_BIGCORE_SANDYBRIDGE:
++      case INTEL_BIGCORE_IVYBRIDGE:
++      case INTEL_BIGCORE_HASWELL:
++      case INTEL_BIGCORE_BROADWELL:
++        cpu_features->cachesize_non_temporal_divisor = 8;
++        goto default_tuning;
++
++        /* Newer Bigcore microarch (larger non-temporal store
++           threshold).  */
++      case INTEL_BIGCORE_SKYLAKE_AVX512:
++      case INTEL_BIGCORE_CANNONLAKE:
++        /* Benchmarks indicate non-temporal memset is not
++           necessarily profitable on SKX (and in some cases much
++           worse). This is likely unique to SKX due to its unique
++           mesh interconnect (not present on ICX or BWD). Disable
++           non-temporal on all Skylake servers. */
++        cpu_features->preferred[index_arch_Avoid_Non_Temporal_Memset]
++          |= bit_arch_Avoid_Non_Temporal_Memset;
++        /* fallthrough */
++      case INTEL_BIGCORE_COMETLAKE:
++      case INTEL_BIGCORE_SKYLAKE:
++      case INTEL_BIGCORE_KABYLAKE:
++      case INTEL_BIGCORE_ICELAKE:
++      case INTEL_BIGCORE_TIGERLAKE:
++      case INTEL_BIGCORE_ROCKETLAKE:
++      case INTEL_BIGCORE_RAPTORLAKE:
++      case INTEL_BIGCORE_METEORLAKE:
++      case INTEL_BIGCORE_LUNARLAKE:
++      case INTEL_BIGCORE_ARROWLAKE:
++      case INTEL_BIGCORE_PANTHERLAKE:
++      case INTEL_BIGCORE_SAPPHIRERAPIDS:
++      case INTEL_BIGCORE_EMERALDRAPIDS:
++      case INTEL_BIGCORE_GRANITERAPIDS:
++      case INTEL_BIGCORE_DIAMONDRAPIDS:
++        /* Default tuned Mixed (bigcore + atom SOC). */
++      case INTEL_MIXED_LAKEFIELD:
++      case INTEL_MIXED_ALDERLAKE:
++        cpu_features->cachesize_non_temporal_divisor = 2;
++        goto default_tuning;
++      }
+ 
+       /* Since AVX512ER is unique to Xeon Phi, set Prefer_No_VZEROUPPER
+          if AVX512ER is available.  Don't use AVX512 to avoid lower CPU
+@@ -1159,6 +1144,9 @@ no_cpuid:
+              TUNABLE_CALLBACK (set_prefer_map_32bit_exec));
+ #endif
+ 
++  /* Do not add the logic to disable XSAVE/XSAVEC if this glibc build
++     requires AVX and therefore XSAVE or XSAVEC support.  */
++#ifndef GCCMACRO__AVX__
+   bool disable_xsave_features = false;
+ 
+   if (!CPU_FEATURE_USABLE_P (cpu_features, OSXSAVE))
+@@ -1212,6 +1200,7 @@ no_cpuid:
+ 
+       CPU_FEATURE_UNSET (cpu_features, FMA4);
+     }
++#endif
+ 
+ #ifdef __x86_64__
+   GLRO(dl_hwcap) = HWCAP_X86_64;
+diff --git a/sysdeps/x86/cpu-tunables.c b/sysdeps/x86/cpu-tunables.c
+index 3423176802..d692e0e0de 100644
+--- a/sysdeps/x86/cpu-tunables.c
++++ b/sysdeps/x86/cpu-tunables.c
+@@ -164,6 +164,8 @@ TUNABLE_CALLBACK (set_hwcaps) (tunable_val_t *valp)
+                 /* Update xsave_state_size to XSAVE state size.  */
+                 cpu_features->xsave_state_size
+                   = cpu_features->xsave_state_full_size;
++                _dl_x86_features_tlsdesc_state_size
++                  = cpu_features->xsave_state_full_size;
+                 CPU_FEATURE_UNSET (cpu_features, XSAVEC);
+               }
+           }
+diff --git a/sysdeps/x86/dl-diagnostics-cpu.c 
b/sysdeps/x86/dl-diagnostics-cpu.c
+index 7d0373602d..870b1268db 100644
+--- a/sysdeps/x86/dl-diagnostics-cpu.c
++++ b/sysdeps/x86/dl-diagnostics-cpu.c
+@@ -89,6 +89,8 @@ _dl_diagnostics_cpu (void)
+                             cpu_features->xsave_state_size);
+   print_cpu_features_value ("xsave_state_full_size",
+                             cpu_features->xsave_state_full_size);
++  print_cpu_features_value ("tlsdesc_state_full_size",
++                            _dl_x86_features_tlsdesc_state_size);
+   print_cpu_features_value ("data_cache_size", cpu_features->data_cache_size);
+   print_cpu_features_value ("shared_cache_size",
+                             cpu_features->shared_cache_size);
+diff --git a/sysdeps/x86/include/cpu-features.h 
b/sysdeps/x86/include/cpu-features.h
+index 9c485d38ef..fbf1b89110 100644
+--- a/sysdeps/x86/include/cpu-features.h
++++ b/sysdeps/x86/include/cpu-features.h
+@@ -935,8 +935,6 @@ struct cpu_features
+   /* The full state size for XSAVE when XSAVEC is disabled by
+ 
+      GLIBC_TUNABLES=glibc.cpu.hwcaps=-XSAVEC
+-
+-     and the AMX state size when XSAVEC is available.
+    */
+   unsigned int xsave_state_full_size;
+   /* Data cache size for use in memory and string routines, typically
+@@ -990,6 +988,13 @@ extern const struct cpu_features 
*_dl_x86_get_cpu_features (void)
+ 
+ #define __get_cpu_features() _dl_x86_get_cpu_features()
+ 
++#if IS_IN (rtld) || IS_IN (libc)
++/* XSAVE/XSAVEC state size used by TLS descriptors.  Compared to
++   xsave_state_size from struct cpu_features, this includes additional
++   registers.  */
++extern unsigned long int _dl_x86_features_tlsdesc_state_size attribute_hidden;
++#endif
++
+ #if defined (_LIBC) && !IS_IN (nonlib)
+ /* Unused for x86.  */
+ # define INIT_ARCH()
+diff --git a/sysdeps/x86/sysdep.h b/sysdeps/x86/sysdep.h
+index 541393f1dc..c3c73e75dd 100644
+--- a/sysdeps/x86/sysdep.h
++++ b/sysdeps/x86/sysdep.h
+@@ -102,6 +102,9 @@
+    | (1 << X86_XSTATE_ZMM_ID)         \
+    | (1 << X86_XSTATE_APX_F_ID))
+ 
++/* The maximum supported xstate ID.  */
++# define X86_XSTATE_MAX_ID    X86_XSTATE_APX_F_ID
++
+ /* AMX state mask.  */
+ # define AMX_STATE_SAVE_MASK          \
+   ((1 << X86_XSTATE_TILECFG_ID) | (1 << X86_XSTATE_TILEDATA_ID))
+@@ -123,6 +126,9 @@
+    | (1 << X86_XSTATE_K_ID)           \
+    | (1 << X86_XSTATE_ZMM_H_ID))
+ 
++/* The maximum supported xstate ID.  */
++# define X86_XSTATE_MAX_ID    X86_XSTATE_ZMM_H_ID
++
+ /* States to be included in xsave_state_size.  */
+ # define FULL_STATE_SAVE_MASK         STATE_SAVE_MASK
+ #endif
+diff --git a/sysdeps/x86/tst-gnu2-tls2-x86-noxsave.c 
b/sysdeps/x86/tst-gnu2-tls2-x86-noxsave.c
+new file mode 100644
+index 0000000000..f0024c143d
+--- /dev/null
++++ b/sysdeps/x86/tst-gnu2-tls2-x86-noxsave.c
+@@ -0,0 +1 @@
++#include <elf/tst-gnu2-tls2.c>
+diff --git a/sysdeps/x86/tst-gnu2-tls2-x86-noxsavec.c 
b/sysdeps/x86/tst-gnu2-tls2-x86-noxsavec.c
+new file mode 100644
+index 0000000000..f0024c143d
+--- /dev/null
++++ b/sysdeps/x86/tst-gnu2-tls2-x86-noxsavec.c
+@@ -0,0 +1 @@
++#include <elf/tst-gnu2-tls2.c>
+diff --git a/sysdeps/x86/tst-gnu2-tls2-x86-noxsavexsavec.c 
b/sysdeps/x86/tst-gnu2-tls2-x86-noxsavexsavec.c
+new file mode 100644
+index 0000000000..f0024c143d
+--- /dev/null
++++ b/sysdeps/x86/tst-gnu2-tls2-x86-noxsavexsavec.c
+@@ -0,0 +1 @@
++#include <elf/tst-gnu2-tls2.c>
+diff --git a/sysdeps/x86_64/dl-tlsdesc-dynamic.h 
b/sysdeps/x86_64/dl-tlsdesc-dynamic.h
+index 9965ddd2c0..4f496de8c8 100644
+--- a/sysdeps/x86_64/dl-tlsdesc-dynamic.h
++++ b/sysdeps/x86_64/dl-tlsdesc-dynamic.h
+@@ -99,7 +99,7 @@ _dl_tlsdesc_dynamic:
+ # endif
+ #else
+       /* Allocate stack space of the required size to save the state.  */
+-      sub     
_rtld_local_ro+RTLD_GLOBAL_RO_DL_X86_CPU_FEATURES_OFFSET+XSAVE_STATE_FULL_SIZE_OFFSET(%rip),
 %RSP_LP
++      sub     _dl_x86_features_tlsdesc_state_size(%rip), %RSP_LP
+ #endif
+       /* Besides rdi and rsi, saved above, save rcx, rdx, r8, r9,
+          r10 and r11.  */
+diff --git a/sysdeps/x86_64/fpu/multiarch/Makefile 
b/sysdeps/x86_64/fpu/multiarch/Makefile
+index e823d2fcc6..3403422443 100644
+--- a/sysdeps/x86_64/fpu/multiarch/Makefile
++++ b/sysdeps/x86_64/fpu/multiarch/Makefile
+@@ -1,15 +1,18 @@
+ ifeq ($(subdir),math)
+ CFLAGS-e_asin-fma.c = -mfma -mavx2
+ CFLAGS-e_atan2-fma.c = -mfma -mavx2
++CFLAGS-e_atanh-fma.c = -mfma -mavx2
+ CFLAGS-e_exp-fma.c = -mfma -mavx2
+ CFLAGS-e_log-fma.c = -mfma -mavx2
+ CFLAGS-e_log2-fma.c = -mfma -mavx2
+ CFLAGS-e_pow-fma.c = -mfma -mavx2
++CFLAGS-e_sinh-fma.c = -mfma -mavx2
+ CFLAGS-s_atan-fma.c = -mfma -mavx2
+ CFLAGS-s_expm1-fma.c = -mfma -mavx2
+ CFLAGS-s_log1p-fma.c = -mfma -mavx2
+ CFLAGS-s_sin-fma.c = -mfma -mavx2
+ CFLAGS-s_tan-fma.c = -mfma -mavx2
++CFLAGS-s_tanh-fma.c = -mfma -mavx2
+ CFLAGS-s_sincos-fma.c = -mfma -mavx2
+ CFLAGS-s_exp10m1f-fma.c = -mfma -mavx2
+ CFLAGS-s_exp2m1f-fma.c = -mfma -mavx2
+@@ -57,6 +60,7 @@ libm-sysdep_routines += \
+   e_asin-fma \
+   e_atan2-avx \
+   e_atan2-fma \
++  e_atanh-fma \
+   e_exp-avx \
+   e_exp-fma \
+   e_exp2f-fma \
+@@ -68,6 +72,7 @@ libm-sysdep_routines += \
+   e_logf-fma \
+   e_pow-fma \
+   e_powf-fma \
++  e_sinh-fma \
+   s_atan-avx \
+   s_atan-fma \
+   s_ceil-sse4_1 \
+@@ -96,6 +101,7 @@ libm-sysdep_routines += \
+   s_sinf-sse2 \
+   s_tan-avx \
+   s_tan-fma \
++  s_tanh-fma \
+   s_trunc-sse4_1 \
+   s_truncf-sse4_1 \
+ # libm-sysdep_routines
+diff --git a/sysdeps/x86_64/fpu/multiarch/e_atanh-fma.c 
b/sysdeps/x86_64/fpu/multiarch/e_atanh-fma.c
+new file mode 100644
+index 0000000000..c3f2f9e550
+--- /dev/null
++++ b/sysdeps/x86_64/fpu/multiarch/e_atanh-fma.c
+@@ -0,0 +1,6 @@
++#define __ieee754_atanh __ieee754_atanh_fma
++#define __log1p __log1p_fma
++
++#define SECTION __attribute__ ((section (".text.fma")))
++
++#include <sysdeps/ieee754/dbl-64/e_atanh.c>
+diff --git a/sysdeps/x86_64/fpu/multiarch/e_atanh.c 
b/sysdeps/x86_64/fpu/multiarch/e_atanh.c
+new file mode 100644
+index 0000000000..d2b785dfc0
+--- /dev/null
++++ b/sysdeps/x86_64/fpu/multiarch/e_atanh.c
+@@ -0,0 +1,34 @@
++/* Multiple versions of atanh.
++   Copyright (C) 2025 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/>.  */
++
++#include <sysdeps/x86/isa-level.h>
++#if MINIMUM_X86_ISA_LEVEL < AVX2_X86_ISA_LEVEL
++# include <libm-alias-finite.h>
++
++extern double __redirect_ieee754_atanh (double);
++
++# define SYMBOL_NAME ieee754_atanh
++# include "ifunc-fma.h"
++
++libc_ifunc_redirected (__redirect_ieee754_atanh, __ieee754_atanh, 
IFUNC_SELECTOR ());
++
++libm_alias_finite (__ieee754_atanh, __atanh)
++
++# define __ieee754_atanh __ieee754_atanh_sse2
++#endif
++#include <sysdeps/ieee754/dbl-64/e_atanh.c>
+diff --git a/sysdeps/x86_64/fpu/multiarch/e_sinh-fma.c 
b/sysdeps/x86_64/fpu/multiarch/e_sinh-fma.c
+new file mode 100644
+index 0000000000..e0e1e39a7a
+--- /dev/null
++++ b/sysdeps/x86_64/fpu/multiarch/e_sinh-fma.c
+@@ -0,0 +1,12 @@
++#define __ieee754_sinh __ieee754_sinh_fma
++#define __ieee754_exp __ieee754_exp_fma
++#define __expm1 __expm1_fma
++
++/* NB: __expm1 may be expanded to __expm1_fma in the following
++   prototypes.  */
++extern long double __expm1l (long double);
++extern long double __expm1f128 (long double);
++
++#define SECTION __attribute__ ((section (".text.fma")))
++
++#include <sysdeps/ieee754/dbl-64/e_sinh.c>
+diff --git a/sysdeps/x86_64/fpu/multiarch/e_sinh.c 
b/sysdeps/x86_64/fpu/multiarch/e_sinh.c
+new file mode 100644
+index 0000000000..3d3c18ccdf
+--- /dev/null
++++ b/sysdeps/x86_64/fpu/multiarch/e_sinh.c
+@@ -0,0 +1,35 @@
++/* Multiple versions of sinh.
++   Copyright (C) 2025 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/>.  */
++
++#include <sysdeps/x86/isa-level.h>
++#if MINIMUM_X86_ISA_LEVEL < AVX2_X86_ISA_LEVEL
++# include <libm-alias-finite.h>
++
++extern double __redirect_ieee754_sinh (double);
++
++# define SYMBOL_NAME ieee754_sinh
++# include "ifunc-fma.h"
++
++libc_ifunc_redirected (__redirect_ieee754_sinh, __ieee754_sinh,
++                     IFUNC_SELECTOR ());
++
++libm_alias_finite (__ieee754_sinh, __sinh)
++
++# define __ieee754_sinh __ieee754_sinh_sse2
++#endif
++#include <sysdeps/ieee754/dbl-64/e_sinh.c>
+diff --git a/sysdeps/x86_64/fpu/multiarch/s_tanh-fma.c 
b/sysdeps/x86_64/fpu/multiarch/s_tanh-fma.c
+new file mode 100644
+index 0000000000..1b808b1227
+--- /dev/null
++++ b/sysdeps/x86_64/fpu/multiarch/s_tanh-fma.c
+@@ -0,0 +1,11 @@
++#define __tanh __tanh_fma
++#define __expm1 __expm1_fma
++
++/* NB: __expm1 may be expanded to __expm1_fma in the following
++   prototypes.  */
++extern long double __expm1l (long double);
++extern long double __expm1f128 (long double);
++
++#define SECTION __attribute__ ((section (".text.fma")))
++
++#include <sysdeps/ieee754/dbl-64/s_tanh.c>
+diff --git a/sysdeps/x86_64/fpu/multiarch/s_tanh.c 
b/sysdeps/x86_64/fpu/multiarch/s_tanh.c
+new file mode 100644
+index 0000000000..5539b6c61c
+--- /dev/null
++++ b/sysdeps/x86_64/fpu/multiarch/s_tanh.c
+@@ -0,0 +1,31 @@
++/* Multiple versions of tanh.
++   Copyright (C) 2025 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/>.  */
++
++#include <sysdeps/x86/isa-level.h>
++#if MINIMUM_X86_ISA_LEVEL < AVX2_X86_ISA_LEVEL
++
++extern double __redirect_tanh (double);
++
++# define SYMBOL_NAME tanh
++# include "ifunc-fma.h"
++
++libc_ifunc_redirected (__redirect_tanh, __tanh, IFUNC_SELECTOR ());
++
++# define __tanh __tanh_sse2
++#endif
++#include <sysdeps/ieee754/dbl-64/s_tanh.c>
diff --git a/debian/patches/hurd-i386/git-pthread_setcancel.diff 
b/debian/patches/hurd-i386/git-pthread_setcancel.diff
new file mode 100644
index 00000000..05ff5131
--- /dev/null
+++ b/debian/patches/hurd-i386/git-pthread_setcancel.diff
@@ -0,0 +1,80 @@
+commit bfb2f2f481147da54237ade3266f2586a51d43c9
+Author: Samuel Thibault <samuel.thiba...@ens-lyon.org>
+Date:   Sat Mar 15 15:23:42 2025 +0000
+
+    htl: Make pthread_setcanceltype / state a cancellation point
+    
+    as expected by tst-cancel32.
+
+---
+ htl/pt-setcancelstate.c |    8 ++++++++
+ htl/pt-setcanceltype.c  |    5 +++++
+ sysdeps/htl/pthreadP.h  |    8 ++++++++
+ 3 files changed, 21 insertions(+)
+
+--- a/htl/pt-setcancelstate.c
++++ b/htl/pt-setcancelstate.c
+@@ -24,6 +24,7 @@ int
+ __pthread_setcancelstate (int state, int *oldstate)
+ {
+   struct __pthread *p = _pthread_self ();
++  int cancelled;
+ 
+   switch (state)
+     {
+@@ -38,8 +39,15 @@ __pthread_setcancelstate (int state, int
+   if (oldstate != NULL)
+     *oldstate = p->cancel_state;
+   p->cancel_state = state;
++  cancelled = (p->cancel_state == PTHREAD_CANCEL_ENABLE) && p->cancel_pending 
== 1 && (p->cancel_type == PTHREAD_CANCEL_ASYNCHRONOUS);
++  if (cancelled)
++    /* Do not achieve cancel when called again, notably from __pthread_exit 
itself.  */
++    p->cancel_pending = 2;
+   __pthread_mutex_unlock (&p->cancel_lock);
+ 
++  if (cancelled && __pthread_exit)
++    __pthread_exit (PTHREAD_CANCELED);
++
+   return 0;
+ }
+ 
+--- a/htl/pt-setcanceltype.c
++++ b/htl/pt-setcanceltype.c
+@@ -24,6 +24,7 @@ int
+ __pthread_setcanceltype (int type, int *oldtype)
+ {
+   struct __pthread *p = _pthread_self ();
++  int cancelled;
+ 
+   switch (type)
+     {
+@@ -38,8 +39,12 @@ __pthread_setcanceltype (int type, int *
+   if (oldtype != NULL)
+     *oldtype = p->cancel_type;
+   p->cancel_type = type;
++  cancelled = (p->cancel_state == PTHREAD_CANCEL_ENABLE) && p->cancel_pending 
&& (p->cancel_type == PTHREAD_CANCEL_ASYNCHRONOUS);
+   __pthread_mutex_unlock (&p->cancel_lock);
+ 
++  if (cancelled && __pthread_exit)
++    __pthread_exit (PTHREAD_CANCELED);
++
+   return 0;
+ }
+ 
+--- a/sysdeps/htl/pthreadP.h
++++ b/sysdeps/htl/pthreadP.h
+@@ -172,6 +172,14 @@ hidden_proto (__pthread_mutex_timedlock)
+ hidden_proto (__pthread_get_cleanup_stack)
+ #endif
+ 
++#if !defined(__NO_WEAK_PTHREAD_ALIASES) && !IS_IN (libpthread)
++# ifdef weak_extern
++weak_extern (__pthread_exit)
++# else
++#  pragma weak __pthread_exit
++# endif
++#endif
++
+ #define ASSERT_TYPE_SIZE(type, size)                                  \
+   _Static_assert (sizeof (type) == size,                              \
+                 "sizeof (" #type ") != " #size)
diff --git a/debian/patches/hurd-i386/git-rt-timedwait-realtime.diff 
b/debian/patches/hurd-i386/git-rt-timedwait-realtime.diff
index c8216b70..ee482e45 100644
--- a/debian/patches/hurd-i386/git-rt-timedwait-realtime.diff
+++ b/debian/patches/hurd-i386/git-rt-timedwait-realtime.diff
@@ -20,8 +20,8 @@ index 2257cd80d4..75d9d515d0 100644
  #else
        struct timespec ts32 = valid_timespec64_to_timespec (ts);
 -      result = pthread_cond_timedwait (&cond, &__aio_requests_mutex,
-+      result = pthread_cond_clockwait (&cond, &__aio_requests_mutex,
-+                                     CLOCK_MONOTONIC,
++      result = __pthread_cond_clockwait (&cond, &__aio_requests_mutex,
++                                       CLOCK_MONOTONIC,
                                       timeout == NULL ? NULL : &ts32);
  #endif
  
diff --git a/debian/patches/series b/debian/patches/series
index 5e60e907..f82a08aa 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -31,6 +31,7 @@ hurd-i386/git-mig-strncpy.diff
 hurd-i386/local-pthread_once.diff
 hurd-i386/git-pthread_sigmask_nothread.diff
 hurd-i386/git-rt-timedwait-realtime.diff
+hurd-i386/git-pthread_setcancel.diff
 
 hurd-i386/local-intr-msg-clobber.diff
 hurd-i386/local-enable-ldconfig.diff
diff --git a/debian/po/ro.po b/debian/po/ro.po
index 391e6fbb..8fe8ae40 100644
--- a/debian/po/ro.po
+++ b/debian/po/ro.po
@@ -1,31 +1,32 @@
 # Translation of glibc debconf template to romanian
 # Traducere a șablonului debconf-glibc în limba română.
-# Copyright © 2006, 2007, 2008, 2023 THE glibc'S COPYRIGHT HOLDER
+# Copyright © 2006, 2007, 2008, 2023, 2025 THE glibc'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the glibc package.
 #
 # Stan Ioan-Eugen <stan.ieu...@gmail.com>, 2006, 2007, 2008.
-# Remus-Gabriel Chelu <remusgabriel.ch...@disroot.org>, 2023.
+# Remus-Gabriel Chelu <remusgabriel.ch...@disroot.org>, 2023, 2025.
 #
 # Cronologia traducerii fișierului „debconf-glibc”:
 # Traducerea inițială, făcută de I-ES, pentru versiunea debconf-glibc 2.4/2.5
 # Actualizare a traducerii pentru versiunea 2.5.1 - 2.7, făcută de I-ES, 2007.
 # Actualizare a traducerii pentru versiunea 2.8 - 2.9, făcută de I-ES, 2008.
 # Actualizare a traducerii pentru versiunea 2.36-8, făcută de R-GC, 2023.
+# Actualizare a traducerii pentru versiunea 2.41-6, făcută de R-GC, 2025.
 # Actualizare a traducerii pentru versiunea Y, făcută de X, Z(anul).
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: debconf-glibc 2.36-8\n"
+"Project-Id-Version: debconf-glibc 2.41-6\n"
 "Report-Msgid-Bugs-To: gl...@packages.debian.org\n"
 "POT-Creation-Date: 2025-01-02 16:30+0000\n"
-"PO-Revision-Date: 2023-01-08 15:46+0100\n"
+"PO-Revision-Date: 2025-04-01 11:30+0200\n"
 "Last-Translator: Remus-Gabriel Chelu <remusgabriel.ch...@disroot.org>\n"
 "Language-Team: romanian <debian-l10n-roman...@lists.debian.org>\n"
 "Language: ro\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 3.2.2\n"
+"X-Generator: Poedit 3.5\n"
 
 # R-GC, scrie:
 # mesaj reformulat, de la:
@@ -59,8 +60,8 @@ msgid ""
 "to use their language, country, characters, collation order, etc."
 msgstr ""
 "Configurările regionale (numite și „locales”) constituie un cadru de lucru "
-"pentru utilizatori, ce le permite acestora să aleagă propria lor limbă, țară, 
"
-"set de caractere, ordonare alfanumerică, formatare a datei, etc."
+"pentru utilizatori, ce le permite acestora să aleagă propria lor limbă, "
+"țară, set de caractere, ordonare alfanumerică, formatare a datei, etc."
 
 #. Type: multiselect
 #. Description
@@ -70,11 +71,12 @@ msgid ""
 "default, particularly for new installations. Other character sets may be "
 "useful for backwards compatibility with older systems and software."
 msgstr ""
-"Alegeți ce configurări regionale vor fi generate. Configurările regionale 
UTF-8 "
-"ar trebui alese implicit, în special pentru instalări noi. Din motive de "
-"compatibilitate cu software sau sisteme mai vechi, puteți alege să se 
genereze "
-"și alte seturi de caractere (sau datorită unor necesități proprii; de exemplu 
"
-"dorința/necesitatea de-a scrie într-o limbă diferită de cea maternă)."
+"Alegeți ce configurări regionale vor fi generate. Configurările regionale "
+"UTF-8 ar trebui alese implicit, în special pentru instalări noi. Din motive "
+"de compatibilitate cu software sau sisteme mai vechi, puteți alege să se "
+"genereze și alte seturi de caractere (sau datorită unor necesități proprii; "
+"de exemplu dorința/necesitatea de-a scrie într-o limbă diferită de cea "
+"maternă)."
 
 #. Type: multiselect
 #. Description
@@ -83,6 +85,8 @@ msgid ""
 "Please note that the C, C.UTF-8 and POSIX locales are always available and "
 "do not need to be generated."
 msgstr ""
+"Rețineți că următoarele configurări regionale sunt întotdeauna disponibile "
+"și nu este necesar să fie generate: C, C.UTF-8 și POSIX."
 
 #. Type: select
 #. Choices
@@ -104,9 +108,10 @@ msgid ""
 "for the user. You can choose a default locale for the system from the "
 "generated locales."
 msgstr ""
-"Multe pachete din Debian folosesc configurările regionale pentru a afișa text 
"
-"în limba corectă pentru utilizatori. Puteți alege o configurație regională, "
-"implicită pentru sistem, dintre configurațiile ce-au fost generate."
+"Multe pachete din Debian folosesc configurările regionale pentru a afișa "
+"text în limba corectă pentru utilizatori. Puteți alege o configurație "
+"regională, implicită pentru sistem, dintre configurațiile ce-au fost "
+"generate."
 
 #. Type: select
 #. Description
@@ -117,8 +122,8 @@ msgid ""
 "language, they will experience difficulties."
 msgstr ""
 "Această opțiune va stabili limba pentru tot sistemul. Dacă aveți un sistem "
-"multi-utilizator unde nu toți utilizatorii vorbesc limba aleasă, atunci ei 
vor "
-"întâmpina dificultăți."
+"multi-utilizator unde nu toți utilizatorii vorbesc limba aleasă, atunci ei "
+"vor întâmpina dificultăți."
 
 #. Type: boolean
 #. Description
@@ -140,12 +145,12 @@ msgid ""
 msgstr ""
 "Serviciile și programele care rulează și utilizează NSS trebuiesc repornite, "
 "altfel este posibil să nu mai poată efectua căutarea sau autentificarea. "
-"Procesul de instalare este capabil să repornească unele servicii (cum ar fi 
ssh "
-"sau telnetd), dar alte programe nu pot fi repornite automat. Un astfel de "
-"program care necesită oprire și repornire manuală după actualizarea glibc 
este "
-"«xdm», «gdm3», «sddm», sau orice alt administrator de sesiune grafică - "
-"deoarece repornirea automată ar putea deconecta sesiunile dumneavoastră 
active "
-"X11."
+"Procesul de instalare este capabil să repornească unele servicii (cum ar fi "
+"ssh sau telnetd), dar alte programe nu pot fi repornite automat. Un astfel "
+"de program care necesită oprire și repornire manuală după actualizarea glibc "
+"este «xdm», «gdm3», «sddm», sau orice alt administrator de sesiune grafică - "
+"deoarece repornirea automată ar putea deconecta sesiunile dumneavoastră "
+"active X11."
 
 #. Type: boolean
 #. Description
@@ -184,11 +189,11 @@ msgid ""
 "be restarted now, and correct it if needed."
 msgstr ""
 "Serviciile și programele care rulează și folosesc NSS trebuiesc repornite, "
-"altfel este posibil să nu mai poată efectua autentificarea sau căutarea 
numelor "
-"(în cazul serviciilor precum ssh, acest lucru poate determina imposibilitatea 
"
-"autentificării). Revizați următoarea listă ce conține, separate prin spațiu, "
-"scripturi init.d ale serviciilor ce trebuiesc repornite acum și corectați-o "
-"dacă este nevoie."
+"altfel este posibil să nu mai poată efectua autentificarea sau căutarea "
+"numelor (în cazul serviciilor precum ssh, acest lucru poate determina "
+"imposibilitatea autentificării). Revizați următoarea listă ce conține, "
+"separate prin spațiu, scripturi init.d ale serviciilor ce trebuiesc "
+"repornite acum și corectați-o dacă este nevoie."
 
 #. Type: string
 #. Description
@@ -244,10 +249,10 @@ msgid ""
 msgstr ""
 "Una sau mai multe instanțe ale programelor «xscreensaver» sau «xlockmore» au "
 "fost detectate pe acest sistem. Din cauza modificărilor incompatibile ale "
-"bibliotecii, înnoirea bibliotecii GNU libc vă va lăsa în imposibilitatea de a 
"
-"vă autentifica la aceste programe. Ar trebui să aranjați ca aceste programe 
să "
-"fie repornite sau oprite înainte de a continua această actualizare, pentru a "
-"evita blocarea utilizatorilor în sesiunile lor curente."
+"bibliotecii, înnoirea bibliotecii GNU libc vă va lăsa în imposibilitatea de "
+"a vă autentifica la aceste programe. Ar trebui să aranjați ca aceste "
+"programe să fie repornite sau oprite înainte de a continua această "
+"actualizare, pentru a evita blocarea utilizatorilor în sesiunile lor curente."
 
 #. Type: boolean
 #. Description
@@ -272,11 +277,12 @@ msgstr ""
 "Există servicii instalate pe sistemul dumneavoastră care trebuie repornite "
 "atunci când anumite biblioteci, cum ar fi „libpam”, „libc” și „libss”l, sunt "
 "actualizate. Deoarece aceste reporniri pot cauza întreruperi ale serviciilor "
-"pentru sistem, vi se va solicita în mod normal, la fiecare actualizare, lista 
"
-"de servicii pe care doriți să le reporniți. Puteți alege această opțiune 
pentru "
-"a evita să vi se solicite acordul pentru acest lucru; în schimb, toate "
-"repornirile necesare vor fi efectuate automat pentru dvs., astfel încât să "
-"puteți evita să vi se pună întrebări la fiecare actualizare a bibliotecii."
+"pentru sistem, vi se va solicita în mod normal, la fiecare actualizare, "
+"lista de servicii pe care doriți să le reporniți. Puteți alege această "
+"opțiune pentru a evita să vi se solicite acordul pentru acest lucru; în "
+"schimb, toate repornirile necesare vor fi efectuate automat pentru dvs., "
+"astfel încât să puteți evita să vi se pună întrebări la fiecare actualizare "
+"a bibliotecii."
 
 #. Type: error
 #. Description
@@ -292,8 +298,8 @@ msgid ""
 "later.  Please upgrade your kernel and reboot before installing glibc. You "
 "may need to use \"apt -f install\" after reboot to solve dependencies."
 msgstr ""
-"Această versiune a bibliotecii libc GNU necesită versiunea nucleului "
-"${kernel_ver} sau o versiune ulterioară.  Actualizați nucleul și să reporniți 
"
+"Această versiune a bibliotecii libc GNU necesită versiunea nucleului $"
+"{kernel_ver} sau o versiune ulterioară.  Actualizați nucleul și să reporniți "
 "înainte de a instala glibc. Este posibil să fie nevoie să utilizați comanda "
 "«apt -f install» după repornire, pentru a rezolva problemele de dependențe."
 
@@ -322,7 +328,7 @@ msgid ""
 "later.  Older versions might work but are not officially supported by "
 "Debian.  Please consider upgrading your kernel."
 msgstr ""
-"Această versiune a bibliotecii libc GNU necesită versiunea nucleului "
-"${kernel_ver} sau o versiune ulterioară.  Versiunile mai vechi ar putea "
-"funcționa, dar nu sunt acceptate oficial de Debian.  N-ar fi rău, să luați în 
"
-"considerare actualizarea nucleului."
+"Această versiune a bibliotecii libc GNU necesită versiunea nucleului $"
+"{kernel_ver} sau o versiune ulterioară.  Versiunile mai vechi ar putea "
+"funcționa, dar nu sunt acceptate oficial de Debian.  N-ar fi rău, să luați "
+"în considerare actualizarea nucleului."
diff --git a/debian/po/tr.po b/debian/po/tr.po
index c64c59de..b7ee836b 100644
--- a/debian/po/tr.po
+++ b/debian/po/tr.po
@@ -2,21 +2,22 @@
 # This file is distributed under the same license as the glibc package.
 # Erçin EKER <erc.cald...@gmx.net>, 2004, 2007.
 # Mert Dirik <mertdi...@gmail.com>, 2014.
+# Atila KOÇ <k...@artielektronik.com.tr>, 2022, 2025.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: glibc\n"
 "Report-Msgid-Bugs-To: gl...@packages.debian.org\n"
 "POT-Creation-Date: 2025-01-02 16:30+0000\n"
-"PO-Revision-Date: 2022-12-29 14:56+0300\n"
+"PO-Revision-Date: 2025-02-28 14:16+0300\n"
 "Last-Translator: Atila KOÇ <k...@artielektronik.com.tr>\n"
 "Language-Team: debian-l10n-turkish <debian-l10n-turk...@lists.debian.org>\n"
 "Language: tr\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.4.2\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Poedit 3.5\n"
 
 #. Type: multiselect
 #. Choices
@@ -49,9 +50,9 @@ msgid ""
 "default, particularly for new installations. Other character sets may be "
 "useful for backwards compatibility with older systems and software."
 msgstr ""
-"Hangi yerellerin oluşturulacağını seçin. Yeni kurulumlar için ön tanımlı "
-"olarak UTF-8 yereller seçilecektir. Daha eski sistemler ve yazılımlar ile "
-"uyumluluk için başka karakter setleri de yararlı olabilir."
+"Lütfen hangi yerellerin oluşturulacağını seçin. Özellikle yeni kurulumlar "
+"için UTF-8 yereller öntanımlı olarak seçilmelidir. Daha eski sistemler ve "
+"yazılımlar ile uyumluluk için başka karakter setleri de yararlı olabilir."
 
 #. Type: multiselect
 #. Description
@@ -60,6 +61,8 @@ msgid ""
 "Please note that the C, C.UTF-8 and POSIX locales are always available and "
 "do not need to be generated."
 msgstr ""
+"Bilmelisiniz ki; C, C.UTF-8 ve POSIX yerelleri her zaman hazır olup "
+"üretilmeleri gerekmemektedir."
 
 #. Type: select
 #. Choices
@@ -71,7 +74,7 @@ msgstr "Hiçbiri"
 #. Description
 #: ../debhelper.in/locales.templates:2002
 msgid "Default locale for the system environment:"
-msgstr "Sistemin kullanacağı ön tanımlı yerel:"
+msgstr "Sistemin kullanacağı öntanımlı yerel:"
 
 #. Type: select
 #. Description
@@ -83,7 +86,7 @@ msgid ""
 msgstr ""
 "Debian paketleri sizinle düzgün iletişim kurmak amacıyla seçeceği dili "
 "belirlerken, yerelleri kullanır. Eklediğiniz yereller arasından sisteminiz "
-"için ön tanımlı bir yerel seçebilirsiniz."
+"için öntanımlı bir yerel seçebilirsiniz."
 
 #. Type: select
 #. Description
@@ -93,9 +96,9 @@ msgid ""
 "is a multi-user system where not all users are able to speak the default "
 "language, they will experience difficulties."
 msgstr ""
-"Bu seçim, sisteminizin tümünde kullanılacak olan ön tanımlı dili "
+"Bu seçim, sisteminizin tümünde kullanılacak olan öntanımlı dili "
 "belirleyecektir. Sisteminiz aynı dili konuşmayan kullanıcılar tarafından "
-"kullanıyorsa, ön tanımlı yerel dilini kullanmayan kullanıcılar bazı "
+"kullanıLIyorsa, öntanımlı yerel dilini kullanmayan kullanıcılar bazı "
 "zorluklarla karşılaşabilir."
 
 #. Type: boolean
@@ -119,7 +122,7 @@ msgstr ""
 "NSS kullanan hizmetler ve programlar yeniden başlatılmalıdır. "
 "Başlatılmazlarsa, kimlik arama veya doğrulama gibi işlemleri düzgün "
 "yapamayacaklardır. Kurulum süreci ssh ve telnetd gibi bazı hizmetleri "
-"yeniden başlatmayı başarabilmekle birlikte, her hizmeti kendiliğinden "
+"yeniden başlatmayı başarabilmekle birlikte; her hizmeti kendiliğinden "
 "yeniden başlatamaz. glibc yükseltmesinden sonra elle yeniden başlatmanız "
 "gereken hizmetlerden biri de xdm'dir. Çünkü onun kendiliğinden yeniden "
 "başlatılması, açılmış X11 oturumlarının kopmasına sebep olabilir."
@@ -131,7 +134,7 @@ msgid ""
 "This script detected the following installed services which must be stopped "
 "before the upgrade: ${services}"
 msgstr ""
-"Bu betik, yükseltme işlemi yapılmadan önce bu hizmetlerin yeniden "
+"Bu betik, yükseltme işlemi yapılmadan önce şu hizmetlerin yeniden "
 "başlatılması gerektiğini algıladı: ${services}"
 
 #. Type: boolean
@@ -141,7 +144,7 @@ msgid ""
 "If you want to interrupt the upgrade now and continue later, please answer "
 "No to the question below."
 msgstr ""
-"Eğer yükseltme işlemini şimdi durdurup sonra sürdürmek istiyorsanız, "
+"Eğer yükseltme işlemini şimdi durdurup sonra sürdürmek istiyorsanız, lütfen "
 "aşağıdaki soruya \"Hayır\" yanıtını verin."
 
 #. Type: string
@@ -163,9 +166,9 @@ msgid ""
 msgstr ""
 "NSS kullanan hizmetler ve programlar yeniden başlatılmalıdır. "
 "Başlatılmazlarsa, kimlik arama veya doğrulama gibi işlemleri düzgün "
-"yapamayacaklardır. Örneğin ssh hizmeti ile oturum açamayabilirsiniz. Yeniden "
-"başlatılacak hizmetlere ilişkin init.d betiklerinin boşluklarla ayrılmış "
-"aşağıdaki listesini inceleyin ve gerekiyorsa düzeltin."
+"yapamayacaklardır. Örneğin ssh hizmeti ile oturum açamayabilirsiniz. Lütfen "
+"yeniden başlatılacak hizmetlere ilişkin init.d betiklerinin boşluklarla "
+"ayrılmış aşağıdaki listesini inceleyin ve gerekiyorsa düzeltin."
 
 #. Type: string
 #. Description
@@ -173,7 +176,7 @@ msgstr ""
 msgid ""
 "Note: restarting sshd/telnetd should not affect any existing connections."
 msgstr ""
-"Not: sshd/telnetd hizmetlerinin yeniden başlatılması varolan bağlantıları "
+"Not: sshd/telnetd hizmetlerinin yeniden başlatılması, varolan bağlantıları "
 "etkilemez."
 
 #. Type: error
@@ -199,7 +202,7 @@ msgid ""
 "You will need to start these manually by running 'invoke-rc.d <service> "
 "start'."
 msgstr ""
-"Bu hizmetleri \"invoke-rc.d <hizmet> start\" komutunu kullanarak elle "
+"Bu hizmetleri \"invoke-rc.d <hizmet_adı> start\" komutunu kullanarak elle "
 "başlatmanız gerekecektedir."
 
 #. Type: error
@@ -248,7 +251,7 @@ msgid ""
 "necessary restarts will be done for you automatically so you can avoid being "
 "asked questions on each library upgrade."
 msgstr ""
-"Sisteminizde libpam, libc ve libssl gibi bazı kitaplıklar yükseltildiğinde "
+"Sisteminizde libpam, libc ve libssl gibi bazı kitaplıkların yükseltildiğinde "
 "yeniden başlatılması gereken hizmetler kurulu. Yeniden başlatma işlemleri "
 "sisteminizin sunduğu hizmetlerde kesintilere neden olabileceğinden dolayı "
 "her yükseltme işlemi sırasında yeniden başlatmak istediğiniz hizmetler için "
@@ -271,7 +274,7 @@ msgid ""
 "later.  Please upgrade your kernel and reboot before installing glibc. You "
 "may need to use \"apt -f install\" after reboot to solve dependencies."
 msgstr ""
-"GNU libc kitaplığının bu sürümü ${kernel_ver} çekirdek sürümü ya da daha "
+"GNU libc kitaplığının bu sürümü ${kernel_ver} çekirdek sürümü veya daha "
 "yenisi ile çalışabilmektedir. GNU libc kurulumu öncesinde çekirdek "
 "sürümünüzü güncelleyin ve sisteminizi yeniden başlatın. Bağımlılık "
 "sorunlarını gidermek için, yeniden başlatmanız sonrasında \"apt -f install\" "
@@ -291,7 +294,7 @@ msgid ""
 "later.  Older versions might work but are not officially supported by "
 "Debian.  Please consider upgrading your kernel."
 msgstr ""
-"GNU libc kitaplığının bu sürümü ${kernel_ver} çekirdek sürümü ya da daha "
-"yenisi ile çalışabilmektedir. Eski sürümler ile çalışabilse de, eski "
+"GNU libc kitaplığının bu sürümü ${kernel_ver} çekirdek sürümü veya daha "
+"yenisi ile çalışabilmektedir. Eski sürümler ile çalışabilse de, bu önceki "
 "sürümler Debian tarafından desteklenmemektedir. Çekirdek sürümünüzü "
 "güncelleme konusunu değerlendirin."

Reply via email to