]> git.ipfire.org Git - thirdparty/glibc.git/log
thirdparty/glibc.git
4 weeks agolinux: Add mseal syscall support
Adhemerval Zanella [Mon, 10 Nov 2025 18:03:05 +0000 (15:03 -0300)] 
linux: Add mseal syscall support

It has been added on Linux 6.10 (8be7258aad44b5e25977a98db136f677fa6f4370)
as a way to block operations such as mapping, moving to another location,
shrinking the size, expanding the size, or modifying it to a pre-existing
memory mapping.

Although the system only works on 64-bit CPUs, the entrypoint was added
for all ABIs (since the kernel might eventually implement it for additional
ones and/or the ABI can execute on a 64-bit kernel).

Checked on x86_64-linux-gnu and aarch64-linux-gnu.

Reviewed-by: Collin Funk <collin.funk1@gmail.com>
4 weeks agoaarch64: fix includes in SME tests
Yury Khrustalev [Tue, 11 Nov 2025 11:40:25 +0000 (11:40 +0000)] 
aarch64: fix includes in SME tests

Use the correct include for the SIGCHLD macro: signal.h

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
5 weeks agoLoongArch: Call elf_ifunc_invoke for R_LARCH_IRELATIVE in elf_machine_rela
Xi Ruoyao [Fri, 7 Nov 2025 15:49:22 +0000 (23:49 +0800)] 
LoongArch: Call elf_ifunc_invoke for R_LARCH_IRELATIVE in elf_machine_rela

When R_LARCH_IRELATIVE is resolved by apply_irel, the ifunc resolver is
called via elf_ifunc_invoke so it can read HWCAP from the __ifunc_arg_t
argument.  But when R_LARCH_IRELATIVE is resolved by elf_machine_rela (it
will happen if we dlopen() a shared object containing R_LARCH_IRELATIVE),
the ifunc resolver is invoked directly with no or different argument.
This causes a segfault if the resolver uses the __ifunc_arg_t.

