aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/mach
AgeCommit message (Collapse)AuthorFilesLines
6 dayshtl: move __pthread_get_cleanup_stack to libcSamuel Thibault4-3/+3
This fixes the cleanup call from __qsort_r
8 dayshurd: Mark more xfails for missing RLIMIT_AS supportSamuel Thibault1-0/+1
2025-06-21hurd: Remove a duplicate entry from 'tests-unsupported'.Collin Funk1-3/+0
When building on GNU/Hurd the following warnings repeat themselves: ../Rules:400: target '/home/collin/obj/glibc/io/test-lfs.out' given more than once in the same rule ../Rules:400: target '/home/collin/obj/glibc/io/test-lfs.out' given more than once in the same rule This is because commit 73b854e955 (hurd: Mark more memory-hungry tests as unsupported, 2025-01-12) added it to 'tests-unsupported' even though it was already added by decf02d382 (hurd: Mark two tests as unsupported, 2023-04-13). Message-ID: <54dc6bf7e0dbedb1b19356f41fec843c1c523b11.1750130025.git.collin.funk1@gmail.com>
2025-06-21hurd: Fix redefinition of 'P2ALIGN'.Collin Funk1-0/+5
When building on GNU/Hurd warnings like the following occur: ../sysdeps/x86_64/multiarch/strnlen-evex-base.S:53:10: warning: "P2ALIGN" redefined 53 | # define P2ALIGN(...) .p2align 4,, 6 | ^~~~~~~ In file included from /usr/include/x86_64-gnu/mach/x86_64/syscall_sw.h:30, from ../sysdeps/mach/sysdep.h:21, from ../sysdeps/mach/x86/sysdep.h:31, from ../sysdeps/x86_64/multiarch/strnlen-evex-base.S:24: /usr/include/x86_64-gnu/mach/x86_64/asm.h:78:9: note: this is the location of the previous definition 78 | #define P2ALIGN(p2) .p2align p2 /* gas-specific */ | ^~~~~~~ The fix is to undefine the macro from system headers in sysdep.h so that it can be properly defined in assembly files where its definition depends on whether string functions are being compiled for wide-characters or not. Message-ID: <721cd3a1bae1a553857db1dd69761a175f611364.1750131904.git.collin.funk1@gmail.com>
2025-06-17termios: add new baud_t interface, defined to be explicitly numericH. Peter Anvin (Intel)2-0/+10
Add an explicitly numeric interface for baudrate setting. For glibc, this only announces what is a fair accompli, but this is a plausible way forward for standardization, and may be possible to infill on non-compliant systems. The POSIX committee has stated: [https://www.austingroupbugs.net/view.php?id=1916#c7135] A future version of this standard is expected to add at least the following symbolic constants for use as values of objects of type speed_t: B57600, B115200, B230400, B460800, and B921600. Implementations are encouraged to propose additional interfaces which will make it possible to set and query a wider range of speeds than just those enumerated by the constants beginning with B. If a set of common interfaces emerges between several implementations, a future version of this standard will likely add those interfaces. This is exactly that interface. The use of the term "baud" is due to the need to have a term contrasting "speed", and it is already well established as a legacy term -- including in the names of the legacy Bxxx constants. Futhermore, it *is* valid from the point of view that the termios interface fundamentally emulates an RS-232 serial port as far as the application software is concerned. The documentation states that for the current version of glibc, speed_t == baud_t, but explicitly declares that this may not be the case in the future. Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com> Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2025-06-17hurd/termios: remove USE_OLD_TTYH. Peter Anvin (Intel)1-29/+2
Hurd with USE_OLD_TTY was the only remaining platform with speed_t not containing a proper baud rate. From the looks of it, that code has long since bitrotted. Remove the vestiges of USE_OLD_TTY. Reviewed-by: Samuel Thibault <samuel.thibault@ens-lyon.org> Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2025-06-15htl: move pthread_key_*, pthread_get/setspecificgfleury4-10/+18
Signed-off-by: gfleury <gfleury@disroot.org> Reviewed-by: Samuel Thibault <samuel.thibault@ens-lyon.org> Message-ID: <20250613184440.1660335-1-gfleury@disroot.org>
2025-06-09hurd: Make __getrandom_early_init call __mach_initSamuel Thibault1-0/+30
25d37948c9f3 ("malloc: Improve malloc initialization") moved calling malloc initialization earlier, within _dl_sysdep_start's call to dl_main, before __mach_init is called by _dl_init_first. But malloc initialization uses getrandom, which needs to make RPCs. This adds __getrandom_early_init on hurd to express that getrandom needs __mach_init too. This also adds a guard to avoid making it create several task and host ports. Fixes: 25d37948c9f3 ("malloc: Improve malloc initialization") Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
2025-05-14Implement C23 rootn.Joseph Myers2-0/+16
C23 adds various <math.h> function families originally defined in TS 18661-4. Add the rootn functions, which compute the Yth root of X for integer Y (with a domain error if Y is 0, even if X is a NaN). The integer exponent has type long long int in C23; it was intmax_t in TS 18661-4, and as with other interfaces changed after their initial appearance in the TS, I don't think we need to support the original version of the interface. As with pown and compoundn, I strongly encourage searching for worst cases for ulps error for these implementations (necessarily non-exhaustively, given the size of the input space). I also expect a custom implementation for a given format could be much faster as well as more accurate, although the implementation is simpler than those for pown and compoundn. This completes adding to glibc those TS 18661-4 functions (ignoring DFP) that are included in C23. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118592 regarding the C23 mathematical functions (not just the TS 18661-4 ones) missing built-in functions in GCC, where such functions might usefully be added. Tested for x86_64 and x86, and with build-many-glibcs.py.
2025-05-12hurd: Make rename refuse trailing slashes [BZ #32570]Samuel Thibault1-3/+16
As tested by Gnulib's renameatu module. Reported by Collin Funk on https://sourceware.org/bugzilla/show_bug.cgi?id=32570
2025-05-09Implement C23 compoundnJoseph Myers2-0/+16
C23 adds various <math.h> function families originally defined in TS 18661-4. Add the compoundn functions, which compute (1+X) to the power Y for integer Y (and X at least -1). The integer exponent has type long long int in C23; it was intmax_t in TS 18661-4, and as with other interfaces changed after their initial appearance in the TS, I don't think we need to support the original version of the interface. Note that these functions are "compoundn" with a trailing "n", *not* "compound" (CORE-MATH has the wrong name, for example). As with pown, I strongly encourage searching for worst cases for ulps error for these implementations (necessarily non-exhaustively, given the size of the input space). I also expect a custom implementation for a given format could be much faster as well as more accurate (I haven't tested or benchmarked the CORE-MATH implementation for binary32); this is one of the more complicated and less efficient functions to implement in a type-generic way. As with exp2m1 and exp10m1, this showed up places where the powerpc64le IFUNC setup is not as self-contained as one might hope (in this case, without the changes specific to powerpc64le, there were undefined references to __GI___expf128). Tested for x86_64 and x86, and with build-many-glibcs.py.
2025-04-28nptl: Fix pthread_getattr_np when modules with execstack are allowed (BZ 32897)Adhemerval Zanella1-3/+2
The BZ 32653 fix (12a497c716f0a06be5946cabb8c3ec22a079771e) kept the stack pointer zeroing from make_main_stack_executable on _dl_make_stack_executable. However, previously the 'stack_endp' pointed to temporary variable created before the call of _dl_map_object_from_fd; while now we use the __libc_stack_end directly. Since pthread_getattr_np relies on correct __libc_stack_end, if _dl_make_stack_executable is called (for instance, when glibc.rtld.execstack=2 is set) __libc_stack_end will be set to zero, and the call will always fail. The __libc_stack_end zero was used a mitigation hardening, but since 52a01100ad011293197637e42b5be1a479a2f4ae it is used solely on pthread_getattr_np code. So there is no point in zeroing anymore. Checked on x86_64-linux-gnu and i686-linux-gnu. Reviewed-by: Sam James <sam@gentoo.org>
2025-04-21hurd: Make symlink return EEXIST on existing target directorySamuel Thibault1-1/+1
8ef17919509e ("hurd: Fix EINVAL error on linking to a slash-trailing path [BZ #32569]) made symlink return ENOTDIR, but the gnulib testsuite does not recognize it for such a situation, and EEXIST is indeed more comprehensible to users.
2025-04-21hurd: Clear FP exceptions before calling signal handlerSamuel Thibault1-4/+10
This avoids SIGFPE handlers (or code longjmp-ed to) getting disturbed by the exception that generated it. Note: gcc's unwinding depends on the rpc_wait_trampoline/trampoline exact code, so we here avoid breaking it.
2025-04-21hurd: Do not check for xstate level if it was not initializedSamuel Thibault1-1/+1
If __thread_get_state failed, there is no xstate level to check. ok is 0 already and the memory exists, but better not read uninitialized memory.
2025-04-21hurd: Do not restore xstate when it is not initializedSamuel Thibault2-34/+40
If the process has never used fp before getting a signal, xstate is set (and thus the x87 state is not initialized) but xstate->initialized is still 0, and we should not restore anything.
2025-04-20hurd: Make *utime*s catch invalid times [BZ #32802, BZ #32803]Samuel Thibault3-12/+66
2025-04-18hurd: save xstate during signal handlingLuca Dariz5-25/+134
* hurd/Makefile: add new tests * hurd/test-sig-rpc-interrupted.c: check xstate save and restore in the case where a signal is delivered to a thread which is waiting for an rpc. This test implements the rpc interruption protocol used by the hurd servers. It was so far passing on Debian thanks to the local-intr-msg-clobber.diff patch, which is now obsolete. * hurd/test-sig-xstate.c: check xstate save and restore in the case where a signal is delivered to a running thread, making sure that the xstate is modified in the signal handler. * hurd/test-xstate.h: add helpers to test xstate * sysdeps/mach/hurd/i386/bits/sigcontext.h: add xstate to the sigcontext structure. + sysdeps/mach/hurd/i386/sigreturn.c: restore xstate from the saved context * sysdeps/mach/hurd/x86/trampoline.c: save xstate if supported. Otherwise we fall back to the previous behaviour of ignoring xstate. * sysdeps/mach/hurd/x86_64/bits/sigcontext.h: add xstate to the sigcontext structure. * sysdeps/mach/hurd/x86_64/sigreturn.c: restore xstate from the saved context Signed-off-by: Luca Dariz <luca@orpolo.org> Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org> Message-ID: <20250319171118.142163-1-luca@orpolo.org>
2025-04-18hurd: Check return value of mach_port_mod_refs() in the dup routine of fcntl()Zhaoming Luo2-28/+87
Message-ID: <20250310084409.24177-1-zhmingluo@163.com>
2025-04-08stdlib: Implement C2Y uabs, ulabs, ullabs and uimaxabsLenard Mollenkopf2-0/+8
C2Y adds unsigned versions of the abs functions (see C2Y draft N3467 and proposal N3349). Tested for x86_64. Signed-off-by: Lenard Mollenkopf <glibc@lenardmollenkopf.de>
2025-04-02stdlib: Fix qsort memory leak if callback throws (BZ 32058)Adhemerval Zanella1-0/+3
If the input buffer exceeds the stack auxiliary buffer, qsort will malloc a temporary one to call mergesort. Since C++ standard does allow the callback comparison function to throw [1], the glibc implementation can potentially leak memory. The fixes uses a pthread_cleanup_combined_push and pthread_cleanup_combined_pop, so it can work with and without exception enables. The qsort code path that calls malloc now requires some extra setup and a call to __pthread_cleanup_push anmd __pthread_cleanup_pop (which should be ok since they just setup some buffer state). Checked on x86_64-linux-gnu. [1] https://timsong-cpp.github.io/cppwp/n4950/alg.c.library#4 Reviewed-by: DJ Delorie <dj@redhat.com>
2025-03-27Implement C23 pownJoseph Myers2-0/+16
C23 adds various <math.h> function families originally defined in TS 18661-4. Add the pown functions, which are like pow but with an integer exponent. That exponent has type long long int in C23; it was intmax_t in TS 18661-4, and as with other interfaces changed after their initial appearance in the TS, I don't think we need to support the original version of the interface. The test inputs are based on the subset of test inputs for pow that use integer exponents that fit in long long. As the first such template implementation that saves and restores the rounding mode internally (to avoid possible issues with directed rounding and intermediate overflows or underflows in the wrong rounding mode), support also needed to be added for using SET_RESTORE_ROUND* in such template function implementations. This required math-type-macros-float128.h to include <fenv_private.h>, so it can tell whether SET_RESTORE_ROUNDF128 is defined. In turn, the include order with <fenv_private.h> included before <math_private.h> broke loongarch builds, showing up that sysdeps/loongarch/math_private.h is really a fenv_private.h file (maybe implemented internally before the consistent split of those headers in 2018?) and needed to be renamed to fenv_private.h to avoid errors with duplicate macro definitions if <math_private.h> is included after <fenv_private.h>. The underlying implementation uses __ieee754_pow functions (called more than once in some cases, where the exponent does not fit in the floating type). I expect a custom implementation for a given format, that only handles integer exponents but handles larger exponents directly, could be faster and more accurate in some cases. I encourage searching for worst cases for ulps error for these implementations (necessarily non-exhaustively, given the size of the input space). Tested for x86_64 and x86, and with build-many-glibcs.py.
2025-03-25mach: Use the host_get_time64 to replace the deprecated host_get_time for ↵Zhaoming Luo3-0/+52
CLOCK_REALTIME when it's available Check the availability of host_get_time64 and use it to replace host_get_time for CLOCK_REALTIME when it's available. Fall back to host_get_time if gnumach does not support host_get_time64 but the gnumach headers do. host_get_time is deprecated See https://git.savannah.gnu.org/cgit/hurd/gnumach.git/commit/?id=569df850cd7badd1e36132ad3b44aa76a4d27c25 However, it's kept for backward compactbility. * config.h.in: Add HAVE_HOST_GET_TIME64 config entry. * sysdeps/mach/clock_gettime.c: Use host_get_time64 for CLOCK_REALTIME when it's possible, fall to host_get_time otherwise. * sysdeps/mach/configure: Check the existence of host_get_time64 RPC. * sysdeps/mach/configure.ac: Check the existence of host_get_time64 RPC. Message-ID: <20250324052042.19803-1-zhmingluo@163.com>
2025-03-24Add _FORTIFY_SOURCE support for inet_ptonAaron Merey2-0/+2
Add function __inet_pton_chk which calls __chk_fail when the size of argument dst is too small. inet_pton is redirected to __inet_pton_chk or __inet_pton_warn when _FORTIFY_SOURCE is > 0. Also add tests to debug/tst-fortify.c, update the abilist with __inet_pton_chk and mention inet_pton fortification in maint.texi. Co-authored-by: Frédéric Bérat <fberat@redhat.com> Reviewed-by: Florian Weimer <fweimer@redhat.com>
2025-03-21debug: Improve '%n' fortify detection (BZ 30932)Adhemerval Zanella1-7/+4
The 7bb8045ec0 path made the '%n' fortify check ignore EMFILE errors while trying to open /proc/self/maps, and this added a security issue where EMFILE can be attacker-controlled thus making it ineffective for some cases. The EMFILE failure is reinstated but with a different error message. Also, to improve the false positive of the hardening for the cases where no new files can be opened, the _dl_readonly_area now uses _dl_find_object to check if the memory area is within a writable ELF segment. The procfs method is still used as fallback. Checked on x86_64-linux-gnu and i686-linux-gnu. Reviewed-by: Arjun Shankar <arjun@redhat.com>
2025-03-21Remove eloop-threshold.hAdhemerval Zanella2-11/+7
On both Linux and Hurd the __eloop_threshold() is always a constant (40 and 32 respectively), so there is no need to always call __sysconf (_SC_SYMLOOP_MAX) for Linux case (!SYMLOOP_MAX). To avoid a name clash with gnulib, rename the new file min-eloop-threshold.h. Checked on x86_64-linux-gnu and with a build for x86_64-gnu. Reviewed-by: DJ Delorie <dj@redhat.com>
2025-03-21Add _FORTIFY_SOURCE support for inet_ntopFrédéric Bérat2-0/+2
- Create the __inet_ntop_chk routine that verifies that the builtin size of the destination buffer is at least as big as the size given by the user. - Redirect calls from inet_ntop to __inet_ntop_chk or __inet_ntop_warn - Update the abilist for this new routine - Update the manual to mention the new fortification Reviewed-by: Florian Weimer <fweimer@redhat.com>
2025-03-14Implement C23 powrJoseph Myers2-0/+16
C23 adds various <math.h> function families originally defined in TS 18661-4. Add the powr functions, which are like pow, but with simpler handling of special cases (based on exp(y*log(x)), so negative x and 0^0 are domain errors, powers of -0 are always +0 or +Inf never -0 or -Inf, and 1^+-Inf and Inf^0 are also domain errors, while NaN^0 and 1^NaN are NaN). The test inputs are taken from those for pow, with appropriate adjustments (including removing all tests that would be domain errors from those in auto-libm-test-in and adding some more such tests in libm-test-powr.inc). The underlying implementation uses __ieee754_pow functions after dealing with all special cases that need to be handled differently. It might be a little faster (avoiding a wrapper and redundant checks for special cases) to have an underlying implementation built separately for both pow and powr with compile-time conditionals for special-case handling, but I expect the benefit of that would be limited given that both functions will end up needing to use the same logic for computing pow outside of special cases. My understanding is that powr(negative, qNaN) should raise "invalid": that the rule on "invalid" for an argument outside the domain of the function takes precedence over a quiet NaN argument producing a quiet NaN result with no exceptions raised (for rootn it's explicit that the 0th root of qNaN raises "invalid"). I've raised this on the WG14 reflector to confirm the intent. Tested for x86_64 and x86, and with build-many-glibcs.py.
2025-03-13elf: Canonicalize $ORIGIN in an explicit ld.so invocation [BZ 25263]Adhemerval Zanella1-0/+2
When an executable is invoked directly, we calculate $ORIGIN by calling readlink on /proc/self/exe, which the Linux kernel resolves to the target of any symlinks. However, if an executable is run through ld.so, we cannot use /proc/self/exe and instead use the path given as an argument. This leads to a different calculation of $ORIGIN, which is most notable in that it causes ldd to behave differently (e.g., by not finding a library) from directly running the program. To make the behavior consistent, take advantage of the fact that the kernel also resolves /proc/self/fd/ symlinks to the target of any symlinks in the same manner, so once we have opened the main executable in order to load it, replace the user-provided path with the result of calling readlink("/proc/self/fd/N"). (On non-Linux platforms this resolution does not happen and so no behavior change is needed.) The __fd_to_filename requires _fitoa_word and _itoa_word, which for 32-bits pulls a lot of definitions from _itoa.c (due _ITOA_NEEDED being defined). To simplify the build move the required function to a new file, _fitoa_word.c. Checked on x86_64-linux-gnu and i686-linux-gnu. Co-authored-by: Geoffrey Thomas <geofft@ldpreload.com> Reviewed-by: Geoffrey Thomas <geofft@ldpreload.com> Tested-by: Geoffrey Thomas <geofft@ldpreload.com>
2025-03-07Implement C23 rsqrtJoseph Myers2-0/+16
C23 adds various <math.h> function families originally defined in TS 18661-4. Add the rsqrt functions (1/sqrt(x)). The test inputs are taken from those for sqrt. Tested for x86_64 and x86, and with build-many-glibcs.py.
2025-03-06htl: Make __pthread_sigmask directly call __sigthreadmaskSamuel Thibault1-0/+2
If no thread was created yet, __pthread_sigstate will not find our ss because self->kernel_thread is still nul, and then change the global sigstate instead of our sigstate! We can directly call __sigthreadmask and skip the (bogus) lookup step.
2025-03-06hurd: Consolidate signal mask changeSamuel Thibault3-103/+87
__pthread_sigstate and __sigprocmask were already the same, except for clear_pending.
2025-03-05Remove dl-procinfo.hAdhemerval Zanella1-1/+0
powerpc was the only architecture with arch-specific hooks for LD_SHOW_AUXV, and with the information moved to ld diagnostics there is no need to keep the _dl_procinfo hook. Checked with a build for all affected ABIs. Reviewed-by: Peter Bergner <bergner@linux.ibm.com>
2025-03-02htl: move pthread_once into libcSamuel Thibault4-2/+4
2025-02-16htl: move pthread_rwlock_init into libc.gfleury4-2/+4
Signed-off-by: gfleury <gfleury@disroot.org> Message-ID: <20250216145434.7089-10-gfleury@disroot.org>
2025-02-16htl: move pthread_rwlock_destroy into libc.gfleury4-2/+4
Signed-off-by: gfleury <gfleury@disroot.org> Message-ID: <20250216145434.7089-9-gfleury@disroot.org>
2025-02-16htl: move pthread_rwlock_{rdlock, timedrdlock, timedwrlock, wrlock, ↵gfleury4-12/+24
clockrdlock, clockwrlock} into libc. Signed-off-by: gfleury <gfleury@disroot.org> Message-ID: <20250216145434.7089-8-gfleury@disroot.org>
2025-02-16htl: move pthread_rwlock_unlock into libc.gfleury4-2/+4
Signed-off-by: gfleury <gfleury@disroot.org> Message-ID: <20250216145434.7089-7-gfleury@disroot.org>
2025-02-16htl: move pthread_rwlock_tryrdlock, pthread_rwlock_trywrlock into libc.gfleury4-4/+8
Signed-off-by: gfleury <gfleury@disroot.org> Message-ID: <20250216145434.7089-6-gfleury@disroot.org>
2025-02-16htl: move pthread_rwlockattr_getpshared, pthread_rwlockattr_setpshared into ↵gfleury4-4/+8
libc. Signed-off-by: gfleury <gfleury@disroot.org> Message-ID: <20250216145434.7089-5-gfleury@disroot.org>
2025-02-16htl: move pthread_rwlockattr_destroy into libc.gfleury4-2/+4
Signed-off-by: gfleury <gfleury@disroot.org> Message-ID: <20250216145434.7089-4-gfleury@disroot.org>
2025-02-16htl: move pthread_rwlockattr_init into libc.gfleury4-2/+4
Signed-off-by: gfleury <gfleury@disroot.org> Message-ID: <20250216145434.7089-3-gfleury@disroot.org>
2025-02-10hurd: Replace char foo[1024] with string_tSamuel Thibault7-7/+7
Like already done in various other places and advised by Roland in https://lists.gnu.org/archive/html/bug-hurd/2012-04/msg00124.html
2025-02-10hurd: Drop useless buffer initialization in ttyname*Samuel Thibault2-2/+0
The RPC stub will write a string anyway.
2025-02-10htl: move pthread_barrier_wait into libc.gfleury4-2/+4
Message-ID: <20250209200108.865599-8-gfleury@disroot.org>
2025-02-10htl: move pthread_barrier_init into libc.gfleury4-2/+4
Message-ID: <20250209200108.865599-7-gfleury@disroot.org>
2025-02-10htl: move pthread_barrier_destroy into libc.gfleury4-2/+4
Message-ID: <20250209200108.865599-6-gfleury@disroot.org>
2025-02-10htl: move pthread_barrierattr_getpshared, pthread_barrierattr_setpshared ↵gfleury4-4/+8
into libc. Message-ID: <20250209200108.865599-5-gfleury@disroot.org>
2025-02-10htl: move pthread_barrierattr_init into libc.gfleury4-2/+4
Message-ID: <20250209200108.865599-4-gfleury@disroot.org>
2025-02-10htl: move pthread_barrierattr_destroy into libc.gfleury4-2/+4
Message-ID: <20250209200108.865599-3-gfleury@disroot.org>