about summary refs log tree commit diff
path: root/sysdeps/htl
Commit message (Collapse)AuthorAgeFilesLines
* linux: Require /dev/shm as the shared memory file systemFlorian Weimer2021-02-081-30/+0
| | | | | | | | | | | | | | | | | | | | | Previously, glibc would pick an arbitrary tmpfs file system from /proc/mounts if /dev/shm was not available. This could lead to an unsuitable file system being picked for the backing storage for shm_open, sem_open, and related functions. This patch introduces a new function, __shm_get_name, which builds the file name under the appropriate (now hard-coded) directory. It is called from the various shm_* and sem_* function. Unlike the SHM_GET_NAME macro it replaces, the callers handle the return values and errno updates. shm-directory.c is moved directly into the posix subdirectory because it can be implemented directly using POSIX functionality. It resides in libc because it is needed by both librt and nptl/htl. In the sem_open implementation, tmpfname is initialized directly from a string constant. This happens to remove one alloca call. Checked on x86_64-linux-gnu.
* Update copyright dates with scripts/update-copyrightsPaul Eggert2021-01-02114-114/+114
| | | | | | | | | | | | | | | | I used these shell commands: ../glibc/scripts/update-copyrights $PWD/../gnulib/build-aux/update-copyright (cd ../glibc && git commit -am"[this commit message]") and then ignored the output, which consisted lines saying "FOO: warning: copyright statement not found" for each of 6694 files FOO. I then removed trailing white space from benchtests/bench-pthread-locks.c and iconvdata/tst-iconv-big5-hkscs-to-2ucs4.c, to work around this diagnostic from Savannah: remote: *** pre-commit check failed ... remote: *** error: lines with trailing whitespace found remote: error: hook declined to update refs/heads/master
* htl: Get sem_open/sem_close/sem_unlink support [BZ #25524]Samuel Thibault2020-12-163-93/+0
| | | | | This just moves the existing nptl implementation to reuse as it is in htl.
* htl: Add pshared semaphore supportSamuel Thibault2020-12-168-184/+253
| | | | | | The implementation is extremely similar to the nptl implementation, but with slight differences in the futex interface. This fixes some of BZ 25521.
* htl: Add futex-internal.hSamuel Thibault2020-12-161-0/+39
| | | | That provides futex_supports_pshared
* htl: Add hidden def for __pthread_create/detachSamuel Thibault2020-12-031-0/+2
| | | | to avoid a PLT.
* hurd: Remove some remnants of cthreadsSamuel Thibault2020-11-152-2/+2
| | | | | Libc has actually been using mach's lock-internal.h mutex for a long time already.
* htl: Fix spurious symbols in namespacesSamuel Thibault2020-11-115-5/+5
| | | | | pthread_attr_{{get,set}stack{addr,size},setstack} were defining a strong alias for no reason, turning them to weak.
* htl: Move cleanup handling to non-private libc-lockSamuel Thibault2020-06-282-33/+70
| | | | | | | | | | | | | | | | | This adds sysdeps/htl/libc-lock.h which augments sysdeps/mach/libc-lock.h with the htl-aware cleanup handling. Otherwise inclusion of libc-lock.h without libc-lockP.h would keep only the mach-aware handling. This also fixes cleanup getting called when the binary is statically-linked without libpthread. * sysdeps/htl/libc-lockP.h (__libc_cleanup_region_start, __libc_cleanup_end, __libc_cleanup_region_end, __pthread_get_cleanup_stack): Move to... * sysdeps/htl/libc-lock.h: ... new file. (__libc_cleanup_region_start): Always set handler and arg. (__libc_cleanup_end): Always call the cleanup handler. (__libc_cleanup_push, __libc_cleanup_pop): New macros.
* htl: Fix includes for lockfileSamuel Thibault2020-06-283-6/+3
| | | | | | | | | | | These only need exactly to use __libc_ptf_call. * sysdeps/htl/flockfile.c: Include <libc-lockP.h> instead of <libc-lock.h> * sysdeps/htl/ftrylockfile.c: Include <libc-lockP.h> instead of <errno.h>, <pthread.h>, <stdio-lock.h> * sysdeps/htl/funlockfile.c: Include <libc-lockP.h> instead of <pthread.h> and <stdio-lock.h>
* htl: Add wrapper header for <semaphore.h> with hidden __sem_postFlorian Weimer2020-06-243-2/+11
| | | | | | | This is required to avoid a check-localplt failure due to a sem_post call through the PLT. Reviewed-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
* htl: Fix case when sem_*wait is canceled while holding a tokenSamuel Thibault2020-06-241-2/+13
| | | | | | | | * sysdeps/htl/sem-timedwait.c (struct cancel_ctx): Add cancel_wake field. (cancel_hook): When unblocking thread, set cancel_wake field to 1. (__sem_timedwait_internal): Set cancel_wake field to 0 by default. On cancellation exit, check whether we hold a token, to be put back.
* htl: Make sem_*wait cancellations pointsSamuel Thibault2020-06-241-8/+84
| | | | | | | | | | | | | | By aligning its implementation on pthread_cond_wait. * sysdeps/htl/sem-timedwait.c (cancel_ctx): New structure. (cancel_hook): New function. (__sem_timedwait_internal): Check for cancellation and register cancellation hook that wakes the thread up, and check again for cancellation on exit. * nptl/tst-cancel13.c, nptl/tst-cancelx13.c: Move to... * sysdeps/pthread/: ... here. * nptl/Makefile: Move corresponding references and rules to... * sysdeps/pthread/Makefile: ... here.
* htl: Simplify non-cancel path of __pthread_cond_timedwait_internalSamuel Thibault2020-06-241-20/+21
| | | | | | | | | Since __pthread_exit does not return, we do not need to indent the noncancel path * sysdeps/htl/pt-cond-timedwait.c (__pthread_cond_timedwait_internal): Move cancelled path before non-cancelled path, to avoid "else" indentation.
* htl: Fix cleanup support for IO lockingSamuel Thibault2020-06-142-0/+90
| | | | | | | | | | * sysdeps/htl/stdio-lock.h: New file, registers locking cleanup to htl. * sysdeps/htl/libc-lockP.h: Include <libc-lock.h>. (__libc_cleanup_region_start, __libc_cleanup_end, __libc_cleanup_region_end): Override macros from <libc-lock.h> with versions which register cleanup to htl. (__pthread_get_cleanup_stack): Make reference weak for skipping registration on in the static non-libpthread case.
* htl: Add noreturn attribute on __pthread_exit forwardSamuel Thibault2020-06-141-2/+2
| | | | | | | * sysdeps/htl/pthread-functions.h (__pthread_exit): Add noreturn attribute. (struct pthread_functions): Add noreturn attribute on ptr___pthread_exit field.
* htl: Fix registration of atfork handlers in modulesSamuel Thibault2020-06-072-2/+12
| | | | | | | | | | We really need modules to use their own pthread_atfork so that __dso_handle properly identifies them. * sysdeps/htl/pt-atfork.c (__pthread_atfork): Hide function. (pthread_atfork): Hide alias. * sysdeps/htl/old_pt-atfork.c (pthread_atfork): Rename macro to __pthread_atfork to fix building the compatibility alias.
* htl: Fix tls initialization for already-created threadsSamuel Thibault2020-06-071-0/+3
| | | | | | | | | * sysdeps/htl/pthreadP.h: Include <link.h> (__pthread_init_static_tls): New prototype. * htl/pt-alloc.c (__pthread_init_static_tls): New function. * sysdeps/mach/hurd/htl/pt-sysdep.c (_init_routine): Initialize tcb field of initial thread. Set GL(dl_init_static_tls) to &__pthread_init_static_tls.
* htl: Add sem_clockwait supportSamuel Thibault2020-06-072-3/+12
| | | | | | | | | | | | | * sysdeps/htl/sem-timedwait.c (__sem_timedwait_internal): Add clock_id parameter instead of hardcoding CLOCK_REALTIME. (__sem_clockwait): New function. (sem_clockwait): New weak alias. * sysdeps/htl/sem-wait.c (__sem_timedwait_internal): Update declaration. (__sem_wait): Update call to __sem_timedwait_internal. * htl/Versions (GLIBC_2.32): Add sem_clockwait. * sysdeps/mach/hurd/i386/libpthread.abilist (sem_clockwait): Add symbol. * nptl/Makefile (tests): Move tst-sem5 to... * sysdeps/pthread/Makefile (tests): ... here.
* htl: Fix gsync_wait symbol expositionSamuel Thibault2020-06-011-1/+1
| | | | | * sysdeps/htl/pt-cond-destroy.c (__pthread_cond_destroy): Call __gsync_wait instead of gsync_wait.
* htl: Make pthread_cond_destroy wait for threads to be wokenSamuel Thibault2020-06-013-5/+28
| | | | | | | | | | | | | | | | | | This allows to reuse the storage after calling pthread_cond_destroy. * sysdeps/htl/bits/types/struct___pthread_cond.h (__pthread_cond): Replace unused struct __pthread_condimpl *__impl field with unsigned int __wrefs. (__PTHREAD_COND_INITIALIZER): Update accordingly. * sysdeps/htl/pt-cond-timedwait.c (__pthread_cond_timedwait_internal): Register as waiter in __wrefs field. On unregistering, wake any pending pthread_cond_destroy. * sysdeps/htl/pt-cond-destroy.c (__pthread_cond_destroy): Register wake request in __wrefs. * nptl/Makefile (tests): Move tst-cond20 tst-cond21 to... * sysdeps/pthread/Makefile (tests): ... here. * nptl/tst-cond20.c nptl/tst-cond21.c: Move to... * sysdeps/pthread/tst-cond20.c sysdeps/pthread/tst-cond21.c: ... here.
* htl: Add clock variantsSamuel Thibault2020-05-268-12/+126
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * htl/pt-join.c (__pthread_join): Move implementation to... (__pthread_join_common): ... new function. Add try, timed and clock support. (__pthread_join): Reimplement on top of __pthread_join_common. (__pthread_tryjoin_np, __pthread_timedjoin_np, __pthread_clockjoin_np): Implement on top of __pthread_join_common. (pthread_tryjoin_np, pthread_timedjoin_np, pthread_clockjoin_np): New aliases. * hurd/hurdlock.c (__lll_abstimed_wait, __lll_abstimed_xwait, __lll_abstimed_lock): Check for supported clock. * sysdeps/htl/pt-cond-timedwait.c (__pthread_cond_timedwait_internal): Add clockid parameter and support it. (__pthread_cond_timedwait): Pass -1 as clockid. (__pthread_cond_clockwait): New function. (pthread_cond_clockwait): New alias. * sysdeps/htl/pt-cond-wait.c (__pthread_cond_timedwait_internal): Update prototype. (__pthread_cond_wait): Pass -1 as clockid. * sysdeps/htl/pt-rwlock-timedrdlock.c (__pthread_rwlock_timedrdlock_internal): Add clockid parameter, and support id. (__pthread_rwlock_clockrdlock): New function. (pthread_rwlock_clockrdlock): New alias. * sysdeps/htl/pt-rwlock-rdlock.c (__pthread_rwlock_timedrdlock_internal): Update prototype. (__pthread_rwlock_rdlock): Pass -1 as clockid. * sysdeps/htl/pt-rwlock-timedwrlock.c (__pthread_rwlock_timedwrlock_internal): Add clockid parameter, and support id. (__pthread_rwlock_clockwrlock): New function. (pthread_rwlock_clockwrlock): New alias. * sysdeps/htl/pt-rwlock-wrlock.c (__pthread_rwlock_timedwrlock_internal): Update prototype. (__pthread_rwlock_wrlock): Pass -1 as clockid. * sysdeps/mach/hurd/htl/pt-mutex-timedlock.c (__pthread_mutex_timedlock): Move implementation to (__pthread_mutex_clocklock): New function with additional clockid parameter and support it. (pthread_mutex_clocklock): New alias. (__pthread_mutex_timedlock): Reimplement on top of __pthread_mutex_clocklock. * sysdeps/htl/pthread.h (pthread_tryjoin_np, pthread_timedjoin_np, pthread_clockjoin_np, pthread_mutex_clocklock, pthread_cond_clockwait, pthread_rwlock_clockrdlock, pthread_rwlock_clockwrlock): New prototypes. * sysdeps/htl/pthreadP.h (__pthread_cond_clockwait): New prototype. * htl/Versions (GLIBC_2.32): Add pthread_cond_clockwait, pthread_mutex_clocklock, pthread_rwlock_clockrdlock, pthread_rwlock_clockwrlock, pthread_tryjoin_np, pthread_timedjoin_np, pthread_clockjoin_np. * sysdeps/mach/hurd/i386/libpthread.abilist (pthread_clockjoin_np, pthread_cond_clockwait, pthread_mutex_clocklock, pthread_rwlock_clockrdlock, pthread_rwlock_clockwrlock, pthread_timedjoin_np, pthread_tryjoin_np): New functions. * nptl/tst-abstime.c, nptl/tst-join10.c, nptl/tst-join11.c, nptl/tst-join12.c, nptl/tst-join13.c, nptl/tst-join14.c, nptl/tst-join2.c, nptl/tst-join3.c, nptl/tst-join8.c, nptl/tst-join9.c, nptl/tst-mutex-errorcheck.c, nptl/tst-pthread-mutexattr.c, nptl/tst-mutex11.c, nptl/tst-mutex5.c, nptl/tst-mutex7.c, nptl/tst-mutex7robus.c, nptl/tst-mutex9.c, nptl/tst-rwlock12.c, nptl/tst-rwlock14.c: Move to sysdeps/pthread. * sysdeps/pthread/tst-mutex8.c: Move back to nptl. * nptl/Makefile (tests): Move tst-mutex5, tst-mutex7, tst-mutex7robust, tst-mutex9, tst-mutex11, tst-rwlock12, tst-rwlock14, tst-join2, tst-join3, tst-join8, tst-join9 tst-join10, tst-join11, tst-join12, tst-join13, tst-join14, tst-abstime, tst-mutex-errorcheck, tst-pthread-mutexattr to ... * sysdeps/pthread/Makefile (tests): ... here.
* pthread: Move robust mutex tests from nptl to sysdeps/pthreadSamuel Thibault2020-02-161-0/+2
| | | | | tst-robust8.c prints some mutex internals for nptl debugging, this needed to be made conditioned by getting built with nptl.
* htl: Add missing functions and defines for robust mutexesSamuel Thibault2020-02-161-0/+1
|
* htl C11 threads: Avoid pthread_ symbols visibility in static librarySamuel Thibault2020-02-1028-28/+28
|
* hurd: Add __pthread_spin_wait and use itSamuel Thibault2020-02-1115-21/+21
| | | | | | | | | 900778283ac3 ("htl: make pthread_spin_lock really spin") made pthread_spin_lock really spin and not block, but the current users of __pthread_spin_lock were assuming that it blocks, i.e. they use it as a lightweight mutex fitting in just one int. __pthread_spin_wait provides that support back.
* htl: Fix barrier_wait with one threadSamuel Thibault2020-02-101-1/+3
|
* htl: Make sem_wait/sem_timedwait interruptibleSamuel Thibault2020-02-101-6/+4
|
* htl: Make sem_open return ENOSYSSamuel Thibault2020-02-101-1/+1
| | | | instead of EOPNOTSUPP, which is for sockets.
* htl: Add support for semaphore maximum valueSamuel Thibault2020-02-101-0/+7
|
* htl: Add support for libc cancellation pointsSamuel Thibault2020-02-101-0/+1
|
* htl: clean __pthread_get_cleanup_stack hidden protoSamuel Thibault2020-02-101-1/+1
|
* htl: support cancellation during pthread_onceSamuel Thibault2020-02-091-0/+10
|
* htl: make pthread_cond_destroy return EBUSY on waitersSamuel Thibault2020-02-091-1/+8
|
* htl: Report missing mutex lock on pthread_cond_*waitSamuel Thibault2020-02-091-0/+4
|
* htl: Fix default guard sizeSamuel Thibault2020-02-091-1/+1
| | | | | When it is not hardcoded by the architecture with PAGESIZE, we need to use the dynamic values from __vm_page_size.
* htl: Avoid check-installed-headers looking at inlinesSamuel Thibault2020-02-091-2/+4
|
* htl: Do not put spin_lock inlines in public headersSamuel Thibault2020-02-092-36/+36
| | | | | | They were not getting used anyway. Also do not make libsupport use them, it would make tests using it have to be made to link against libmachuser for gsync_wait.
* C11 threads: Move implementation to sysdeps/pthreadSamuel Thibault2020-02-093-1/+33
| | | | | | | so it gets shared by nptl and htl. Also add htl versions of thrd_current and thrd_yield. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
* htl: Add C11 threads types definitionsSamuel Thibault2020-02-091-0/+13
|
* htl: Make __PTHREAD_ONCE_INIT more flexibleSamuel Thibault2020-02-092-2/+2
| | | | | | by moving its (struct __pthread_once) cast into PTHREAD_ONCE_INIT. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
* htl: Add support for C11 threads behaviorSamuel Thibault2020-02-091-0/+3
| | | | | | | Essentially properly calling the thread function which returns an int instead of a void*. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
* htl: Add missing internal functions declarationsSamuel Thibault2020-02-091-0/+13
|
* htl: Rename _pthread_mutex_init/destroy to __pthread_mutex_init/destroySamuel Thibault2020-02-092-3/+4
|
* htl: Remove unused filesSamuel Thibault2020-02-0923-1099/+0
| | | | These have never been used.
* htl: Add internal version of __pthread_mutex_timedlockSamuel Thibault2020-01-132-1/+4
| | | | The C11 threads implementation will need it.
* htl: Avoid exposing unixoid functionsSamuel Thibault2020-01-131-1/+1
| | | | C11 threads should not expose them.
* htl: Add type sizes in bits/pthreadtypes-arch.h and check themSamuel Thibault2020-01-1311-0/+24
|
* htl: Add internal versions of functions used by C11 threadsSamuel Thibault2020-01-133-1/+5
| | | | | The C11 threads implementation needs to call pthread_join and pthread_key_delete without exposing them.
* htl: Add __errno_location and __h_errno_locationSamuel Thibault2020-01-041-0/+4
| | | | | | | | As explained on https://sourceware.org/ml/libc-alpha/2020-01/msg00049.html the presence of __errno_location in libpthread.so on GNU/Linux makes libpthread getting linked in for libstdc++. This aligns on that behavior, to avoid issues that only GNU/Hurd would get.