Despite the LoongArch psABI does not specify this argument, IMO it's
more convenient to have this argument IMO and per hyrum's rule there may
be objects in wild which already relies on this argument (they just
didn't blow up because they are not dlopen()ed yet).  So make the
behavior handling R_LARCH_IRELATIVE of elf_machine_rela same as
apply_irel.

This fixes BZ #33610.

Signed-off-by: Xi Ruoyao <xry111@xry111.site>
5 weeks agohurd: Drop remnants of cthreads
Samuel Thibault [Tue, 11 Nov 2025 21:32:39 +0000 (22:32 +0100)] 
hurd: Drop remnants of cthreads

These are not used in GNU/Hurd since very long now.

5 weeks agocdefs: Fix some typos in comments.
Bruno Haible [Tue, 11 Nov 2025 19:04:29 +0000 (11:04 -0800)] 
cdefs: Fix some typos in comments.

Reviewed-by: Collin Funk <collin.funk1@gmail.com>
5 weeks agostdlib: Do not define once_flag, ONCE_FLAG_INIT for C++
Florian Weimer [Tue, 11 Nov 2025 17:20:10 +0000 (18:20 +0100)] 
stdlib: Do not define once_flag, ONCE_FLAG_INIT for C++

The definition of once_flag conflicts with std::once_flag in
if “using namespace std;” is active.

Updates commit a7ddbf456d97ac8d1aa7afd735e196a1488bd874
("Add once_flag, ONCE_FLAG_INIT and call_once to stdlib.h for C23").

Suggested-by: Jonathan Wakely <jwakely@redhat.com>
Reviewed-by: Collin Funk <collin.funk1@gmail.com>
5 weeks agox86-64: Fix a typo in fesetenv.c [BZ #33619]
H.J. Lu [Tue, 11 Nov 2025 07:43:31 +0000 (15:43 +0800)] 
x86-64: Fix a typo in fesetenv.c [BZ #33619]

Fix a typo in

commit 427c25278d1dae62dffa07ea5cd0fc33f07190af
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Fri Oct 31 17:00:46 2025 -0300

    x86: Adapt "%v" usage on clang to emit VEX enconding

@@ -103,8 +104,8 @@ __fesetenv (const fenv_t *envp)
       temp.__mxcsr = envp->__mxcsr;
     }

-  __asm__ ("fldenv %0\n"
-          "%vldmxcsr %1" : : "m" (temp), "m" (temp.__mxcsr));
+  asm volatile ("fldenv %0" : "=m" (temp));
+  ldmxcsr_inline_asm (&temp.__mxcsr);

   /* Success.  */
   return 0;

"temp" is input not output.  This fixes BZ #33619.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
Reviewed-by: Collin Funk <collin.funk1@gmail.com>
5 weeks agoSet Prefer_No_AVX512 flag for hygon platform
Xie jiamei [Tue, 11 Nov 2025 02:28:54 +0000 (10:28 +0800)] 
Set Prefer_No_AVX512 flag for hygon platform

Benchmarks indicate evex can be more profitable on Hygon hardware
than AVX512. So add Prefer_No_AVX512 to make it run with evex.

Change-Id: Icc59492f71fde7a783a8bd315714ffd6f7ecaf29
Signed-off-by: Li jing <lijing@hygon.cn>
Signed-off-by: Xie jiamei <xiejiamei@hygon.cn>
5 weeks agomath: Optimize frexpl (binary128) with fast path for normal numbers
Osama Abdelkader [Wed, 5 Nov 2025 20:24:08 +0000 (22:24 +0200)] 
math: Optimize frexpl (binary128) with fast path for normal numbers

Add fast path optimization for frexpl (128-bit IEEE quad precision) using
a single unsigned comparison to identify normal floating-point numbers and
return immediately via arithmetic on the exponent field.

The implementation uses arithmetic operations hx = hx - (ex << 48)
to adjust the exponent in place, which is simpler and more efficient than
bit masking. For subnormals, the traditional multiply-based normalization
is retained for reliability with the split 64-bit word format.

The zero/infinity/NaN check groups these special cases together for better
branch prediction.

This optimization provides the same algorithmic improvements as the other
frexp variants while maintaining correctness for all edge cases.

Signed-off-by: Osama Abdelkader <osama.abdelkader@gmail.com>
Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
5 weeks agomath: Optimize frexp (binary64) with fast path for normal numbers
Osama Abdelkader [Thu, 23 Oct 2025 15:06:29 +0000 (18:06 +0300)] 
math: Optimize frexp (binary64) with fast path for normal numbers

Add fast path optimization for frexp using a single unsigned comparison
to identify normal floating-point numbers and return immediately via
arithmetic on the bit representation.

The implementation uses asuint64()/asdouble() from math_config.h and arithmetic
operations to adjust the exponent, which generates better code than bit masking
on ARM and RISC-V architectures. For subnormals, stdc_leading_zeros provides
faster normalization than the traditional multiply approach.

The zero/infinity/NaN check is simplified to (int64_t)(ix << 1) <= 0, which
is more efficient than separate comparisons.

Benchmark results on Intel Core i9-13900H (13th Gen):
  Baseline:     6.778 ns/op
  Optimized:    4.007 ns/op
  Speedup:      1.69x (40.9% faster)
  Zero:         3.580 ns/op (fast path)
  Denormal:     6.096 ns/op (slower, rare case)

Signed-off-by: Osama Abdelkader <osama.abdelkader@gmail.com>
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
5 weeks agomath: Optimize frexpf (binary32) with fast path for normal numbers
Osama Abdelkader [Thu, 23 Oct 2025 15:06:28 +0000 (18:06 +0300)] 
math: Optimize frexpf (binary32) with fast path for normal numbers

Add fast path optimization for frexpf using a single unsigned comparison
to identify normal floating-point numbers and return immediately via
arithmetic on the bit representation.

The implementation uses asuint()/asfloat() from math_config.h and arithmetic
operations to adjust the exponent, which generates better code than bit masking
on ARM and RISC-V architectures. For subnormals, stdc_leading_zeros provides
faster normalization than the traditional multiply approach.

The zero/infinity/NaN check is simplified to (int32_t)(hx << 1) <= 0, which
is more efficient than separate comparisons.

Benchmark results on Intel Core i9-13900H (13th Gen):
  Baseline:     5.858 ns/op
  Optimized:    4.003 ns/op
  Speedup:      1.46x (31.7% faster)
  Zero:         3.580 ns/op (fast path)
  Denormal:     5.597 ns/op (slower, rare case)

Signed-off-by: Osama Abdelkader <osama.abdelkader@gmail.com>
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
5 weeks agobenchtests: Add benchmarks for frexp functions
Osama Abdelkader [Tue, 4 Nov 2025 17:55:05 +0000 (19:55 +0200)] 
benchtests: Add benchmarks for frexp functions

Add benchmark support for frexp, frexpf, and frexpl to measure the
performance improvement of the fast path optimization.

- Created frexp-inputs, frexpf-inputs, frexpl-inputs with random test values
- Added frexp, frexpf, frexpl to bench-math list
- Added CFLAGS to disable builtins for accurate benchmarking

These benchmarks will be used to quantify the performance gains from the
fast path optimization for normal floating-point numbers.

Signed-off-by: Osama Abdelkader <osama.abdelkader@gmail.com>
5 weeks agomath: Sync acosh from CORE-MATH
Adhemerval Zanella [Mon, 10 Nov 2025 11:44:14 +0000 (08:44 -0300)] 
math: Sync acosh from CORE-MATH

The c9abdf80 fix handle some cases for RNDZ.

Checked on x86_64-linux-gnu.

5 weeks agoFilter out internal abort during ld.so build
Adhemerval Zanella [Fri, 31 Oct 2025 20:00:49 +0000 (17:00 -0300)] 
Filter out internal abort during ld.so build

clang might generate an abort call when cleanup functions (set by
__attribute__ ((cleanup)) calls functions not marked as nothrow.

The hurd already provides abort for the loader at
sysdeps/mach/hurd/dl-sysdep.c, and adding it rtld-stubbed-symbols
triggers duplicate symbols.

Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
5 weeks agox86: Fix THREAD_GSCOPE_RESET_FLAG build on clang
Adhemerval Zanella [Fri, 31 Oct 2025 20:00:47 +0000 (17:00 -0300)] 
x86: Fix THREAD_GSCOPE_RESET_FLAG build on clang

clang does not support __seg_fs in asm constraint.

Reviewed-by: Uros Bizjak <ubizjak@gmail.com>
5 weeks agox86: Adapt "%v" usage on clang to emit VEX enconding
Adhemerval Zanella [Fri, 31 Oct 2025 20:00:46 +0000 (17:00 -0300)] 
x86: Adapt "%v" usage on clang to emit VEX enconding

clang does not support the %v to select the AVX encoding, nor the '%d' asm
contrain, and for AVX build it requires all 3 arguments.

This patch add a new internal header, math-inline-asm.h, that adds
functions to abstract the inline asm required differences between
gcc and clang.

Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
5 weeks agox86: math: Use of __libgcc_cmp_return__ iff compiler supports it
Adhemerval Zanella [Fri, 31 Oct 2025 20:00:44 +0000 (17:00 -0300)] 
x86: math: Use of __libgcc_cmp_return__ iff compiler supports it

clang does not support '__attribute__ ((mode (__libgcc_cmp_return__)))',
so use a more close related type instead fo the default 'int'.

5 weeks agostring: Check if attribute can declared after function declaration
Adhemerval Zanella [Fri, 31 Oct 2025 20:00:42 +0000 (17:00 -0300)] 
string: Check if attribute can declared after function declaration

Some symbols that might be auto-generated by the compiler are redefined
to internal alias (for instance mempcpy to __mempcpy).  However, if fortify
is enabled, the fortify wrapper is define before the alias re-defined and
clang warns attribute declaration must precede definition.

Use an asm alias if compiler does not support it, instead of an
attribute.

Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
5 weeks agonss: Suppress clang -Wstring-plus-int on __nss_shlib_revision definition
Adhemerval Zanella [Fri, 31 Oct 2025 20:00:41 +0000 (17:00 -0300)] 
nss: Suppress clang -Wstring-plus-int on __nss_shlib_revision definition

clang issues an warning that adding 'unsigned long' to a string does not
append to the string.

Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
5 weeks agostdlib: Remove mp_clz_tab.c
Adhemerval Zanella [Fri, 31 Oct 2025 20:00:34 +0000 (17:00 -0300)] 
stdlib: Remove mp_clz_tab.c

The count_leading_zeros is not used anymore, so there is no need to
provide the table for possible usage.  The hppa already provides
the compat symbol on libgcc-compat.c.

Reviewed-by: Collin Funk <collin.funk1@gmail.com>
5 weeks agohurd: make setpriority clamp nice values to 0..2*NZERO-1 [BZ #33614]
Samuel Thibault [Sun, 9 Nov 2025 10:32:42 +0000 (11:32 +0100)] 
hurd: make setpriority clamp nice values to 0..2*NZERO-1 [BZ #33614]

5 weeks agoRevert "hurd: Make rename refuse trailing slashes [BZ #32570]"
Samuel Thibault [Sat, 8 Nov 2025 23:06:38 +0000 (00:06 +0100)] 
Revert "hurd: Make rename refuse trailing slashes [BZ #32570]"

This reverts commit 2ae4ec56c2b18c46ef8220bcddac4303a4b6ef1c.

This introduced regressions, as rename should accept trailing slashes
for directories: BZ #33607, BZ #33608

This was rather fixed on the server side:
https://cgit.git.savannah.gnu.org/cgit/hurd/hurd.git/commit/?id=e34000cb395a135dd2ad5c13e6f6d4c5c1006389

5 weeks agoAdd missing $(rpath-link) to elf/ld.so --library-path
Samuel Thibault [Sat, 8 Nov 2025 20:47:25 +0000 (21:47 +0100)] 
Add missing $(rpath-link) to elf/ld.so --library-path

This is notably needed for GNU/Hurd's libmachuser.so and libhurduser.so.

5 weeks agoAdd missing $(rpath-link) to /elf/ld.so --library-path
Samuel Thibault [Sat, 8 Nov 2025 16:44:05 +0000 (17:44 +0100)] 
Add missing $(rpath-link) to /elf/ld.so --library-path

This is notably needed for GNU/Hurd's libmachuser.so and libhurduser.so.

5 weeks agonss: Add ERANGE testing to tst-nss-test4 (bug 33361)
Carlos O'Donell [Fri, 7 Nov 2025 14:46:10 +0000 (09:46 -0500)] 
nss: Add ERANGE testing to tst-nss-test4 (bug 33361)

This adds testing for the fix added in commit:
0fceed254559836b57ee05188deac649bc505d05
"nss: Group merge does not react to ERANGE during merge (bug 33361)"

The in-use group size is increased large enough to trigger ERANGE
for initial buffers and cause a retry.  The actualy size is
approximately twice that required to trigger the defect, though
any size larger than NSS_BUFLEN_GROUP triggers the defect.

Without the fix the group is not merged and the failure is detected,
but with the fix the ERANGE error is handled, buffers are enlarged
and subsequently correctly merged.

Tested with a/b testing before and after patching.
Tested on x86_64 with no regression.

Co-authored-by: Patsy Griffin <patsy@redhat.com>
Reviewed-by: DJ Delorie <dj@redhat.com>
5 weeks agoaarch64: Remove $(aarch64-bti) check
Florian Weimer [Fri, 7 Nov 2025 11:29:09 +0000 (12:29 +0100)] 
aarch64: Remove $(aarch64-bti) check

The variable was removed in commit 2c421fc4302ecb729823ca442f9dfab9
("AArch64: Cleanup PAC and BTI"), so this Makefile fragment is
always excluded.

Reviewed-by: Yury Khrustalev <yury.khrustalev@arm.com>
5 weeks agoposix: Fix invalid flags test for p{write,read}v2
Yury Khrustalev [Thu, 6 Nov 2025 12:57:58 +0000 (12:57 +0000)] 
posix: Fix invalid flags test for p{write,read}v2

Two tests fail from time to time when a new flag is added for the
p{write,read}v2 functions in a new Linux kernel:

 - misc/tst-preadvwritev2
 - misc/tst-preadvwritev64v2

This disrupts when testing Glibc on a system with a newer kernel
and it seems we can try improve testing for invalid flags setting
all the bits that are not supposed to be supported (rather than
setting only the next unsupported bit).

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
5 weeks agosupport: Exit on consistency check failure in resolv_response_add_name
Florian Weimer [Thu, 6 Nov 2025 13:49:21 +0000 (14:49 +0100)] 
support: Exit on consistency check failure in resolv_response_add_name

Using TEST_VERIFY (crname_target != crname) instructs some analysis
tools that crname_target == crname might hold.  Under this assumption,
they report a use-after-free for crname_target->offset below, caused
by the previous free (crname).

Reviewed-by: Collin Funk <collin.funk1@gmail.com>
5 weeks agoAArch64: Fix instability in AdvSIMD sinh
Joe Ramsay [Thu, 6 Nov 2025 18:29:33 +0000 (18:29 +0000)] 
AArch64: Fix instability in AdvSIMD sinh

Previously presence of special-cases in one lane could affect the
results in other lanes due to unconditional scalar fallback. The old
WANT_SIMD_EXCEPT option (which has never been enabled in libmvec) has
been removed from AOR, making it easier to spot and fix
this. No measured change in performance. This patch applies cleanly as
far back as 2.41, however there are conflicts with 2.40 where sinh was
first introduced.

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
5 weeks agoAArch64: Fix instability in AdvSIMD tan
Joe Ramsay [Thu, 6 Nov 2025 18:26:54 +0000 (18:26 +0000)] 
AArch64: Fix instability in AdvSIMD tan

Previously presence of special-cases in one lane could affect the
results in other lanes due to unconditional scalar fallback. The old
WANT_SIMD_EXCEPT option (which has never been enabled in libmvec) has
been removed from AOR, making it easier to spot and fix this. 4%
improvement in throughput with GCC 14 on Neoverse V1. This bug is
present as far back as 2.39 (where tan was first introduced).

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
5 weeks agoAArch64: Optimise SVE scalar callbacks
Joe Ramsay [Thu, 6 Nov 2025 15:36:03 +0000 (15:36 +0000)] 
AArch64: Optimise SVE scalar callbacks

Instead of using SVE instructions to marshall special results into the
correct lane, just write the entire vector (and the predicate) to
memory, then use cheaper scalar operations.

Geomean speedup of 16% in special intervals on Neoverse with GCC 14.

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
5 weeks agosupport: Fix FILE * leak in check_for_unshare_hints in test-container
Florian Weimer [Thu, 6 Nov 2025 13:33:22 +0000 (14:33 +0100)] 
support: Fix FILE * leak in check_for_unshare_hints in test-container

The file opened via fopen is never closed.

5 weeks agoi386: Simplify powl computation for small integral y [BZ #33586]
H.J. Lu [Sun, 2 Nov 2025 00:47:53 +0000 (08:47 +0800)] 
i386: Simplify powl computation for small integral y [BZ #33586]

On i386, tests added by

commit 1b657c53c21a100082b0855392e4cb40c9c43a87
Author: Siddhesh Poyarekar <siddhesh@sourceware.org>
Date:   Fri Oct 10 20:21:13 2025 -0400

    Simplify powl computation for small integral y [BZ #33411]

exposed the same bug in i386 e_powl.S:

FAIL: math/test-float64x-pow
original exit status 1
testing _Float64x (without inline functions)
Failure: pow (0x1p+8192, 0x1p+0): Exception "Overflow" set
Failure: pow_downward (0x1p+8192, 0x1p+0): Exception "Overflow" set
Failure: pow_towardzero (0x1p+8192, 0x1p+0): Exception "Overflow" set
Failure: pow_upward (0x1p+8192, 0x1p+0): Exception "Overflow" set

FAIL: math/test-ldouble-pow
original exit status 1
testing long double (without inline functions)
Failure: pow (0x1p+8192, 0x1p+0): Exception "Overflow" set
Failure: pow_downward (0x1p+8192, 0x1p+0): Exception "Overflow" set
Failure: pow_towardzero (0x1p+8192, 0x1p+0): Exception "Overflow" set
Failure: pow_upward (0x1p+8192, 0x1p+0): Exception "Overflow" set

Port x86-64 e_powl.S fix to i386 e_powl.S.  This fixes BZ #33586.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
Reviewed-by: Sunil K Pandey <skpgkp2@gmail.com>
5 weeks agomath: Remove the SVID error handling from tgammaf
Adhemerval Zanella [Wed, 5 Nov 2025 11:10:01 +0000 (08:10 -0300)] 
math: Remove the SVID error handling from tgammaf

It improves latency for about 1.5% and throughput for about 2-4%.

Tested on x86_64-linux-gnu and i686-linux-gnu.
Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 weeks agomath: Remove the SVID error handling from lgammaf/lgammaf_r
Adhemerval Zanella [Wed, 5 Nov 2025 11:10:00 +0000 (08:10 -0300)] 
math: Remove the SVID error handling from lgammaf/lgammaf_r

It improves latency throughput for about 2%.

Tested on x86_64-linux-gnu and i686-linux-gnu.
Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 weeks agoAdd FD_PIDFS_ROOT from Linux 6.17 to bits/fcntl-linux.h
Adhemerval Zanella [Fri, 3 Oct 2025 19:39:04 +0000 (16:39 -0300)] 
Add FD_PIDFS_ROOT from Linux 6.17 to bits/fcntl-linux.h

It was added by commit 3941e37f62fe2c3c8b8675c12183185f20450539

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
6 weeks agoAdd AT_EXECVE_CHECK from Linux 6.14 to bits/fcntl-linux.h
Adhemerval Zanella [Fri, 3 Oct 2025 19:39:03 +0000 (16:39 -0300)] 
Add AT_EXECVE_CHECK from Linux 6.14 to bits/fcntl-linux.h

It was added by commit a5874fde3c0884a33ed4145101052318c5e17c74

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
6 weeks agoAdd AT_HANDLE_CONNECTABLE from Linux 6.13 to bits/fcntl-linux.h
Adhemerval Zanella [Fri, 3 Oct 2025 19:39:02 +0000 (16:39 -0300)] 
Add AT_HANDLE_CONNECTABLE from Linux 6.13 to bits/fcntl-linux.h

It was added by commit c374196b2b9f4b803fccd59ed82f0712041e21e1.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
6 weeks agolinux: Update statx-generic.h with linux 6.16
Adhemerval Zanella [Fri, 3 Oct 2025 19:39:01 +0000 (16:39 -0300)] 
linux: Update statx-generic.h with linux 6.16

It adds the new fields on generic statx struct from Linux commit
5d894321c49e61379189b0ff605f316e39cbd1e9.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
6 weeks agolinux: Update statx-generic.h with linux 6.14
Adhemerval Zanella [Fri, 3 Oct 2025 19:39:00 +0000 (16:39 -0300)] 
linux: Update statx-generic.h with linux 6.14

It adds the new constant STATX_DIO_READ_ALIGN and related fields in
generic statx struct from Linux commit
7ed6cbe0f8caa6ee38a2dc8f1b925acb904cc01f.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
6 weeks agolinux: Add STATX_WRITE_ATOMIC/STATX_ATTR_WRITE_ATOMIC definitions to generic statx
Adhemerval Zanella [Fri, 3 Oct 2025 19:38:59 +0000 (16:38 -0300)] 
linux: Add STATX_WRITE_ATOMIC/STATX_ATTR_WRITE_ATOMIC definitions to generic statx

The commit fc650bfd71081d26c1015d299827fb58a23a6b02 added
STATX_WRITE_ATOMIC/STATX_ATTR_WRITE_ATOMIC on the statx-generic.h
without updating the generic statx struct.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
6 weeks agolinux: Add STATX_SUBVOL definition to generic statx
Adhemerval Zanella [Fri, 3 Oct 2025 19:38:58 +0000 (16:38 -0300)] 
linux: Add STATX_SUBVOL definition to generic statx

The commit bbb6a742c88b4a37c5410eceefbc9c94df815075 added
STATX_SUBVOL on the statx-generic.h without updating the
generic statx struct.

6 weeks agolinux: Add STATX_DOALIGN definition to generic statx
Adhemerval Zanella [Fri, 3 Oct 2025 19:38:57 +0000 (16:38 -0300)] 
linux: Add STATX_DOALIGN definition to generic statx

The commit 07937809ac377f8ffb5bad3335194dd9a447922f added
STATX_MNT_ID_UNIQUE on the statx-generic.h without updating the
generic statx struct.

6 weeks agolinux: Add STATX_MNT_ID_UNIQUE definition to generic statx
Adhemerval Zanella [Fri, 3 Oct 2025 19:38:56 +0000 (16:38 -0300)] 
linux: Add STATX_MNT_ID_UNIQUE definition to generic statx

The commit 88a2cf6c4bab6e94a65e9c0db8813709372e9180 added
STATX_MNT_ID_UNIQUE on the statx-generic.h without updating the
generic statx struct.

6 weeks agoUpdate syscall lists for Linux 6.17
Adhemerval Zanella [Fri, 3 Oct 2025 19:38:55 +0000 (16:38 -0300)] 
Update syscall lists for Linux 6.17

Linux 6.16 adds no new syscalls, while Linux 6.17 adds file_getattr
and file_setattr (commit be7efb2d20d67f334a7de2aef77ae6c69367e646).
Update syscall-names.list and regenerate the arch-syscall.h headers
with build-many-glibcs.py update-syscalls.

6 weeks agoUpdate PIDFD_* constants for Linux 6.17
Adhemerval Zanella [Fri, 3 Oct 2025 19:38:53 +0000 (16:38 -0300)] 
Update PIDFD_* constants for Linux 6.17

The pidfd interface was extended with:

  * PIDFD_GET_INFO and pidfd_info (along with related extra flags) to
    allow get information about the process without the need to parse
    /proc (commit cdda1f26e74ba, Linux 6.13).

  * PIDFD_SELF_{THREAD,THREAD_GROUP,SELF,SELF_PROCESS} to allow
    pidfd_send_signal refer to the own process or thread lead groups
    without the need of allocating a file descriptor (commit f08d0c3a71114,
    Linux 6.15).

  * PIDFD_INFO_COREDUMP that extends PIDFD_GET_INFO to obtain coredump
    information.

Linux uAPI header defines both PIDFD_SELF_THREAD and
PIDFD_SELF_THREAD_GROUP on linux/fcntl.h (since they reserve part of the
AT_* values), however for glibc I do not see any good reason to add pidfd
definitions on fcntl-linux.h.

The tst-pidfd.c is extended with some PIDFD_SELF_* tests and a new
‘tst-pidfd_getinfo.c’ test is added to check PIDFD_GET_INFO. The
PIDFD_INFO_COREDUMP tests would require very large and complex tests
that are already covered by kernel tests.

Checked on aarch64-linux-gnu and x86_64-linux-gnu on kernels 6.8 and
6.17.
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
6 weeks agoUpdate kernel version to 6.17 in header constant tests
Adhemerval Zanella [Fri, 3 Oct 2025 19:38:52 +0000 (16:38 -0300)] 
Update kernel version to 6.17 in header constant tests

There are no new constants covered by tst-mman-consts.py,
tst-mount-consts.py or tst-sched-consts.py in Linux 6.17.

6 weeks agomath: Remove the SVID error handling from atan2f
Adhemerval Zanella [Tue, 4 Nov 2025 16:20:00 +0000 (13:20 -0300)] 
math: Remove the SVID error handling from atan2f

It improves latency for about 3-6% and throughput for about 5-12%.

Tested on x86_64-linux-gnu and i686-linux-gnu.
Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 weeks agoAdd feature test macros for POSIX.1-2024.
Collin Funk [Fri, 23 May 2025 04:00:05 +0000 (21:00 -0700)] 
Add feature test macros for POSIX.1-2024.

* include/features.h (_POSIX_C_SOURCE): Document the value of 202405L
for POSIX.1-2024.  Set it to 202405L when _GNU_SOURCE or _DEFAULT_SOURCE
is defined.
(_XOPEN_SOURCE): Document the value of 800 for POSIX-1.2024.  Set it to
800 when _GNU_SOURCE is defined.
(__USE_XOPEN2K24, __USE_XOPEN2K24XSI): New internal macros.  Set them
when _POSIX_C_SOURCE is 202405L or greater and/or when _XOPEN_SOURCE is
800 or greater.
* manual/creature.texi (Feature Test Macros): Document the new values
for _POSIX_C_SOURCE and _XOPEN_SOURCE.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Signed-off-by: Collin Funk <collin.funk1@gmail.com>
6 weeks agoRename fromfp files in preparation for changing types for C23
Joseph Myers [Tue, 4 Nov 2025 23:41:35 +0000 (23:41 +0000)] 
Rename fromfp files in preparation for changing types for C23

As discussed in bug 28327, the fromfp functions changed type in C23
(compared to the version in TS 18661-1); they now return the same type
as the floating-point argument, instead of intmax_t / uintmax_t.

As with other such incompatible changes compared to the initial TS
18661 versions of interfaces (the types of totalorder functions, in
particular), it seems appropriate to support only the new version as
an API, not the old one (although many programs written for the old
API might in fact work wtih the new one as well).  Thus, the existing
implementations should become compat symbols.  They are sufficiently
different from how I'd expect to implement the new version that using
separate implementations in separate files is more convenient than
trying to share code, and directly sharing testcases would be
problematic as well.

Rename the existing fromfp implementation and test files to names
reflecting how they're intended to become compat symbols, so freeing
up the existing filenames for a subsequent implementation of the C23
versions of these functions (which is the point at which the existing
implementations would actually become compat symbols).

gen-fromfp-tests.py and gen-fromfp-tests-inputs are not renamed; I
think it will make sense to adapt the test generator to be able to
generate most tests for both versions of the functions (with extra
test inputs added that are only of interest with the C23 version).
The ldbl-opt/nldbl-* files are also not renamed; since those are for a
static only library, no compat versions are needed, and they'll just
have their contents changed when the C23 version is implemented.

Tested for x86_64, and with build-many-glibcs.py.

6 weeks agoAdd C23 long_double_t, _FloatN_t
Joseph Myers [Tue, 4 Nov 2025 17:12:00 +0000 (17:12 +0000)] 
Add C23 long_double_t, _FloatN_t

C23 Annex H adds <math.h> typedefs long_double_t and _FloatN_t
(originally introduced in TS 18661-3), analogous to float_t and
double_t.  Add these typedefs to glibc.  (There are no _FloatNx_t
typedefs.)

C23 also slightly changes the rules for how such typedef names should
be defined, compared to the definition in TS 18661-3.  In both cases,
<TYPE>_t corresponds to the evaluation format for <TYPE>, as specified
by FLT_EVAL_METHOD (for which <math.h> uses glibc's internal
__GLIBC_FLT_EVAL_METHOD).  Specifically, each FLT_EVAL_METHOD value
corresponds to some type U (for example, 64 corresponds to U =
_Float64), and for types with exactly the same set of values as U, TS
18661-3 says expressions with those types are to be evaluated to the
range and precision of type U (so <TYPE>_t is defined to U), whereas
C23 only does that for types whose values are a strict subset of those
of type U (so <TYPE>_t is defined to <TYPE>).

As with other cases where semantics changed between TS 18661 and C23,
this patch only implements the newer version of the semantics
(including adjusting existing definitions of float_t and double_t as
needed).  The new semantics are contradictory between the main
standard and Annex H for the case of FLT_EVAL_METHOD == 2 and the
choice of double_t when double and long double have the same values
(the main standard says it's defined as long double in that case,
whereas Annex H would define it as double), which I've raised on the
WG14 reflector (but I think setting FLT_EVAL_METHOD == 2 when double
and long double have the same values is a fairly theoretical
combination of features); for now glibc follows the value in the main
standard in that case.

Note that I think all existing GCC targets supported by glibc only use
values -1, 0, 1, 2 or 16 for FLT_EVAL_METHOD (so most of the header
code is somewhat theoretical, though potentially relevant with other
compilers since the choice of FLT_EVAL_METHOD is only an API choice,
not an ABI one; it can vary with compiler options, and these typedefs
should not be used in ABIs).  The testcase (expanded to cover the new
typedefs) is really just repeating the same logic in a second place
(so all it really tests is that __GLIBC_FLT_EVAL_METHOD is consistent
with FLT_EVAL_METHOD).

Tested for x86_64 and x86, and with build-many-glibcs.py.

6 weeks agoriscv: Add vector registers to __SYSCALL_CLOBBERS
Peter Bergner [Wed, 3 Sep 2025 19:26:03 +0000 (14:26 -0500)] 
riscv: Add vector registers to __SYSCALL_CLOBBERS

The Linux kernel ABI specifies that the vector registers are not preserved
across system calls, but the __SYSCALL_CLOBBERS macro doesn't mention them.
This could possibly lead to compilers trying to keep data in the vector
registers across the syscall leading to corruption.  Add the vector registers
to __SYSCALL_CLOBBERS when the vector extension is enabled.  If the vector
extension is enabled, then require GCC 15 or later and RVV 1.0 or later.

Fixes: 36960f0c76 ("RISC-V: Linux Syscall Interface")
Signed-off-by: Peter Bergner <bergner@tenstorrent.com>
6 weeks agoRegenerate charmap-kw.h and locfile-kw.h with gperf 3.3
Collin Funk [Tue, 4 Nov 2025 02:08:37 +0000 (18:08 -0800)] 
Regenerate charmap-kw.h and locfile-kw.h with gperf 3.3

In commit 970364dac00b38333e5b2d91c90d11e80141d265 we switched some
/*FALLTHROUGH*/ comments to [[fallthrough]] to avoid warnings with
Clang. However, since gperf emitted different output the buildbot
failed. The buildbot has been updated to use gperf 3.3 which will use
__attribute__ ((__fallthrough__)) where needed to avoid warnings [1].
This patch regenerates these files with the same version.

[1] https://sourceware.org/pipermail/libc-testresults/2025q4/014123.html

Reviewed-by: Mark Wielaard <mark@klomp.org>
6 weeks agomath: Remove the SVID error handling wrapper from sqrt
Adhemerval Zanella [Fri, 31 Oct 2025 16:08:56 +0000 (13:08 -0300)] 
math: Remove the SVID error handling wrapper from sqrt

i386 and m68k architectures should use math-use-builtins-sqrt.h rather
than relying on architecture-specific or inline assembly implementations.

The PowerPC optimization for PPC 601/603 (30 years old) is removed.

Tested on x86_64-linux-gnu and i686-linux-gnu.

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 weeks agomath: Remove the SVID error handling from sinhf
Adhemerval Zanella [Fri, 31 Oct 2025 16:08:54 +0000 (13:08 -0300)] 
math: Remove the SVID error handling from sinhf

It improves latency for about 3-10% and throughput for about 5-15%.

Tested on x86_64-linux-gnu and i686-linux-gnu.

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 weeks agomath: Remove the SVID error handling from remainder
Adhemerval Zanella [Fri, 31 Oct 2025 16:08:51 +0000 (13:08 -0300)] 
math: Remove the SVID error handling from remainder

The optimized i386 version is faster than the generic one, and
gcc implements it through the builtin. This optimization enables
us to migrate the implementation to a C version.  The performance
on a Zen3 chip is similar to the SVID one.

The m68k provided an optimized version through __m81_u(remainderf)
(mathimpl.h), and gcc does not implement it through a builtin
(different than i386).

Performance improves a bit on x86_64 (Zen3, gcc 15.2.1):

reciprocal-throughput           input    master   NO-SVID  improvement
x86_64                     subnormals   18.8522   16.2506       13.80%
x86_64                         normal  421.8260  403.9270        4.24%
x86_64                 close-exponent   21.0579   18.7642       10.89%
i686                       subnormals   21.3443   21.4229       -0.37%
i686                           normal  525.8380   538.807       -2.47%
i686                   close-exponent   21.6589   21.7983       -0.64%

Tested on x86_64-linux-gnu and i686-linux-gnu.

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 weeks agomath: Remove the SVID error handling from remainderf
Adhemerval Zanella [Fri, 31 Oct 2025 16:08:50 +0000 (13:08 -0300)] 
math: Remove the SVID error handling from remainderf

The optimized i386 version is faster than the generic one, and gcc
implements it through the builtin.  This optimization enables us to
migrate the implementation to a C version.  The performance on a Zen3
chip is similar to the SVID one.

The m68k provided an optimized version through __m81_u(remainderf)
(mathimpl.h), and gcc does not implement it through a builtin (different
than i386).

Performance improves a bit on x86_64 (Zen3, gcc 15.2.1):

reciprocal-throughput          input   master  NO-SVID  improvement
x86_64                    subnormals  17.5349  15.6125       10.96%
x86_64                        normal  53.8134  52.5754        2.30%
x86_64                close-exponent  20.0211  18.6656        6.77%
i686                      subnormals  21.8105  20.1856        7.45%
i686                          normal  73.1945  71.2199        2.70%
i686                  close-exponent  22.2141   20.331        8.48%

Tested on x86_64-linux-gnu and i686-linux-gnu.

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 weeks agonptl: Remove ATOMIC_EXCHANGE_USES_CAS usage
Wilco Dijkstra [Thu, 11 Sep 2025 13:49:48 +0000 (10:49 -0300)] 
nptl: Remove ATOMIC_EXCHANGE_USES_CAS usage

The only usage was for pthread_spin_lock, introduced by 12d2dd706099aa4,
as a way to optimize the code for certain architectures. Now that atomic
builtins are used by default, let the compiler use the best code sequence
for the atomic exchange.

Co-authored-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Reviewed-by: Wilco Dijkstra  <Wilco.Dijkstra@arm.com>
6 weeks agoDefine __HAVE_64B_ATOMICS from compiler support
Wilco Dijkstra [Thu, 11 Sep 2025 13:49:47 +0000 (10:49 -0300)] 
Define __HAVE_64B_ATOMICS from compiler support

Now that atomic builtins are used by default, we can rely on the
compiler to define when to use 64-bit atomic operations.

It allows the use of 64-bit atomic operations on some 32-bit ABIs where
they were not previously enabled due to missing pre-processor handling:
hppa, mips64n32, s390, and sparcv9.

Co-authored-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Reviewed-by: Uros Bizjak <ubizjak@gmail.com>
Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 weeks agoatomic: Consolidate atomic_write_barrier implementation
Adhemerval Zanella [Thu, 11 Sep 2025 13:49:46 +0000 (10:49 -0300)] 
atomic: Consolidate atomic_write_barrier implementation

All ABIs, except alpha and sparc, define it to
atomic_full_barrier/__sync_synchronize, which can be mapped to
__atomic_thread_fence (__ATOMIC_RELEASE).

For alpha, it uses a 'wmb' which does not map to any of C11
barriers.

For sparc it uses a stronger 'member #LoadStore | #StoreStore',
where the release barrier maps to just 'membar #StoreLoad'.  The
patch keeps the sparc definition.

For PowerPC, it allows the use of lwsync for additional chips
(since _ARCH_PWR4 does not cover all chips that support it).

Tested on aarch64-linux-gnu.

Co-authored-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
Reviewed-by: Wilco Dijkstra  <Wilco.Dijkstra@arm.com>
6 weeks agoatomic: Consolidate atomic_read_barrier implementation
Adhemerval Zanella [Thu, 11 Sep 2025 13:49:45 +0000 (10:49 -0300)] 
atomic: Consolidate atomic_read_barrier implementation

All ABIs, except alpha, powerpc, and x86_64, define it to
atomic_full_barrier/__sync_synchronize, which can be mapped to
__atomic_thread_fence (__ATOMIC_SEQ_CST) in most cases, with the
exception of aarch64 (where the acquire fence is generated as
'dmb ishld' instead of 'dmb ish').

For s390x, it defaults to a memory barrier where __sync_synchronize
emits a 'bcr 15,0' (which the manual describes as pipeline
synchronization).

For PowerPC, it allows the use of lwsync for additional chips
(since _ARCH_PWR4 does not cover all chips that support it).

Tested on aarch64-linux-gnu, where the acquire produces a different
instruction that the current code.

Co-authored-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 weeks agoatomic: Consolidate atomic_full_barrier implementation
Adhemerval Zanella [Thu, 11 Sep 2025 13:49:44 +0000 (10:49 -0300)] 
atomic: Consolidate atomic_full_barrier implementation

All ABIs save for sparcv9 and s390 defines it to __sync_synchronize,
which can be mapped to __atomic_thread_fence (__ATOMIC_SEQ_CST).

For Sparc, it uses a stricter #StoreStore|#LoadStore|#StoreLoad|#LoadLoad
instead of the #StoreLoad generated by __sync_synchronize.

For s390x, it defaults to a memory barrier where __sync_synchronize
emits a 'bcr 15,0' (which the manual describes as pipeline synchronization).

The barrier is used only in one place (pthread_mutex_setprioceiling),
and using a stricter barrier for s390 is ok performance-wise.

Co-authored-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 weeks agomicroblaze: Remove USE_ATOMIC_COMPILER_BUILTINS definition
Adhemerval Zanella [Thu, 11 Sep 2025 13:49:43 +0000 (10:49 -0300)] 
microblaze: Remove USE_ATOMIC_COMPILER_BUILTINS definition

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 weeks agoalpha: Remove USE_ATOMIC_COMPILER_BUILTINS definition
Adhemerval Zanella [Thu, 11 Sep 2025 13:49:42 +0000 (10:49 -0300)] 
alpha: Remove USE_ATOMIC_COMPILER_BUILTINS definition

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 weeks agosh: Move atomic-machine to generic sysdep
Adhemerval Zanella [Thu, 11 Sep 2025 13:49:41 +0000 (10:49 -0300)] 
sh: Move atomic-machine to generic sysdep

There is no Linux specific definitions.

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 weeks agoriscv: Consolidade atomic-machine.h and remove ununsed atomic macros
Adhemerval Zanella [Thu, 11 Sep 2025 13:49:40 +0000 (10:49 -0300)] 
riscv: Consolidade atomic-machine.h and remove ununsed atomic macros

The resulting definitions are not Linux specific, so move the header
to generic sysdep folder.

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 weeks agopowerpc: Consolidate atomic-machine.h
Adhemerval Zanella [Thu, 11 Sep 2025 13:49:39 +0000 (10:49 -0300)] 
powerpc: Consolidate atomic-machine.h

The __HAVE_64B_ATOMICS can be define based on __WORDSIZE, and
the __ARCH_ACQ_INSTR, MUTEX_HINT_*, and barriers definition are
defined by the target cpu.

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 weeks agoloongarch: Consolidate atomic-machine.h and remove ununsed atomic macros
Adhemerval Zanella [Thu, 11 Sep 2025 13:49:38 +0000 (10:49 -0300)] 
loongarch: Consolidate atomic-machine.h and remove ununsed atomic macros

These are already provided by the generic include/atomic.h and
the resulting macros are not Linux specific.

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 weeks agom68k: Consolidade atomic-machine.h and Remove ununsed atomic macros
Adhemerval Zanella [Thu, 11 Sep 2025 13:49:37 +0000 (10:49 -0300)] 
m68k: Consolidade atomic-machine.h and Remove ununsed atomic macros

Both m68k and m68k-colfire do not support 64 bit atomis.  The
atomic_barrier syscall on m68k is a no-op, so it can use the compiler
builtin.

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 weeks agohppa: Move atomic-machine to generic sysdep
Adhemerval Zanella [Thu, 11 Sep 2025 13:49:36 +0000 (10:49 -0300)] 
hppa: Move atomic-machine to generic sysdep

There is no Linux specific definitions.

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 weeks agoarm: Consolidate atomic-machine.h and Remove ununsed atomic macros
Adhemerval Zanella [Thu, 11 Sep 2025 13:49:35 +0000 (10:49 -0300)] 
arm: Consolidate atomic-machine.h and Remove ununsed atomic macros

The libgcc provides the required support to calling the kernel
auxiliary routines for !__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4.

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 weeks agox86: Remove ununsed atomic macros
Adhemerval Zanella [Thu, 11 Sep 2025 13:49:34 +0000 (10:49 -0300)] 
x86: Remove ununsed atomic macros

These are already provided by the generic include/atomic.h.

Reviewed-by: Uros Bizjak <ubizjak@gmail.com>
Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 weeks agosparc: Remove ununsed atomic macros
Adhemerval Zanella [Thu, 11 Sep 2025 13:49:33 +0000 (10:49 -0300)] 
sparc: Remove ununsed atomic macros

These are already provided by the generic include/atomic.h.

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 weeks agos390: Remove ununsed atomic macros
Adhemerval Zanella [Thu, 11 Sep 2025 13:49:32 +0000 (10:49 -0300)] 
s390: Remove ununsed atomic macros

These are already provided by the generic include/atomic.h.  Also
remove outdated comment from unsupported gcc versions.

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 weeks agoor1k: Remove ununsed atomic macros
Adhemerval Zanella [Thu, 11 Sep 2025 13:49:31 +0000 (10:49 -0300)] 
or1k: Remove ununsed atomic macros

These are already provided by the generic include/atomic.h.

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 weeks agomips: Remove ununsed atomic macros
Adhemerval Zanella [Thu, 11 Sep 2025 13:49:30 +0000 (10:49 -0300)] 
mips: Remove ununsed atomic macros

These are already provided by the generic include/atomic.h.

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 weeks agocsky: Remove ununsed atomic macros
Adhemerval Zanella [Thu, 11 Sep 2025 13:49:29 +0000 (10:49 -0300)] 
csky: Remove ununsed atomic macros

These are already provided by the generic include/atomic.h.

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 weeks agoarc: Remove ununsed atomic macros
Adhemerval Zanella [Thu, 11 Sep 2025 13:49:28 +0000 (10:49 -0300)] 
arc: Remove ununsed atomic macros

These are already provided by the generic include/atomic.h.
Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 weeks agoaarch64: Remove ununsed atomic macros
Adhemerval Zanella [Thu, 11 Sep 2025 13:49:27 +0000 (10:49 -0300)] 
aarch64: Remove ununsed atomic macros

These are already provided by the generic include/atomic.h.

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 weeks agoBuild programs in $(others-noinstall) like tests if libgcc_s is available
H.J. Lu [Thu, 30 Oct 2025 23:29:45 +0000 (07:29 +0800)] 
Build programs in $(others-noinstall) like tests if libgcc_s is available

Build programs in $(others-noinstall) like tests only if libgcc_s is
available.  Otherwise, "build-many-glibcs.py compilers" will fail to
build the initial glibc with the initial limited gcc due to the missing
libgcc_s.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
6 weeks agoSupport assert as a variadic macro for C23
Joseph Myers [Mon, 3 Nov 2025 19:56:42 +0000 (19:56 +0000)] 
Support assert as a variadic macro for C23

C23 makes assert into a variadic macro to handle cases of an argument
that would be interpreted as a single function argument but more than
one macro argument (in particular, compound literals with an
unparenthesized comma in an initializer list); this change was made by
N2829.  Note that this only applies to assert, not to other macros
specified in the C standard with particular numbers of arguments.

Implement this support in glibc.  This change is only for C; C++ would
need a separate change to its separate assert implementations.  It's
also applied only in C23 mode.  It depends on support for (C99)
variadic macros, and also (in order to detect calls where more than
one expression is passed, via an unevaluated function call) a C99
boolean type.  These requirements are encapsulated in the definition
of __ASSERT_VARIADIC.  Tests with -std=c99 and -std=gnu99 (using
implementations continue to work.

I don't think we have a way in the glibc testsuite to validate that
passing more than one expression as an argument does produce the
desired error.

Tested for x86_64.

6 weeks agodocs: Add dynamic linker environment variable docs
Frédéric Bérat [Thu, 2 Oct 2025 17:15:29 +0000 (19:15 +0200)] 
docs: Add dynamic linker environment variable docs

The Dynamic Linker chapter now includes a new section detailing
environment variables that influence its behavior.

This new section documents the `LD_DEBUG` environment variable,
explaining how to enable debugging output and listing its various
keywords like `libs`, `reloc`, `files`, `symbols`, `bindings`,
`versions`, `scopes`, `tls`, `all`, `statistics`, `unused`, and `help`.

It also documents `LD_DEBUG_OUTPUT`, which controls where the debug
output is written, allowing redirection to a file with the process ID
appended.

This provides users with essential information for controlling and
debugging the dynamic linker.

Reviewed-by: DJ Delorie <dj@redhat.com>
6 weeks agotls: Add debug logging for TLS and TCB management
Frédéric Bérat [Fri, 5 Sep 2025 14:14:38 +0000 (16:14 +0200)] 
tls: Add debug logging for TLS and TCB management

Introduce the `DL_DEBUG_TLS` debug mask to enable detailed logging for
Thread-Local Storage (TLS) and Thread Control Block (TCB) management.

This change integrates a new `tls` option into the `LD_DEBUG`
environment variable, allowing developers to trace:
- TCB allocation, deallocation, and reuse events in `dl-tls.c`,
  `nptl/allocatestack.c`, and `nptl/nptl-stack.c`.
- Thread startup events, including the TID and TCB address, in
  `nptl/pthread_create.c`.

A new test, `tst-dl-debug-tid`, has been added to validate the
functionality of this new debug logging, ensuring that relevant messages
are correctly generated for both main and worker threads.

This enhances the debugging capabilities for diagnosing issues related
to TLS allocation and thread lifecycle within the dynamic linker.

Reviewed-by: DJ Delorie <dj@redhat.com>
6 weeks agoriscv: Add Zbkb optimized repeat_bytes helper
Pincheng Wang [Fri, 31 Oct 2025 20:15:26 +0000 (15:15 -0500)] 
riscv: Add Zbkb optimized repeat_bytes helper

Introduce a RISC-V specific string-misc.h to provide an optimized
repeat_bytes implementation when the Zbkb extension is available.
The new version uses packh/packw/pack instruction count and avoiding
high latency instructions. This helper is used by several mem and string
functions, and falls back to the generic implementation when Zbkb is not
present.

Signed-off-by: Pincheng Wang <pincheng.plct@isrc.iscas.ac.cn>
Reviewed-by: Peter Bergner <bergner@tenstorrent.com>
6 weeks agomath: Remove xfail from pow test [BZ #33563]
Wilco Dijkstra [Thu, 30 Oct 2025 15:35:47 +0000 (15:35 +0000)] 
math: Remove xfail from pow test [BZ #33563]

Remove xfail from pow testcase since pow and powf have been fixed.
Also check float128 maximum value.  See BZ #33563.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
6 weeks agomath: Fix pow special case [BZ #33563]
Wilco Dijkstra [Thu, 30 Oct 2025 15:24:53 +0000 (15:24 +0000)] 
math: Fix pow special case [BZ #33563]

Fix pow (DBL_MAX, 1.0) to return DBL_MAX when rouding upwards without FMA.
This fixes BZ #33563.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
6 weeks agomath: Fix powf special case [BZ #33563]
Wilco Dijkstra [Fri, 24 Oct 2025 14:26:50 +0000 (14:26 +0000)] 
math: Fix powf special case [BZ #33563]

Fix powf (0x1.fffffep+127, 1.0f) to return 0x1.fffffep+127 when
rouding upwards.  Cleanup the special case code - performance
improves by ~1.2%.  This fixes BZ #33563.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
6 weeks agodebug: mark __libc_message_wrapper as always inline
Yury Khrustalev [Wed, 29 Oct 2025 15:59:53 +0000 (15:59 +0000)] 
debug: mark __libc_message_wrapper as always inline

When building with -Og to enable debugging, there is currently a compiler error
because if __libc_message_wrapper() is not inline, the __va_arg_pack_len macro
cannot be used.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
6 weeks agoaarch64: fix cfi directives around __libc_arm_za_disable
Yury Khrustalev [Tue, 28 Oct 2025 11:01:50 +0000 (11:01 +0000)] 
aarch64: fix cfi directives around __libc_arm_za_disable

Incorrect CFI directive corrupted call stack information
and prevented debuggers from correctly displaying call
stack information.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
6 weeks agocdefs: allow __attribute__ on tcc
Eric Wong [Fri, 31 Oct 2025 03:03:00 +0000 (20:03 -0700)] 
cdefs: allow __attribute__ on tcc

According to the tcc (tiny C compiler) Changelog, tcc supports
__attribute__ since 0.9.3.  Looking at history of tcc at
<https://repo.or.cz/tinycc.git>, __attribute__ support was added
in commit 14658993425878be300aae2e879560698e0c6c4c on 2002-01-03,
which also looks like the release of 0.9.3.  While I'm unable to
find release tags for tcc before 0.9.18 (2003-04-14), the next
release (0.9.28) will include __attribute__((cleanup(func)) which
I rely on.

Reviewed-by: Collin Funk <collin.funk1@gmail.com>
6 weeks agoCleanup some recently added whitespace.
Collin Funk [Thu, 30 Oct 2025 01:34:45 +0000 (18:34 -0700)] 
Cleanup some recently added whitespace.

Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
6 weeks agoriscv: memcpy_noalignment: Reorder to store via a3, then bump a3
Yao Zihong [Thu, 30 Oct 2025 22:49:21 +0000 (17:49 -0500)] 
riscv: memcpy_noalignment: Reorder to store via a3, then bump a3

Rewrite the copy micro-step from:

    REG_L  a4, 0(a5)
    addi   a3, a3, SZREG
    addi   a5, a5, SZREG
    REG_S  a4, -SZREG(a3)

to:

    REG_L  a4, 0(a5)
    addi   a5, a5, SZREG
    REG_S  a4, 0(a3)
    addi   a3, a3, SZREG

Semantics are unchanged: both read *(a5_old), write *(a3_old), and then
increment a3/a5 by SZREG. memcpy assumes non-overlapping regions, so the
reordering preserves correctness.

No functional change.

Signed-off-by: Yao Zihong <zihong.plct@isrc.iscas.ac.cn>
Reviewed-by: Peter Bergner <bergner@tenstorrent.com>
6 weeks agoriscv: memcpy_noalignment: Fold SZREG/BLOCK_SIZE alignment to single andi
Yao Zihong [Thu, 30 Oct 2025 22:47:24 +0000 (17:47 -0500)] 
riscv: memcpy_noalignment: Fold SZREG/BLOCK_SIZE alignment to single andi

Simplify the alignment steps for SZREG and BLOCK_SIZE multiples. The previous
three-instruction sequences

    addi    a7, a2, -SZREG
    andi    a7, a7, -SZREG
    addi    a7, a7, SZREG

and

    addi    a7, a2, -BLOCK_SIZE
    andi    a7, a7, -BLOCK_SIZE
    addi    a7, a7, BLOCK_SIZE

are equivalent to a single

    andi    a7, a2, -SZREG
    andi    a7, a2, -BLOCK_SIZE

because SZREG and BLOCK_SIZE are powers of two in this context, making the
surrounding addi steps cancel out. Folding to one instruction reduces code
size with identical semantics.

No functional change.

sysdeps/riscv/multiarch/memcpy_noalignment.S: Remove redundant addi around
alignment; keep a single andi for SZREG/BLOCK_SIZE rounding.

Signed-off-by: Yao Zihong <zihong.plct@isrc.iscas.ac.cn>
Reviewed-by: Peter Bergner <bergner@tenstorrent.com>
6 weeks agoriscv: memcpy_noalignment: Make register allocation Zca-friendly
Yao Zihong [Thu, 30 Oct 2025 22:44:07 +0000 (17:44 -0500)] 
riscv: memcpy_noalignment: Make register allocation Zca-friendly

Tidy the temporary register allocation to favor registers eligible for
compressed encodings when Zca/Zcb are enabled. This keeps the ABI and
clobber set unchanged and does not alter control flow or memory access
behavior.

No functional change.

sysdeps/riscv/multiarch/memcpy_noalignment.S: Reassign temps to improve
compressed encoding opportunities.

Signed-off-by: Yao Zihong <zihong.plct@isrc.iscas.ac.cn>
Reviewed-by: Peter Bergner <bergner@tenstorrent.com>
6 weeks agomath: Remove the SVID error handling wrapper from yn/jn
Adhemerval Zanella [Wed, 8 Oct 2025 13:55:21 +0000 (10:55 -0300)] 
math: Remove the SVID error handling wrapper from yn/jn

Tested on x86_64-linux-gnu and i686-linux-gnu.

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 weeks agomath: Remove the SVID error handling wrapper from y1/j1
Adhemerval Zanella [Wed, 8 Oct 2025 13:55:20 +0000 (10:55 -0300)] 
math: Remove the SVID error handling wrapper from y1/j1

Tested on x86_64-linux-gnu and i686-linux-gnu.

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 weeks agomath: Remove the SVID error handling wrapper from y0/j0
Adhemerval Zanella [Wed, 8 Oct 2025 13:55:19 +0000 (10:55 -0300)] 
math: Remove the SVID error handling wrapper from y0/j0

Tested on x86_64-linux-gnu and i686-linux-gnu.

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 weeks agomath: Remove the SVID error handling from coshf
Adhemerval Zanella [Wed, 8 Oct 2025 13:55:15 +0000 (10:55 -0300)] 
math: Remove the SVID error handling from coshf

It improves latency for about 3-10% and throughput for about 5-15%.

Tested on x86_64-linux-gnu and i686-linux-gnu.

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 weeks agomath: Remove the SVID error handling from atanhf
Adhemerval Zanella [Wed, 8 Oct 2025 13:55:14 +0000 (10:55 -0300)] 
math: Remove the SVID error handling from atanhf

It improves latency for about 1-10% and throughput for about 5-10%.

Tested on x86_64-linux-gnu and i686-linux-gnu.

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
6 weeks agomath: Remove the SVID error handling from acoshf
Adhemerval Zanella [Wed, 8 Oct 2025 13:55:12 +0000 (10:55 -0300)] 
math: Remove the SVID error handling from acoshf

It improves latency for about 3-7% and throughput for about 5-10%.

Tested on x86_64-linux-gnu and i686-linux-gnu.

Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>