aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2022-08-30LoongArch: Use __builtin_{fmax,fmaxf,fmin,fminf} with GCC >= 13Xi Ruoyao
GCC 13 compiles these built-ins to {fmax,fmin}.{s/d} instruction, use them instead of the generic implementation. Link: https://gcc.gnu.org/r13-2085 Signed-off-by: Xi Ruoyao <xry111@xry111.site>
2022-08-30LoongArch: Fix ptr mangling/demangling features.caiyinyu
2022-08-29nscd: Fix netlink cache invalidation if epoll is used [BZ #29415]Fabian Vogt
Processes cache network interface information such as whether IPv4 or IPv6 are enabled. This is only checked again if the "netlink timestamp" provided by nscd changed, which is triggered by netlink socket activity. However, in the epoll handler for the netlink socket, it was missed to assign the new timestamp to the nscd database. The handler for plain poll did that properly, copy that over. This bug caused that e.g. processes which started before network configuration got unusuable addresses from getaddrinfo, like IPv6 only even though only IPv4 is available: https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/1041 It's a bit hard to reproduce, so I verified this by checking the timestamp on calls to __check_pf manually. Without this patch it's stuck at 1, now it's increasing on network changes as expected. Signed-off-by: Fabian Vogt <fvogt@suse.de>
2022-08-29Add test for bug 29530Andreas Schwab
This tests for a bug that was introduced in commit edc1686af0 ("vfprintf: Reuse work_buffer in group_number") and fixed as a side effect of commit 6caddd34bd ("Remove most vfprintf width/precision-dependent allocations (bug 14231, bug 26211).").
2022-08-29Makeconfig: Set pie-ccflag to -fPIE by default [BZ# 29514]Richard Henderson
We should default to the larger code model, in order to support larger applications built with -static -pie. This should be consistent with pic-ccflag, which defaults to -fPIC. Remove the now redundant override from sysdeps/sparc/Makefile. Note that -fno-pie and -fno-PIE have the same effect. Reviewed-by: Carlos O'Donell <carlos@redhat.com> Tested-by: Carlos O'Donell <carlos@redhat.com>
2022-08-29hurd: Fix vm_size_t incoherenciesSamuel Thibault
In gnumach, 3e1702a65fb3 ("add rpc_versions for vm types") changed the type of vm_size_t, making it always a unsigned long. This made it incompatible on x86 with size_t. Even if we may want to revert it to unsigned int, it's better to fix the types of parameters according to the .defs files.
2022-08-27mach: Make xpg_strerror_r set a message on errorSamuel Thibault
posix advises to have strerror_r fill a message even when we are returning an error. This makes mach's xpg_strerror_r do this, like the generic version does. Spotted by the libunistring testsuite test-strerror_r
2022-08-27mach: Fix incoherency between perror and strerrorSamuel Thibault
08d2024b4167 ("string: Simplify strerror_r") inadvertently made __strerror_r print unknown error system in decimal while the original code was printing it in hexadecimal. perror was kept printing in hexadecimal in 725eeb4af14c ("string: Use tls-internal on strerror_l"), let us keep both coherent. This also fixes a duplicate ':' Spotted by the libunistring testsuite test-perror2
2022-08-26elf: Call __libc_early_init for reused namespaces (bug 29528)Florian Weimer
libc_map is never reset to NULL, neither during dlclose nor on a dlopen call which reuses the namespace structure. As a result, if a namespace is reused, its libc is not initialized properly. The most visible result is a crash in the <ctype.h> functions. To prevent similar bugs on namespace reuse from surfacing, unconditionally initialize the chosen namespace to zero using memset.
2022-08-26csu: Change start code license to have link exceptionSzabolcs Nagy
The start code can get linked into dynamic linked executables where LGPL would require shipping the source or linkable binaries when the executable is distributed. On some targets the license exception was missing in start.S (which is compiled into crt1.o and Scrt1.o which may end up linked into PDE and PIE binaries). I did not review what other code may end up in executables, just fixed the start.S license inconsistency across targets. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2022-08-25s390: Move hwcaps/platform names out of _rtld_global_roFlorian Weimer
Changes to these arrays are often backported to stable releases, but additions to these arrays shift the offsets of the following _rltd_global_ro members, thus breaking the GLIBC_PRIVATE ABI. Obviously, this change is itself an internal ABI break, but at least it will avoid further ABI breaks going forward. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2022-08-25Revert "Detect ld.so and libc.so version inconsistency during startup"Florian Weimer
This reverts commit 6f85dbf102ad7982409ba0fe96886caeb6389fef. Once this change hits the release branches, it will require relinking of all statically linked applications before static dlopen works again, for the majority of updates on release branches: The NEWS file is regularly updated with bug references, so the __libc_early_init suffix changes, and static dlopen cannot find the function anymore. While this ABI check is still technically correct (we do require rebuilding & relinking after glibc updates to keep static dlopen working), it is too drastic for stable release branches. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2022-08-24Add NT_LOONGARCH_* from Linux 5.19 to elf.hJoseph Myers
Add the new NT_LOONGARCH_* constants from Linux 5.19 to glibc's elf.h. Tested for x86_64.
2022-08-24Detect ld.so and libc.so version inconsistency during startupFlorian Weimer
The files NEWS, include/link.h, and sysdeps/generic/ldsodefs.h contribute to the version fingerprint used for detection. The fingerprint can be further refined using the --with-extra-version-id configure argument. _dl_call_libc_early_init is replaced with _dl_lookup_libc_early_init. The new function is used store a pointer to libc.so's __libc_early_init function in the libc_map_early_init member of the ld.so namespace structure. This function pointer can then be called directly, so the separate invocation function is no longer needed. The versioned symbol lookup needs the symbol versioning data structures, so the initialization of libc_map and libc_map_early_init is now done from _dl_check_map_versions, after this information becomes available. (_dl_map_object_from_fd does not set this up in time, so the initialization code had to be moved from there.) This means that the separate initialization code can be removed from dl_main because _dl_check_map_versions covers all maps, including the initial executable loaded by the kernel. The lookup still happens before relocation and the invocation of IFUNC resolvers, so IFUNC resolvers are protected from ABI mismatch. The __libc_early_init function pointer is not protected because so little code runs between the pointer write and the invocation (only dynamic linker code and IFUNC resolvers). Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2022-08-23Merge getopt patch from GnulibPaul Eggert
* posix/getopt.c [!_LIBC]: Merge _WIN32 patch from Gnulib so that these source files are identical. This makes no difference for glibc.
2022-08-23Merge _GL_UNUSED C23 patch from GnulibPaul Eggert
* posix/getopt.c (_getopt_initialize): * sysdeps/posix/tempname.c (try_dir, try_nocreate): Put _GL_UNUSED before args instead of after. This makes no difference for glibc. It is needed for Gnulib when being compiled on non-GCC C23 compilers.
2022-08-24LoongArch: Fix dl-machine.h code formatting.Xi Ruoyao
No functional change.
2022-08-23scripts/glibcelf.py: Add hashing supportFlorian Weimer
ELF and GNU hashes can now be computed using the elf_hash and gnu_hash functions. Reviewed-by: Carlos O'Donell <carlos@redhat.com> Tested-by: Carlos O'Donell <carlos@redhat.com>
2022-08-22hurd: Fix starting static binaries with stack protection enabledSamuel Thibault
gcc introduces gs:0x14 accesses in most functions, so we need some tcbhead to be ready very early during initialization. This configures a static area which can be referenced by various protected functions, until proper TLS is set up.
2022-08-22htl: Make pthread*_cond_timedwait register wref before releasing mutexSamuel Thibault
Otherwise another thread could be rightly trying to destroy the condition, see e.g. tst-cond20.
2022-08-22htl: make __pthread_hurd_cond_timedwait_internal check mutex is heldSamuel Thibault
Like __pthread_cond_timedwait_internal already does.
2022-08-22Add AArch64 HWCAP2_* constants from Linux 5.19Joseph Myers
Linux 5.19 adds more HWCAP2_* values for AArch64; add these to its bits/hwcap.h header in glibc. Tested with build-many-glibcs.py for aarch64-linux-gnu.
2022-08-22Add AGROUP from Linux 5.19 to sys/acct.h, remove Alpha version (bug 29502)Joseph Myers
Linux 5.19 adds a new accounting flag AGROUP; add it to the enumeration in sys/acct.h. This shows up that the Alpha-specific variant of this header has a different set of constants and struct acct, which appear to be the constants and structure layout from Linux 2.0. These were changed some time between Linux 2.0 and Linux 2.2; I see no evidence of an Alpha-specific layout or set of constants, but haven't checked the detailed Linux kernel history between those versions. Rather, it looks like tha Alpha-specific header was originally needed because of the use of types in the kernel structure (such as uid_t and gid_t) that had different sizes on Alpha, and when glibc was updated for changes to the structure and constants in the kernel 1998-10-02 Andreas Jaeger <aj@arthur.rhein-neckar.de> * sysdeps/unix/sysv/linux/sys/acct.h: Bring in sync with current linux 2.1 version. that simply omitted to do anything about the Alpha version. Thus, remove the Alpha version in order to get the updated definitions into use on Alpha, as I don't think the interfaces are actually different for Alpha with any kernel version supported by glibc. Tested for x86_64, and with build-many-glibcs.py for alpha-linux-gnu.
2022-08-22alpha: Fix generic brk system call emulation in __brk_call (bug 29490)Florian Weimer
The kernel special-cases the zero argument for alpha brk, and we can use that to restore the generic Linux error handling behavior. Fixes commit b57ab258c1140bc45464b4b9908713e3e0ee35aa ("Linux: Introduce __brk_call for invoking the brk system call").
2022-08-19hurd: Assume non-suid during bootstrapSamuel Thibault
We do not have a hurd data block only when bootstrapping the system, in which case we don't have a notion of suid yet anyway. This is needed, otherwise init_standard_fds would check that standard file descriptors are allocated, which is meaningless during bootstrap.
2022-08-18Use binutils 2.39 branch in build-many-glibcs.pyJoseph Myers
This patch makes build-many-glibcs.py use binutils 2.39 branch. Tested with build-many-glibcs.py (compilers and glibcs builds). Note: binutils 2.39 shows the same failures for i686-linux-gnu-no-pie, x86_64-linux-gnu-no-pie and x86_64-linux-gnu-x32-no-pie building the glibc testsuite as binutils mainline does.
2022-08-18S390: Fix werror=unused-variable in ifunc-impl-list.c.Stefan Liebler
If the architecture level set is high enough, no IFUNCs are used at all and the variable i would be unused. Then the build fails with: ../sysdeps/s390/multiarch/ifunc-impl-list.c: In function ‘__libc_ifunc_impl_list’: ../sysdeps/s390/multiarch/ifunc-impl-list.c:76:10: error: unused variable ‘i’ [-Werror=unused-variable] 76 | size_t i = max; | ^ cc1: all warnings being treated as errors
2022-08-18Ensure calculations happen with desired rounding mode in y1lf128Michael Hudson-Doyle
math/test-float128-y1 fails on x86_64 and ppc64el with gcc 12 and -O3, because code inside a block guarded by SET_RESTORE_ROUNDL is being moved after the rounding mode has been restored. Use math_force_eval to prevent this (and insert some math_opt_barrier calls to prevent code from being moved before the rounding mode is set). Fixes #29463 Reviewed-By: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
2022-08-17localedata: Convert French language locales (fr_*) to UTF-8Florian Weimer
2022-08-16Linux: Fix enum fsconfig_command detection in <sys/mount.h>Florian Weimer
The #ifdef FSOPEN_CLOEXEC check did not work because the macro was always defined in this header prior to the check, so that the <linux/mount.h> contents did not matter. Fixes commit 774058d72942249f71d74e7f2b639f77184160a6 ("linux: Fix sys/mount.h usage with kernel headers").
2022-08-16elf: Run tst-audit-tlsdesc, tst-audit-tlsdesc-dlopen everywhereFlorian Weimer
The test is valid for all TLS models, but we want to make a reasonable effort to test the GNU2 model specifically. For example, aarch64 defaults to GNU2, but does not have -mtls-dialect=gnu2, and the test was not run there. Suggested-by: Martin Coufal <mcoufal@redhat.com>
2022-08-15Move ip_mreqn structure from Linux to genericSamuel Thibault
I.e. from sysdeps/unix/sysv/linux/bits/in.h to netinet/in.h It is following both the BSD and Linux definitions. Reviewed-by: Florian Weimer <fweimer@redhat.com>
2022-08-15malloc: Do not use MAP_NORESERVE to allocate heap segmentsFlorian Weimer
Address space for heap segments is reserved in a mmap call with MAP_ANONYMOUS | MAP_PRIVATE and protection flags PROT_NONE. This reservation does not count against the RSS limit of the process or system. Backing memory is allocated using mprotect in alloc_new_heap and grow_heap, and at this point, the allocator expects the kernel to provide memory (subject to memory overcommit). The SIGSEGV that might generate due to MAP_NORESERVE (according to the mmap manual page) does not seem to occur in practice, it's always SIGKILL from the OOM killer. Even if there is a way that SIGSEGV could be generated, it is confusing to applications that this only happens for secondary heaps, not for large mmap-based allocations, and not for the main arena. Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
2022-08-15Linux: Terminate subprocess on late failure in tst-pidfd (bug 29485)Florian Weimer
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2022-08-15non-linux: bits/in.h: Add more RFC optionsSamuel Thibault
2022-08-12arm: Remove nested functionf rom relocate_pc24Adhemerval Zanella
Checked on arm-linux-gnueabihf.
2022-08-12linux: Fix sys/mount.h usage with kernel headersAdhemerval Zanella
Now that kernel exports linux/mount.h and includes it on linux/fs.h, its definitions might clash with glibc exports sys/mount.h. To avoid the need to rearrange the Linux header to be always after glibc one, the glibc sys/mount.h is changed to: 1. Undefine the macros also used as enum constants. This covers prior inclusion of <linux/mount.h> (for instance MS_RDONLY). 2. Include <linux/mount.h> based on the usual __has_include check (needs to use __has_include ("linux/mount.h") to paper over GCC bugs. 3. Define enum fsconfig_command only if FSOPEN_CLOEXEC is not defined. (FSOPEN_CLOEXEC should be a very close proxy.) 4. Define struct mount_attr if MOUNT_ATTR_SIZE_VER0 is not defined. (Added in the same commit on the Linux side.) This patch also adds some tests to check if including linux/fs.h and linux/mount.h after and before sys/mount.h does work. Checked on x86_64-linux-gnu. Reviewed-by: Florian Weimer <fweimer@redhat.com>
2022-08-12linux: Use compile_c_snippet to check linux/mount.h availabilityAdhemerval Zanella
Checked on x86_64-linux-gnu. Reviewed-by: Florian Weimer <fweimer@redhat.com>
2022-08-12linux: Mimic kernel defition for BLOCK_SIZEAdhemerval Zanella
To avoid possible warnings if the kernel header is included before sys/mount.h. Reviewed-by: Florian Weimer <fweimer@redhat.com>
2022-08-12linux: Use compile_c_snippet to check linux/pidfd.h availabilityAdhemerval Zanella
Instead of tying to a specific kernel version. Checked on x86_64-linux-gnu. Reviewed-by: Florian Weimer <fweimer@redhat.com>
2022-08-12glibcextract.py: Add compile_c_snippetAdhemerval Zanella
It might be used on tests to check if a snippet build with the provided compiler and flags. Reviewed-by: Florian Weimer <fweimer@redhat.com>
2022-08-12LoongArch: Add pointer mangling support.caiyinyu
2022-08-11AArch64: Fix typo in sve configure check (BZ# 29394)Wilco Dijkstra
Fix a typo in the SVE configure check. This fixes [BZ# 29394].
2022-08-11libio: Improve performance of IO locksWilco Dijkstra
Improve performance of recursive IO locks by adding a fast path for the single-threaded case. To reduce the number of memory accesses for locking/unlocking, only increment the recursion counter if the lock is already taken. On Neoverse V1, a microbenchmark with many small freads improved by 2.9x. Multithreaded performance improved by 2%. Reviewed-by: Cristian Rodríguez <crrodriguez@opensuse.org>
2022-08-11tst-process_madvise: Check process_madvise-syscall support.Stefan Liebler
So far this test checks if pidfd_open-syscall is supported, which was introduced with linux 5.3. The process_madvise-syscall was introduced with linux 5.10. Thus you'll get FAILs if you are running a kernel in between. This patch adds a check if the first process_madvise-syscall returns ENOSYS and in this case will fail with UNSUPPORTED. Reviewed-by: Florian Weimer <fweimer@redhat.com>
2022-08-10elf.h: Add ELFCOMPRESS_ZSTDFangrui Song
From the approved generic ABI proposal https://groups.google.com/g/generic-abi/c/satyPkuMisk ("Add new ch_type value: ELFCOMPRESS_ZSTD"). Reviewed-by: Florian Weimer <fweimer@redhat.com>
2022-08-10inet: Turn __ivaliduser into a compatibility symbolFlorian Weimer
It is not declared in a header file, and as the comment indicates, it is not expected to be used.
2022-08-09x86: Fix `#define STRCPY` guard in strcpy-sse2.SNoah Goldstein
`#ifndef STPCPY` is incorrect for checking if `STRCPY` is already defined. It doesn't end up mattering as the whole check is guarded by `#if IS_IN (libc)` but is incorrect none the less.
2022-08-09elf: Replace `strcpy` call with `memcpy` [BZ #29454]Noah Goldstein
GCC normally does this optimization for us in strlen_pass::handle_builtin_strcpy but only for optimized build. To avoid needing to include strcpy.S in the rtld build to support the debug build, just do the optimization by hand.
2022-08-08soft-fp: Add fixhf[uns][di|si] and float[uns][di|si]hfKito Cheng
Add more IEEE half conversion routines: - Convert 32-bit/64-bit integer to IEEE half. - Convert IEEE half to 32-bit/64-bit integer. They are required by RISC-V _Float16 support, tested with RISC-V GCC.