glibc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S

593 lines
12 KiB
ArmAsm
Raw Normal View History

/* Copyright (C) 2002-2004,2006-2007,2009,2010 Free Software Foundation, Inc.
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <sysdep.h>
#include <shlib-compat.h>
* sysdeps/unix/sysv/linux/powerpc/sem_post.c (__new_sem_post): Use __asm __volatile (__lll_acq_instr ::: "memory") instead of atomic_full_barrier. 2007-07-31 Jakub Jelinek <jakub@redhat.com> * allocatestack.c (stack_cache_lock): Change type to int. (get_cached_stack, allocate_stack, __deallocate_stack, __make_stacks_executable, __find_thread_by_id, __nptl_setxid, __pthread_init_static_tls, __wait_lookup_done): Add LLL_PRIVATE as second argument to lll_lock and lll_unlock macros on stack_cache_lock. * pthread_create.c (__find_in_stack_list): Likewise. (start_thread): Similarly with pd->lock. Use lll_robust_dead macro instead of lll_robust_mutex_dead, pass LLL_SHARED to it as second argument. * descr.h (struct pthread): Change lock and setxid_futex field type to int. * old_pthread_cond_broadcast.c (__pthread_cond_broadcast_2_0): Use LLL_LOCK_INITIALIZER instead of LLL_MUTEX_LOCK_INITIALIZER. * old_pthread_cond_signal.c (__pthread_cond_signal_2_0): Likewise. * old_pthread_cond_timedwait.c (__pthread_cond_timedwait_2_0): Likewise. * old_pthread_cond_wait.c (__pthread_cond_wait_2_0): Likewise. * pthread_cond_init.c (__pthread_cond_init): Likewise. * pthreadP.h (__attr_list_lock): Change type to int. * pthread_attr_init.c (__attr_list_lock): Likewise. * pthread_barrier_destroy.c (pthread_barrier_destroy): Pass ibarrier->private ^ FUTEX_PRIVATE_FLAG as second argument to lll_{,un}lock. * pthread_barrier_wait.c (pthread_barrier_wait): Likewise and also for lll_futex_{wake,wait}. * pthread_barrier_init.c (pthread_barrier_init): Make iattr a pointer to const. * pthread_cond_broadcast.c (__pthread_cond_broadcast): Pass LLL_SHARED as second argument to lll_{,un}lock. * pthread_cond_destroy.c (__pthread_cond_destroy): Likewise. * pthread_cond_signal.c (__pthread_cond_singal): Likewise. * pthread_cond_timedwait.c (__pthread_cond_timedwait): Likewise. * pthread_cond_wait.c (__condvar_cleanup, __pthread_cond_wait): Likewise. * pthread_getattr_np.c (pthread_getattr_np): Add LLL_PRIVATE as second argument to lll_{,un}lock macros on pd->lock. * pthread_getschedparam.c (__pthread_getschedparam): Likewise. * pthread_setschedparam.c (__pthread_setschedparam): Likewise. * pthread_setschedprio.c (pthread_setschedprio): Likewise. * tpp.c (__pthread_tpp_change_priority, __pthread_current_priority): Likewise. * sysdeps/pthread/createthread.c (do_clone, create_thread): Likewise. * pthread_once.c (once_lock): Change type to int. (__pthread_once): Pass LLL_PRIVATE as second argument to lll_{,un}lock macros on once_lock. * pthread_rwlock_rdlock.c (__pthread_rwlock_rdlock): Use lll_{,un}lock macros instead of lll_mutex_{,un}lock, pass rwlock->__data.__shared as second argument to them and similarly for lll_futex_w*. * pthread_rwlock_timedrdlock.c (pthread_rwlock_timedrdlock): Likewise. * pthread_rwlock_timedwrlock.c (pthread_rwlock_timedwrlock): Likewise. * pthread_rwlock_tryrdlock.c (__pthread_rwlock_tryrdlock): Likewise. * pthread_rwlock_trywrlock.c (__pthread_rwlock_trywrlock): Likewise. * pthread_rwlock_unlock.c (__pthread_rwlock_unlock): Likewise. * pthread_rwlock_wrlock.c (__pthread_rwlock_wrlock): Likewise. * sem_close.c (sem_close): Pass LLL_PRIVATE as second argument to lll_{,un}lock macros on __sem_mappings_lock. * sem_open.c (check_add_mapping): Likewise. (__sem_mappings_lock): Change type to int. * semaphoreP.h (__sem_mappings_lock): Likewise. * pthread_mutex_lock.c (LLL_MUTEX_LOCK, LLL_MUTEX_TRYLOCK, LLL_ROBUST_MUTEX_LOCK): Use lll_{,try,robust_}lock macros instead of lll_*mutex_*, pass LLL_SHARED as last argument. (__pthread_mutex_lock): Use lll_unlock instead of lll_mutex_unlock, pass LLL_SHARED as last argument. * sysdeps/unix/sysv/linux/pthread_mutex_cond_lock.c (LLL_MUTEX_LOCK, LLL_MUTEX_TRYLOCK, LLL_ROBUST_MUTEX_LOCK): Use lll_{cond_,cond_try,robust_cond}lock macros instead of lll_*mutex_*, pass LLL_SHARED as last argument. * pthread_mutex_timedlock.c (pthread_mutex_timedlock): Use lll_{timed,try,robust_timed,un}lock instead of lll_*mutex*, pass LLL_SHARED as last argument. * pthread_mutex_trylock.c (__pthread_mutex_trylock): Similarly. * pthread_mutex_unlock.c (__pthread_mutex_unlock_usercnt): Similarly. * sysdeps/pthread/bits/libc-lock.h (__libc_lock_lock, __libc_lock_lock_recursive, __libc_lock_unlock, __libc_lock_unlock_recursive): Pass LLL_PRIVATE as second argument to lll_{,un}lock. * sysdeps/pthread/bits/stdio-lock.h (_IO_lock_lock, _IO_lock_unlock): Likewise. * sysdeps/unix/sysv/linux/fork.c (__libc_fork): Don't use compound literal. * sysdeps/unix/sysv/linux/unregister-atfork.c (__unregister_atfork): Pass LLL_PRIVATE as second argument to lll_{,un}lock macros on __fork_lock. * sysdeps/unix/sysv/linux/register-atfork.c (__register_atfork, free_mem): Likewise. (__fork_lock): Change type to int. * sysdeps/unix/sysv/linux/fork.h (__fork_lock): Likewise. * sysdeps/unix/sysv/linux/sem_post.c (__new_sem_post): Pass isem->private ^ FUTEX_PRIVATE_FLAG as second argument to lll_futex_wake. * sysdeps/unix/sysv/linux/sem_timedwait.c (sem_timedwait): Likewise. * sysdeps/unix/sysv/linux/sem_wait.c (__new_sem_wait): Likewise. * sysdeps/unix/sysv/linux/lowlevellock.c (__lll_lock_wait_private): New function. (__lll_lock_wait, __lll_timedlock_wait): Add private argument and pass it through to lll_futex_*wait, only compile in when IS_IN_libpthread. * sysdeps/unix/sysv/linux/lowlevelrobustlock.c (__lll_robust_lock_wait, __lll_robust_timedlock_wait): Add private argument and pass it through to lll_futex_*wait. * sysdeps/unix/sysv/linux/alpha/lowlevellock.h: Renamed all lll_mutex_* resp. lll_robust_mutex_* macros to lll_* resp. lll_robust_*. Renamed all __lll_mutex_* resp. __lll_robust_mutex_* inline functions to __lll_* resp. __lll_robust_*. (LLL_MUTEX_LOCK_INITIALIZER): Remove. (lll_mutex_dead): Add private argument. (__lll_lock_wait_private): New prototype. (__lll_lock_wait, __lll_robust_lock_wait, __lll_lock_timedwait, __lll_robust_lock_timedwait): Add private argument to prototypes. (__lll_lock): Add private argument, if it is constant LLL_PRIVATE, call __lll_lock_wait_private, otherwise pass private to __lll_lock_wait. (__lll_robust_lock, __lll_cond_lock, __lll_timedlock, __lll_robust_timedlock): Add private argument, pass it to __lll_*wait functions. (__lll_unlock): Add private argument, if it is constant LLL_PRIVATE, call __lll_unlock_wake_private, otherwise pass private to __lll_unlock_wake. (__lll_robust_unlock): Add private argument, pass it to __lll_robust_unlock_wake. (lll_lock, lll_robust_lock, lll_cond_lock, lll_timedlock, lll_robust_timedlock, lll_unlock, lll_robust_unlock): Add private argument, pass it through to __lll_* inline function. (__lll_mutex_unlock_force, lll_mutex_unlock_force): Remove. (lll_lock_t): Remove. (__lll_cond_wait, __lll_cond_timedwait, __lll_cond_wake, __lll_cond_broadcast, lll_cond_wait, lll_cond_timedwait, lll_cond_wake, lll_cond_broadcast): Remove. * sysdeps/unix/sysv/linux/ia64/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/powerpc/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/s390/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/sparc/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/i386/lowlevellock.h: Allow including the header from assembler. Renamed all lll_mutex_* resp. lll_robust_mutex_* macros to lll_* resp. lll_robust_*. (LOCK, FUTEX_CMP_REQUEUE, FUTEX_WAKE_OP, FUTEX_OP_CLEAR_WAKE_IF_GT_ONE): Define. (LLL_MUTEX_LOCK_INITIALIZER, LLL_MUTEX_LOCK_INITIALIZER_LOCKED, LLL_MUTEX_LOCK_INITIALIZER_WAITERS): Remove. (__lll_mutex_lock_wait, __lll_mutex_timedlock_wait, __lll_mutex_unlock_wake, __lll_lock_wait, __lll_unlock_wake): Remove prototype. (__lll_trylock_asm, __lll_lock_asm_start, __lll_unlock_asm): Define. (lll_robust_trylock, lll_cond_trylock): Use LLL_LOCK_INITIALIZER* rather than LLL_MUTEX_LOCK_INITIALIZER* macros. (lll_trylock): Likewise, use __lll_trylock_asm, pass MULTIPLE_THREADS_OFFSET as another asm operand. (lll_lock): Add private argument, use __lll_lock_asm_start, pass MULTIPLE_THREADS_OFFSET as last asm operand, call __lll_lock_wait_private if private is constant LLL_PRIVATE, otherwise pass private as another argument to __lll_lock_wait. (lll_robust_lock, lll_cond_lock, lll_robust_cond_lock, lll_timedlock, lll_robust_timedlock): Add private argument, pass private as another argument to __lll_*lock_wait call. (lll_unlock): Add private argument, use __lll_unlock_asm, pass MULTIPLE_THREADS_OFFSET as another asm operand, call __lll_unlock_wake_private if private is constant LLL_PRIVATE, otherwise pass private as another argument to __lll_unlock_wake. (lll_robust_unlock): Add private argument, pass private as another argument to __lll_unlock_wake. (lll_robust_dead): Add private argument, use __lll_private_flag macro. (lll_islocked): Use LLL_LOCK_INITIALIZER instead of LLL_MUTEX_LOCK_INITIALIZER. (lll_lock_t): Remove. (LLL_LOCK_INITIALIZER_WAITERS): Define. (__lll_cond_wait, __lll_cond_timedwait, __lll_cond_wake, __lll_cond_broadcast, lll_cond_wait, lll_cond_timedwait, lll_cond_wake, lll_cond_broadcast): Remove. * sysdeps/unix/sysv/linux/x86_64/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S: Revert 2007-05-2{3,9} changes. * sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S: Include kernel-features.h and lowlevellock.h. (LOAD_PRIVATE_FUTEX_WAIT): Define. (LOAD_FUTEX_WAIT): Rewritten. (LOCK, SYS_gettimeofday, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_lock_wait_private, __lll_unlock_wake_private): New functions. (__lll_mutex_lock_wait): Rename to ... (__lll_lock_wait): ... this. Take futex addr from %edx instead of %ecx, %ecx is now private argument. Don't compile in for libc.so. (__lll_mutex_timedlock_wait): Rename to ... (__lll_timedlock_wait): ... this. Use __NR_gettimeofday. %esi contains private argument. Don't compile in for libc.so. (__lll_mutex_unlock_wake): Rename to ... (__lll_unlock_wake): ... this. %ecx contains private argument. Don't compile in for libc.so. (__lll_timedwait_tid): Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S: Include kernel-features.h and lowlevellock.h. (LOAD_FUTEX_WAIT): Define. (LOCK, SYS_gettimeofday, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_robust_mutex_lock_wait): Rename to ... (__lll_robust_lock_wait): ... this. Futex addr is now in %edx argument, %ecx argument contains private. Use LOAD_FUTEX_WAIT macro. (__lll_robust_mutex_timedlock_wait): Rename to ... (__lll_robust_timedlock_wait): ... this. Use __NR_gettimeofday. %esi argument contains private, use LOAD_FUTEX_WAIT macro. * sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (pthread_barrier_wait): Rename __lll_mutex_* to __lll_*, pass PRIVATE(%ebx) ^ LLL_SHARED as private argument in %ecx to __lll_lock_wait and __lll_unlock_wake, pass MUTEX(%ebx) address to __lll_lock_wait in %edx. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_REQUEUE, FUTEX_CMP_REQUEUE, EINVAL, LOCK): Don't define. (__pthread_cond_broadcast): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_WAKE_OP, FUTEX_OP_CLEAR_WAKE_IF_GT_ONE, EINVAL, LOCK): Don't define. (__pthread_cond_signal): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S: Include lowlevellock.h. (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_timedwait): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_wait, __condvar_w_cleanup): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_rdlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebx) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebx) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S: Include lowlevellock.h. (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebp) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebp) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S: Include lowlevellock.h. (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebp) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebp) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_unlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%edi) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%edi) in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebx) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebx) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. * sysdeps/unix/sysv/linux/i386/pthread_once.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG): Don't define. * sysdeps/unix/sysv/linux/i386/i486/sem_post.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAKE): Don't define. * sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S: Include lowlevellock.h. (LOCK, SYS_futex, SYS_gettimeofday, FUTEX_WAIT): Don't define. (sem_timedwait): Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/sem_trywait.S: Include lowlevellock.h. (LOCK): Don't define. * sysdeps/unix/sysv/linux/i386/i486/sem_wait.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT): Don't define. * sysdeps/unix/sysv/linux/powerpc/sem_post.c: Wake only when there are waiters. * sysdeps/unix/sysv/linux/x86_64/libc-lowlevellock.S: Revert 2007-05-2{3,9} changes. * sysdeps/unix/sysv/linux/x86_64/lowlevellock.S: Include kernel-features.h and lowlevellock.h. (LOAD_PRIVATE_FUTEX_WAIT): Define. (LOAD_FUTEX_WAIT): Rewritten. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_lock_wait_private, __lll_unlock_wake_private): New functions. (__lll_mutex_lock_wait): Rename to ... (__lll_lock_wait): ... this. %esi is now private argument. Don't compile in for libc.so. (__lll_mutex_timedlock_wait): Rename to ... (__lll_timedlock_wait): ... this. %esi contains private argument. Don't compile in for libc.so. (__lll_mutex_unlock_wake): Rename to ... (__lll_unlock_wake): ... this. %esi contains private argument. Don't compile in for libc.so. * sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S: Include kernel-features.h and lowlevellock.h. (LOAD_FUTEX_WAIT): Define. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_robust_mutex_lock_wait): Rename to ... (__lll_robust_lock_wait): ... this. %esi argument contains private. Use LOAD_FUTEX_WAIT macro. (__lll_robust_mutex_timedlock_wait): Rename to ... (__lll_robust_timedlock_wait): ... this. %esi argument contains private, use LOAD_FUTEX_WAIT macro. * sysdeps/unix/sysv/linux/x86_64/pthread_barrier_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (pthread_barrier_wait): Rename __lll_mutex_* to __lll_*, pass PRIVATE(%rdi) ^ LLL_SHARED as private argument in %esi to __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_REQUEUE, FUTEX_CMP_REQUEUE, EINVAL, LOCK): Don't define. (__pthread_cond_broadcast): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_WAKE_OP, FUTEX_OP_CLEAR_WAKE_IF_GT_ONE, EINVAL, LOCK): Don't define. (__pthread_cond_signal): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_timedwait): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_wait, __condvar_cleanup): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_rdlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_unlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_once.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_post.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAKE): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_trywait.S: Include lowlevellock.h. (LOCK): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_wait.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT): Don't define. * sysdeps/unix/sysv/linux/sparc/internaltypes.h: New file. * sysdeps/unix/sysv/linux/sparc/pthread_barrier_destroy.c: New file. * sysdeps/unix/sysv/linux/sparc/pthread_barrier_init.c: New file. * sysdeps/unix/sysv/linux/sparc/pthread_barrier_wait.c: New file. * sysdeps/unix/sysv/linux/sparc/sparc32/lowlevellock.c (__lll_lock_wait_private): New function. (__lll_lock_wait, __lll_timedlock_wait): Add private argument, pass it to lll_futex_*wait. Don't compile in for libc.so. * sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_init.c: Remove. * sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_wait.c (struct sparc_pthread_barrier): Remove. (pthread_barrier_wait): Use union sparc_pthread_barrier instead of struct sparc_pthread_barrier. Pass ibarrier->s.pshared ? LLL_SHARED : LLL_PRIVATE to lll_{,un}lock and lll_futex_wait macros. * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_init.c: Remove. * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_wait.c: Include sparc pthread_barrier_wait.c instead of generic one.
2007-08-01 06:47:26 +02:00
#include <lowlevellock.h>
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
#include <lowlevelcond.h>
#include <tcb-offsets.h>
2009-12-13 20:50:16 +01:00
#include <pthread-errnos.h>
#include <pthread-pi-defines.h>
#include <kernel-features.h>
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
.text
/* int pthread_cond_wait (pthread_cond_t *cond, pthread_mutex_t *mutex) */
.globl __pthread_cond_wait
.type __pthread_cond_wait, @function
.align 16
__pthread_cond_wait:
.LSTARTCODE:
cfi_startproc
#ifdef SHARED
cfi_personality(DW_EH_PE_pcrel | DW_EH_PE_sdata4 | DW_EH_PE_indirect,
DW.ref.__gcc_personality_v0)
cfi_lsda(DW_EH_PE_pcrel | DW_EH_PE_sdata4, .LexceptSTART)
#else
cfi_personality(DW_EH_PE_udata4, __gcc_personality_v0)
cfi_lsda(DW_EH_PE_udata4, .LexceptSTART)
#endif
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
2009-12-13 20:50:16 +01:00
pushl %ebp
cfi_adjust_cfa_offset(4)
cfi_rel_offset(%ebp, 0)
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
pushl %edi
cfi_adjust_cfa_offset(4)
cfi_rel_offset(%edi, 0)
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
pushl %esi
cfi_adjust_cfa_offset(4)
cfi_rel_offset(%esi, 0)
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
pushl %ebx
cfi_adjust_cfa_offset(4)
cfi_rel_offset(%ebx, 0)
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
xorl %esi, %esi
2009-12-13 20:50:16 +01:00
movl 20(%esp), %ebx
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
/* Get internal lock. */
movl $1, %edx
xorl %eax, %eax
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
LOCK
#if cond_lock == 0
cmpxchgl %edx, (%ebx)
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
#else
cmpxchgl %edx, cond_lock(%ebx)
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
#endif
Update. * sysdeps/unix/sysv/linux/x86_64/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/x86_64/lowlevellock.S: Likewise. * sysdeps/unix/sysv/linux/x86_64/lowlevelmutex.S: Removed. * sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S: Adjust for new mutex implementation. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S: Likewise. * sysdeps/unix/sysv/linux/x86_64/pthread_barrier_wait.S: Likewise * sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S: Likewise. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S: Likewise. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S: Likewise. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S: Likewise. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S: Likewise. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S: Likewise. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S: Likewise. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S: Likewise. Don't use requeue. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S: Likewise.
2003-09-22 06:41:12 +02:00
jnz 1f
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
/* Store the reference to the mutex. If there is already a
different value in there this is a bad user bug. */
2: cmpl $-1, dep_mutex(%ebx)
2009-12-13 20:50:16 +01:00
movl 24(%esp), %eax
je 15f
movl %eax, dep_mutex(%ebx)
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
/* Unlock the mutex. */
15: xorl %edx, %edx
Update. 2003-06-22 Ulrich Drepper <drepper@redhat.com> * pthreadP.h (__pthread_mutex_init_internal): Mark hidden. (__pthread_mutex_lock_internal): Likewise. (__pthread_mutex_unlock_internal): Likewise. (__pthread_mutex_unlock_usercnt): Declare. * pthread_mutex_destroy.c: Always fail if used in any way. * pthread_mutex_init.c: Update comment. * pthread_mutex_lock.c: If NO_INCR is not defined adjust __nusers. * pthread_mutex_timedlock.c: Adjust __nusers. * pthread_mutex_trylock.c: Adjust __nusers. * pthread_mutex_unlock.c: Old code is in __pthread_mutex_unlock_usercnt and public interfaces are wrapper with pass additional parameter. __pthread_mutex_unlock_usercnt does not adjust __nusers if second parameter zero. * tst-mutex8.c: New file. * Makefile (tests): Add tst-mutex8. * sysdeps/pthread/pthread_cond_timedwait.c: Call __pthread_mutex_unlock_usercnt. * sysdeps/pthread/pthread_cond_wait.c: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: Likewise. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S: Likewise. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S: Likewise. * sysdeps/unix/sysv/linux/pthread_mutex_cond_lock.c: Define NO_INCR. * sysdeps/unix/sysv/linux/i386/bits/pthreadtypes.h (pthread_mutex_t): Add __nusers. * sysdeps/unix/sysv/linux/ia64/bits/pthreadtypes.h: Likewise. * sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h: Likewise. * sysdeps/unix/sysv/linux/s390/bits/pthreadtypes.h: Likewise. * sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h: Likewise. * sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h: Likewise. * pthread_mutex_lock.c: Don't store THREAD_ID in __owner, use TID. * pthread_mutex_timedlock.c: Likewise. * pthread_mutex_trylock.c: Adjust __nusers. * pthread_mutex_unlock.c: Compare with TID not THREAD_ID. * tst-mutex9.c: New file. * Makefile (tests): Add tst-mutex9. * sysdeps/i386/tls.h: Remove THREAD_ID definition. * sysdeps/ia64/tls.h: Likewise. * sysdeps/powerpc/tls.h: Likewise. * sysdeps/s390/tls.h: Likewise. * sysdeps/sh/tls.h: Likewise. * sysdeps/x86_64/tls.h: Likewise. * sysdeps/unix/sysv/linux/i386/bits/pthreadtypes.h (pthread_mutex_t): Change type of __owner. * sysdeps/unix/sysv/linux/ia64/bits/pthreadtypes.h: Likewise. * sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h: Likewise. * sysdeps/unix/sysv/linux/s390/bits/pthreadtypes.h: Likewise. * sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h: Likewise. * sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h: Likewise.
2003-06-23 01:55:27 +02:00
call __pthread_mutex_unlock_usercnt
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
testl %eax, %eax
jne 12f
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
addl $1, total_seq(%ebx)
adcl $0, total_seq+4(%ebx)
addl $1, cond_futex(%ebx)
addl $(1 << nwaiters_shift), cond_nwaiters(%ebx)
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
2009-12-13 20:50:16 +01:00
#define FRAME_SIZE 20
subl $FRAME_SIZE, %esp
cfi_adjust_cfa_offset(FRAME_SIZE)
cfi_remember_state
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
/* Get and store current wakeup_seq value. */
movl wakeup_seq(%ebx), %edi
movl wakeup_seq+4(%ebx), %edx
movl broadcast_seq(%ebx), %eax
movl %edi, 4(%esp)
movl %edx, 8(%esp)
movl %eax, 12(%esp)
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
2009-12-13 20:50:16 +01:00
/* Reset the pi-requeued flag. */
8: movl $0, 16(%esp)
2009-12-13 20:52:28 +01:00
movl cond_futex(%ebx), %ebp
2009-12-13 20:51:54 +01:00
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
/* Unlock. */
LOCK
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
#if cond_lock == 0
subl $1, (%ebx)
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
#else
subl $1, cond_lock(%ebx)
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
#endif
jne 3f
.LcleanupSTART:
4: call __pthread_enable_asynccancel
movl %eax, (%esp)
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
xorl %ecx, %ecx
cmpl $-1, dep_mutex(%ebx)
sete %cl
2009-12-13 20:52:28 +01:00
je 18f
2009-12-13 20:50:16 +01:00
movl dep_mutex(%ebx), %edi
/* Requeue to a non-robust PI mutex if the PI bit is set and
the robust bit is not set. */
movl MUTEX_KIND(%edi), %eax
andl $(ROBUST_BIT|PI_BIT), %eax
cmpl $PI_BIT, %eax
jne 18f
2009-12-13 20:51:54 +01:00
2009-12-13 20:50:16 +01:00
movl $(FUTEX_WAIT_REQUEUE_PI|FUTEX_PRIVATE_FLAG), %ecx
movl %ebp, %edx
xorl %esi, %esi
addl $cond_futex, %ebx
movl $SYS_futex, %eax
ENTER_KERNEL
subl $cond_futex, %ebx
/* Set the pi-requeued flag only if the kernel has returned 0. The
kernel does not hold the mutex on error. */
cmpl $0, %eax
sete 16(%esp)
je 19f
/* Normal and PI futexes dont mix. Use normal futex functions only
if the kernel does not support the PI futex functions. */
cmpl $-ENOSYS, %eax
jne 19f
xorl %ecx, %ecx
2009-12-13 20:51:54 +01:00
2009-12-13 20:50:16 +01:00
18: subl $1, %ecx
#ifdef __ASSUME_PRIVATE_FUTEX
andl $FUTEX_PRIVATE_FLAG, %ecx
#else
andl %gs:PRIVATE_FUTEX, %ecx
#endif
#if FUTEX_WAIT != 0
addl $FUTEX_WAIT, %ecx
#endif
2009-12-13 20:50:16 +01:00
movl %ebp, %edx
addl $cond_futex, %ebx
.Ladd_cond_futex:
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
movl $SYS_futex, %eax
ENTER_KERNEL
subl $cond_futex, %ebx
.Lsub_cond_futex:
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
2009-12-13 20:50:16 +01:00
19: movl (%esp), %eax
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
call __pthread_disable_asynccancel
.LcleanupEND:
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
/* Lock. */
movl $1, %edx
xorl %eax, %eax
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
LOCK
#if cond_lock == 0
cmpxchgl %edx, (%ebx)
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
#else
cmpxchgl %edx, cond_lock(%ebx)
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
#endif
Update. * sysdeps/unix/sysv/linux/x86_64/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/x86_64/lowlevellock.S: Likewise. * sysdeps/unix/sysv/linux/x86_64/lowlevelmutex.S: Removed. * sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S: Adjust for new mutex implementation. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S: Likewise. * sysdeps/unix/sysv/linux/x86_64/pthread_barrier_wait.S: Likewise * sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S: Likewise. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S: Likewise. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S: Likewise. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S: Likewise. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S: Likewise. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S: Likewise. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S: Likewise. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S: Likewise. Don't use requeue. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S: Likewise.
2003-09-22 06:41:12 +02:00
jnz 5f
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
6: movl broadcast_seq(%ebx), %eax
cmpl 12(%esp), %eax
jne 16f
movl woken_seq(%ebx), %eax
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
movl woken_seq+4(%ebx), %ecx
movl wakeup_seq(%ebx), %edi
movl wakeup_seq+4(%ebx), %edx
cmpl 8(%esp), %edx
jne 7f
cmpl 4(%esp), %edi
je 8b
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
7: cmpl %ecx, %edx
jne 9f
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
cmp %eax, %edi
je 8b
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
9: addl $1, woken_seq(%ebx)
adcl $0, woken_seq+4(%ebx)
/* Unlock */
16: subl $(1 << nwaiters_shift), cond_nwaiters(%ebx)
/* Wake up a thread which wants to destroy the condvar object. */
movl total_seq(%ebx), %eax
andl total_seq+4(%ebx), %eax
cmpl $0xffffffff, %eax
jne 17f
movl cond_nwaiters(%ebx), %eax
andl $~((1 << nwaiters_shift) - 1), %eax
jne 17f
addl $cond_nwaiters, %ebx
movl $SYS_futex, %eax
#if FUTEX_PRIVATE_FLAG > 255
xorl %ecx, %ecx
#endif
cmpl $-1, dep_mutex-cond_nwaiters(%ebx)
sete %cl
subl $1, %ecx
#ifdef __ASSUME_PRIVATE_FUTEX
andl $FUTEX_PRIVATE_FLAG, %ecx
#else
andl %gs:PRIVATE_FUTEX, %ecx
#endif
addl $FUTEX_WAKE, %ecx
movl $1, %edx
ENTER_KERNEL
subl $cond_nwaiters, %ebx
17: LOCK
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
#if cond_lock == 0
subl $1, (%ebx)
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
#else
subl $1, cond_lock(%ebx)
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
#endif
jne 10f
2009-12-13 20:50:16 +01:00
/* With requeue_pi, the mutex lock is held in the kernel. */
11: movl 24+FRAME_SIZE(%esp), %eax
2009-12-13 20:50:16 +01:00
movl 16(%esp), %ecx
testl %ecx, %ecx
jnz 21f
2009-12-13 20:50:16 +01:00
call __pthread_mutex_cond_lock
2009-12-13 20:50:16 +01:00
20: addl $FRAME_SIZE, %esp
cfi_adjust_cfa_offset(-FRAME_SIZE);
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
14: popl %ebx
cfi_adjust_cfa_offset(-4)
cfi_restore(%ebx)
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
popl %esi
cfi_adjust_cfa_offset(-4)
cfi_restore(%esi)
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
popl %edi
cfi_adjust_cfa_offset(-4)
cfi_restore(%edi)
2009-12-13 20:50:16 +01:00
popl %ebp
cfi_adjust_cfa_offset(-4)
cfi_restore(%ebp)
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
/* We return the result of the mutex_lock operation. */
ret
cfi_restore_state
2009-12-13 20:50:16 +01:00
21: call __pthread_mutex_cond_lock_adjust
xorl %eax, %eax
jmp 20b
cfi_adjust_cfa_offset(-FRAME_SIZE);
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
/* Initial locking failed. */
1:
#if cond_lock == 0
* sysdeps/unix/sysv/linux/powerpc/sem_post.c (__new_sem_post): Use __asm __volatile (__lll_acq_instr ::: "memory") instead of atomic_full_barrier. 2007-07-31 Jakub Jelinek <jakub@redhat.com> * allocatestack.c (stack_cache_lock): Change type to int. (get_cached_stack, allocate_stack, __deallocate_stack, __make_stacks_executable, __find_thread_by_id, __nptl_setxid, __pthread_init_static_tls, __wait_lookup_done): Add LLL_PRIVATE as second argument to lll_lock and lll_unlock macros on stack_cache_lock. * pthread_create.c (__find_in_stack_list): Likewise. (start_thread): Similarly with pd->lock. Use lll_robust_dead macro instead of lll_robust_mutex_dead, pass LLL_SHARED to it as second argument. * descr.h (struct pthread): Change lock and setxid_futex field type to int. * old_pthread_cond_broadcast.c (__pthread_cond_broadcast_2_0): Use LLL_LOCK_INITIALIZER instead of LLL_MUTEX_LOCK_INITIALIZER. * old_pthread_cond_signal.c (__pthread_cond_signal_2_0): Likewise. * old_pthread_cond_timedwait.c (__pthread_cond_timedwait_2_0): Likewise. * old_pthread_cond_wait.c (__pthread_cond_wait_2_0): Likewise. * pthread_cond_init.c (__pthread_cond_init): Likewise. * pthreadP.h (__attr_list_lock): Change type to int. * pthread_attr_init.c (__attr_list_lock): Likewise. * pthread_barrier_destroy.c (pthread_barrier_destroy): Pass ibarrier->private ^ FUTEX_PRIVATE_FLAG as second argument to lll_{,un}lock. * pthread_barrier_wait.c (pthread_barrier_wait): Likewise and also for lll_futex_{wake,wait}. * pthread_barrier_init.c (pthread_barrier_init): Make iattr a pointer to const. * pthread_cond_broadcast.c (__pthread_cond_broadcast): Pass LLL_SHARED as second argument to lll_{,un}lock. * pthread_cond_destroy.c (__pthread_cond_destroy): Likewise. * pthread_cond_signal.c (__pthread_cond_singal): Likewise. * pthread_cond_timedwait.c (__pthread_cond_timedwait): Likewise. * pthread_cond_wait.c (__condvar_cleanup, __pthread_cond_wait): Likewise. * pthread_getattr_np.c (pthread_getattr_np): Add LLL_PRIVATE as second argument to lll_{,un}lock macros on pd->lock. * pthread_getschedparam.c (__pthread_getschedparam): Likewise. * pthread_setschedparam.c (__pthread_setschedparam): Likewise. * pthread_setschedprio.c (pthread_setschedprio): Likewise. * tpp.c (__pthread_tpp_change_priority, __pthread_current_priority): Likewise. * sysdeps/pthread/createthread.c (do_clone, create_thread): Likewise. * pthread_once.c (once_lock): Change type to int. (__pthread_once): Pass LLL_PRIVATE as second argument to lll_{,un}lock macros on once_lock. * pthread_rwlock_rdlock.c (__pthread_rwlock_rdlock): Use lll_{,un}lock macros instead of lll_mutex_{,un}lock, pass rwlock->__data.__shared as second argument to them and similarly for lll_futex_w*. * pthread_rwlock_timedrdlock.c (pthread_rwlock_timedrdlock): Likewise. * pthread_rwlock_timedwrlock.c (pthread_rwlock_timedwrlock): Likewise. * pthread_rwlock_tryrdlock.c (__pthread_rwlock_tryrdlock): Likewise. * pthread_rwlock_trywrlock.c (__pthread_rwlock_trywrlock): Likewise. * pthread_rwlock_unlock.c (__pthread_rwlock_unlock): Likewise. * pthread_rwlock_wrlock.c (__pthread_rwlock_wrlock): Likewise. * sem_close.c (sem_close): Pass LLL_PRIVATE as second argument to lll_{,un}lock macros on __sem_mappings_lock. * sem_open.c (check_add_mapping): Likewise. (__sem_mappings_lock): Change type to int. * semaphoreP.h (__sem_mappings_lock): Likewise. * pthread_mutex_lock.c (LLL_MUTEX_LOCK, LLL_MUTEX_TRYLOCK, LLL_ROBUST_MUTEX_LOCK): Use lll_{,try,robust_}lock macros instead of lll_*mutex_*, pass LLL_SHARED as last argument. (__pthread_mutex_lock): Use lll_unlock instead of lll_mutex_unlock, pass LLL_SHARED as last argument. * sysdeps/unix/sysv/linux/pthread_mutex_cond_lock.c (LLL_MUTEX_LOCK, LLL_MUTEX_TRYLOCK, LLL_ROBUST_MUTEX_LOCK): Use lll_{cond_,cond_try,robust_cond}lock macros instead of lll_*mutex_*, pass LLL_SHARED as last argument. * pthread_mutex_timedlock.c (pthread_mutex_timedlock): Use lll_{timed,try,robust_timed,un}lock instead of lll_*mutex*, pass LLL_SHARED as last argument. * pthread_mutex_trylock.c (__pthread_mutex_trylock): Similarly. * pthread_mutex_unlock.c (__pthread_mutex_unlock_usercnt): Similarly. * sysdeps/pthread/bits/libc-lock.h (__libc_lock_lock, __libc_lock_lock_recursive, __libc_lock_unlock, __libc_lock_unlock_recursive): Pass LLL_PRIVATE as second argument to lll_{,un}lock. * sysdeps/pthread/bits/stdio-lock.h (_IO_lock_lock, _IO_lock_unlock): Likewise. * sysdeps/unix/sysv/linux/fork.c (__libc_fork): Don't use compound literal. * sysdeps/unix/sysv/linux/unregister-atfork.c (__unregister_atfork): Pass LLL_PRIVATE as second argument to lll_{,un}lock macros on __fork_lock. * sysdeps/unix/sysv/linux/register-atfork.c (__register_atfork, free_mem): Likewise. (__fork_lock): Change type to int. * sysdeps/unix/sysv/linux/fork.h (__fork_lock): Likewise. * sysdeps/unix/sysv/linux/sem_post.c (__new_sem_post): Pass isem->private ^ FUTEX_PRIVATE_FLAG as second argument to lll_futex_wake. * sysdeps/unix/sysv/linux/sem_timedwait.c (sem_timedwait): Likewise. * sysdeps/unix/sysv/linux/sem_wait.c (__new_sem_wait): Likewise. * sysdeps/unix/sysv/linux/lowlevellock.c (__lll_lock_wait_private): New function. (__lll_lock_wait, __lll_timedlock_wait): Add private argument and pass it through to lll_futex_*wait, only compile in when IS_IN_libpthread. * sysdeps/unix/sysv/linux/lowlevelrobustlock.c (__lll_robust_lock_wait, __lll_robust_timedlock_wait): Add private argument and pass it through to lll_futex_*wait. * sysdeps/unix/sysv/linux/alpha/lowlevellock.h: Renamed all lll_mutex_* resp. lll_robust_mutex_* macros to lll_* resp. lll_robust_*. Renamed all __lll_mutex_* resp. __lll_robust_mutex_* inline functions to __lll_* resp. __lll_robust_*. (LLL_MUTEX_LOCK_INITIALIZER): Remove. (lll_mutex_dead): Add private argument. (__lll_lock_wait_private): New prototype. (__lll_lock_wait, __lll_robust_lock_wait, __lll_lock_timedwait, __lll_robust_lock_timedwait): Add private argument to prototypes. (__lll_lock): Add private argument, if it is constant LLL_PRIVATE, call __lll_lock_wait_private, otherwise pass private to __lll_lock_wait. (__lll_robust_lock, __lll_cond_lock, __lll_timedlock, __lll_robust_timedlock): Add private argument, pass it to __lll_*wait functions. (__lll_unlock): Add private argument, if it is constant LLL_PRIVATE, call __lll_unlock_wake_private, otherwise pass private to __lll_unlock_wake. (__lll_robust_unlock): Add private argument, pass it to __lll_robust_unlock_wake. (lll_lock, lll_robust_lock, lll_cond_lock, lll_timedlock, lll_robust_timedlock, lll_unlock, lll_robust_unlock): Add private argument, pass it through to __lll_* inline function. (__lll_mutex_unlock_force, lll_mutex_unlock_force): Remove. (lll_lock_t): Remove. (__lll_cond_wait, __lll_cond_timedwait, __lll_cond_wake, __lll_cond_broadcast, lll_cond_wait, lll_cond_timedwait, lll_cond_wake, lll_cond_broadcast): Remove. * sysdeps/unix/sysv/linux/ia64/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/powerpc/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/s390/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/sparc/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/i386/lowlevellock.h: Allow including the header from assembler. Renamed all lll_mutex_* resp. lll_robust_mutex_* macros to lll_* resp. lll_robust_*. (LOCK, FUTEX_CMP_REQUEUE, FUTEX_WAKE_OP, FUTEX_OP_CLEAR_WAKE_IF_GT_ONE): Define. (LLL_MUTEX_LOCK_INITIALIZER, LLL_MUTEX_LOCK_INITIALIZER_LOCKED, LLL_MUTEX_LOCK_INITIALIZER_WAITERS): Remove. (__lll_mutex_lock_wait, __lll_mutex_timedlock_wait, __lll_mutex_unlock_wake, __lll_lock_wait, __lll_unlock_wake): Remove prototype. (__lll_trylock_asm, __lll_lock_asm_start, __lll_unlock_asm): Define. (lll_robust_trylock, lll_cond_trylock): Use LLL_LOCK_INITIALIZER* rather than LLL_MUTEX_LOCK_INITIALIZER* macros. (lll_trylock): Likewise, use __lll_trylock_asm, pass MULTIPLE_THREADS_OFFSET as another asm operand. (lll_lock): Add private argument, use __lll_lock_asm_start, pass MULTIPLE_THREADS_OFFSET as last asm operand, call __lll_lock_wait_private if private is constant LLL_PRIVATE, otherwise pass private as another argument to __lll_lock_wait. (lll_robust_lock, lll_cond_lock, lll_robust_cond_lock, lll_timedlock, lll_robust_timedlock): Add private argument, pass private as another argument to __lll_*lock_wait call. (lll_unlock): Add private argument, use __lll_unlock_asm, pass MULTIPLE_THREADS_OFFSET as another asm operand, call __lll_unlock_wake_private if private is constant LLL_PRIVATE, otherwise pass private as another argument to __lll_unlock_wake. (lll_robust_unlock): Add private argument, pass private as another argument to __lll_unlock_wake. (lll_robust_dead): Add private argument, use __lll_private_flag macro. (lll_islocked): Use LLL_LOCK_INITIALIZER instead of LLL_MUTEX_LOCK_INITIALIZER. (lll_lock_t): Remove. (LLL_LOCK_INITIALIZER_WAITERS): Define. (__lll_cond_wait, __lll_cond_timedwait, __lll_cond_wake, __lll_cond_broadcast, lll_cond_wait, lll_cond_timedwait, lll_cond_wake, lll_cond_broadcast): Remove. * sysdeps/unix/sysv/linux/x86_64/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S: Revert 2007-05-2{3,9} changes. * sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S: Include kernel-features.h and lowlevellock.h. (LOAD_PRIVATE_FUTEX_WAIT): Define. (LOAD_FUTEX_WAIT): Rewritten. (LOCK, SYS_gettimeofday, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_lock_wait_private, __lll_unlock_wake_private): New functions. (__lll_mutex_lock_wait): Rename to ... (__lll_lock_wait): ... this. Take futex addr from %edx instead of %ecx, %ecx is now private argument. Don't compile in for libc.so. (__lll_mutex_timedlock_wait): Rename to ... (__lll_timedlock_wait): ... this. Use __NR_gettimeofday. %esi contains private argument. Don't compile in for libc.so. (__lll_mutex_unlock_wake): Rename to ... (__lll_unlock_wake): ... this. %ecx contains private argument. Don't compile in for libc.so. (__lll_timedwait_tid): Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S: Include kernel-features.h and lowlevellock.h. (LOAD_FUTEX_WAIT): Define. (LOCK, SYS_gettimeofday, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_robust_mutex_lock_wait): Rename to ... (__lll_robust_lock_wait): ... this. Futex addr is now in %edx argument, %ecx argument contains private. Use LOAD_FUTEX_WAIT macro. (__lll_robust_mutex_timedlock_wait): Rename to ... (__lll_robust_timedlock_wait): ... this. Use __NR_gettimeofday. %esi argument contains private, use LOAD_FUTEX_WAIT macro. * sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (pthread_barrier_wait): Rename __lll_mutex_* to __lll_*, pass PRIVATE(%ebx) ^ LLL_SHARED as private argument in %ecx to __lll_lock_wait and __lll_unlock_wake, pass MUTEX(%ebx) address to __lll_lock_wait in %edx. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_REQUEUE, FUTEX_CMP_REQUEUE, EINVAL, LOCK): Don't define. (__pthread_cond_broadcast): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_WAKE_OP, FUTEX_OP_CLEAR_WAKE_IF_GT_ONE, EINVAL, LOCK): Don't define. (__pthread_cond_signal): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S: Include lowlevellock.h. (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_timedwait): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_wait, __condvar_w_cleanup): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_rdlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebx) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebx) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S: Include lowlevellock.h. (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebp) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebp) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S: Include lowlevellock.h. (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebp) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebp) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_unlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%edi) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%edi) in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebx) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebx) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. * sysdeps/unix/sysv/linux/i386/pthread_once.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG): Don't define. * sysdeps/unix/sysv/linux/i386/i486/sem_post.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAKE): Don't define. * sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S: Include lowlevellock.h. (LOCK, SYS_futex, SYS_gettimeofday, FUTEX_WAIT): Don't define. (sem_timedwait): Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/sem_trywait.S: Include lowlevellock.h. (LOCK): Don't define. * sysdeps/unix/sysv/linux/i386/i486/sem_wait.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT): Don't define. * sysdeps/unix/sysv/linux/powerpc/sem_post.c: Wake only when there are waiters. * sysdeps/unix/sysv/linux/x86_64/libc-lowlevellock.S: Revert 2007-05-2{3,9} changes. * sysdeps/unix/sysv/linux/x86_64/lowlevellock.S: Include kernel-features.h and lowlevellock.h. (LOAD_PRIVATE_FUTEX_WAIT): Define. (LOAD_FUTEX_WAIT): Rewritten. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_lock_wait_private, __lll_unlock_wake_private): New functions. (__lll_mutex_lock_wait): Rename to ... (__lll_lock_wait): ... this. %esi is now private argument. Don't compile in for libc.so. (__lll_mutex_timedlock_wait): Rename to ... (__lll_timedlock_wait): ... this. %esi contains private argument. Don't compile in for libc.so. (__lll_mutex_unlock_wake): Rename to ... (__lll_unlock_wake): ... this. %esi contains private argument. Don't compile in for libc.so. * sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S: Include kernel-features.h and lowlevellock.h. (LOAD_FUTEX_WAIT): Define. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_robust_mutex_lock_wait): Rename to ... (__lll_robust_lock_wait): ... this. %esi argument contains private. Use LOAD_FUTEX_WAIT macro. (__lll_robust_mutex_timedlock_wait): Rename to ... (__lll_robust_timedlock_wait): ... this. %esi argument contains private, use LOAD_FUTEX_WAIT macro. * sysdeps/unix/sysv/linux/x86_64/pthread_barrier_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (pthread_barrier_wait): Rename __lll_mutex_* to __lll_*, pass PRIVATE(%rdi) ^ LLL_SHARED as private argument in %esi to __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_REQUEUE, FUTEX_CMP_REQUEUE, EINVAL, LOCK): Don't define. (__pthread_cond_broadcast): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_WAKE_OP, FUTEX_OP_CLEAR_WAKE_IF_GT_ONE, EINVAL, LOCK): Don't define. (__pthread_cond_signal): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_timedwait): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_wait, __condvar_cleanup): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_rdlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_unlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_once.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_post.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAKE): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_trywait.S: Include lowlevellock.h. (LOCK): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_wait.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT): Don't define. * sysdeps/unix/sysv/linux/sparc/internaltypes.h: New file. * sysdeps/unix/sysv/linux/sparc/pthread_barrier_destroy.c: New file. * sysdeps/unix/sysv/linux/sparc/pthread_barrier_init.c: New file. * sysdeps/unix/sysv/linux/sparc/pthread_barrier_wait.c: New file. * sysdeps/unix/sysv/linux/sparc/sparc32/lowlevellock.c (__lll_lock_wait_private): New function. (__lll_lock_wait, __lll_timedlock_wait): Add private argument, pass it to lll_futex_*wait. Don't compile in for libc.so. * sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_init.c: Remove. * sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_wait.c (struct sparc_pthread_barrier): Remove. (pthread_barrier_wait): Use union sparc_pthread_barrier instead of struct sparc_pthread_barrier. Pass ibarrier->s.pshared ? LLL_SHARED : LLL_PRIVATE to lll_{,un}lock and lll_futex_wait macros. * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_init.c: Remove. * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_wait.c: Include sparc pthread_barrier_wait.c instead of generic one.
2007-08-01 06:47:26 +02:00
movl %ebx, %edx
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
#else
* sysdeps/unix/sysv/linux/powerpc/sem_post.c (__new_sem_post): Use __asm __volatile (__lll_acq_instr ::: "memory") instead of atomic_full_barrier. 2007-07-31 Jakub Jelinek <jakub@redhat.com> * allocatestack.c (stack_cache_lock): Change type to int. (get_cached_stack, allocate_stack, __deallocate_stack, __make_stacks_executable, __find_thread_by_id, __nptl_setxid, __pthread_init_static_tls, __wait_lookup_done): Add LLL_PRIVATE as second argument to lll_lock and lll_unlock macros on stack_cache_lock. * pthread_create.c (__find_in_stack_list): Likewise. (start_thread): Similarly with pd->lock. Use lll_robust_dead macro instead of lll_robust_mutex_dead, pass LLL_SHARED to it as second argument. * descr.h (struct pthread): Change lock and setxid_futex field type to int. * old_pthread_cond_broadcast.c (__pthread_cond_broadcast_2_0): Use LLL_LOCK_INITIALIZER instead of LLL_MUTEX_LOCK_INITIALIZER. * old_pthread_cond_signal.c (__pthread_cond_signal_2_0): Likewise. * old_pthread_cond_timedwait.c (__pthread_cond_timedwait_2_0): Likewise. * old_pthread_cond_wait.c (__pthread_cond_wait_2_0): Likewise. * pthread_cond_init.c (__pthread_cond_init): Likewise. * pthreadP.h (__attr_list_lock): Change type to int. * pthread_attr_init.c (__attr_list_lock): Likewise. * pthread_barrier_destroy.c (pthread_barrier_destroy): Pass ibarrier->private ^ FUTEX_PRIVATE_FLAG as second argument to lll_{,un}lock. * pthread_barrier_wait.c (pthread_barrier_wait): Likewise and also for lll_futex_{wake,wait}. * pthread_barrier_init.c (pthread_barrier_init): Make iattr a pointer to const. * pthread_cond_broadcast.c (__pthread_cond_broadcast): Pass LLL_SHARED as second argument to lll_{,un}lock. * pthread_cond_destroy.c (__pthread_cond_destroy): Likewise. * pthread_cond_signal.c (__pthread_cond_singal): Likewise. * pthread_cond_timedwait.c (__pthread_cond_timedwait): Likewise. * pthread_cond_wait.c (__condvar_cleanup, __pthread_cond_wait): Likewise. * pthread_getattr_np.c (pthread_getattr_np): Add LLL_PRIVATE as second argument to lll_{,un}lock macros on pd->lock. * pthread_getschedparam.c (__pthread_getschedparam): Likewise. * pthread_setschedparam.c (__pthread_setschedparam): Likewise. * pthread_setschedprio.c (pthread_setschedprio): Likewise. * tpp.c (__pthread_tpp_change_priority, __pthread_current_priority): Likewise. * sysdeps/pthread/createthread.c (do_clone, create_thread): Likewise. * pthread_once.c (once_lock): Change type to int. (__pthread_once): Pass LLL_PRIVATE as second argument to lll_{,un}lock macros on once_lock. * pthread_rwlock_rdlock.c (__pthread_rwlock_rdlock): Use lll_{,un}lock macros instead of lll_mutex_{,un}lock, pass rwlock->__data.__shared as second argument to them and similarly for lll_futex_w*. * pthread_rwlock_timedrdlock.c (pthread_rwlock_timedrdlock): Likewise. * pthread_rwlock_timedwrlock.c (pthread_rwlock_timedwrlock): Likewise. * pthread_rwlock_tryrdlock.c (__pthread_rwlock_tryrdlock): Likewise. * pthread_rwlock_trywrlock.c (__pthread_rwlock_trywrlock): Likewise. * pthread_rwlock_unlock.c (__pthread_rwlock_unlock): Likewise. * pthread_rwlock_wrlock.c (__pthread_rwlock_wrlock): Likewise. * sem_close.c (sem_close): Pass LLL_PRIVATE as second argument to lll_{,un}lock macros on __sem_mappings_lock. * sem_open.c (check_add_mapping): Likewise. (__sem_mappings_lock): Change type to int. * semaphoreP.h (__sem_mappings_lock): Likewise. * pthread_mutex_lock.c (LLL_MUTEX_LOCK, LLL_MUTEX_TRYLOCK, LLL_ROBUST_MUTEX_LOCK): Use lll_{,try,robust_}lock macros instead of lll_*mutex_*, pass LLL_SHARED as last argument. (__pthread_mutex_lock): Use lll_unlock instead of lll_mutex_unlock, pass LLL_SHARED as last argument. * sysdeps/unix/sysv/linux/pthread_mutex_cond_lock.c (LLL_MUTEX_LOCK, LLL_MUTEX_TRYLOCK, LLL_ROBUST_MUTEX_LOCK): Use lll_{cond_,cond_try,robust_cond}lock macros instead of lll_*mutex_*, pass LLL_SHARED as last argument. * pthread_mutex_timedlock.c (pthread_mutex_timedlock): Use lll_{timed,try,robust_timed,un}lock instead of lll_*mutex*, pass LLL_SHARED as last argument. * pthread_mutex_trylock.c (__pthread_mutex_trylock): Similarly. * pthread_mutex_unlock.c (__pthread_mutex_unlock_usercnt): Similarly. * sysdeps/pthread/bits/libc-lock.h (__libc_lock_lock, __libc_lock_lock_recursive, __libc_lock_unlock, __libc_lock_unlock_recursive): Pass LLL_PRIVATE as second argument to lll_{,un}lock. * sysdeps/pthread/bits/stdio-lock.h (_IO_lock_lock, _IO_lock_unlock): Likewise. * sysdeps/unix/sysv/linux/fork.c (__libc_fork): Don't use compound literal. * sysdeps/unix/sysv/linux/unregister-atfork.c (__unregister_atfork): Pass LLL_PRIVATE as second argument to lll_{,un}lock macros on __fork_lock. * sysdeps/unix/sysv/linux/register-atfork.c (__register_atfork, free_mem): Likewise. (__fork_lock): Change type to int. * sysdeps/unix/sysv/linux/fork.h (__fork_lock): Likewise. * sysdeps/unix/sysv/linux/sem_post.c (__new_sem_post): Pass isem->private ^ FUTEX_PRIVATE_FLAG as second argument to lll_futex_wake. * sysdeps/unix/sysv/linux/sem_timedwait.c (sem_timedwait): Likewise. * sysdeps/unix/sysv/linux/sem_wait.c (__new_sem_wait): Likewise. * sysdeps/unix/sysv/linux/lowlevellock.c (__lll_lock_wait_private): New function. (__lll_lock_wait, __lll_timedlock_wait): Add private argument and pass it through to lll_futex_*wait, only compile in when IS_IN_libpthread. * sysdeps/unix/sysv/linux/lowlevelrobustlock.c (__lll_robust_lock_wait, __lll_robust_timedlock_wait): Add private argument and pass it through to lll_futex_*wait. * sysdeps/unix/sysv/linux/alpha/lowlevellock.h: Renamed all lll_mutex_* resp. lll_robust_mutex_* macros to lll_* resp. lll_robust_*. Renamed all __lll_mutex_* resp. __lll_robust_mutex_* inline functions to __lll_* resp. __lll_robust_*. (LLL_MUTEX_LOCK_INITIALIZER): Remove. (lll_mutex_dead): Add private argument. (__lll_lock_wait_private): New prototype. (__lll_lock_wait, __lll_robust_lock_wait, __lll_lock_timedwait, __lll_robust_lock_timedwait): Add private argument to prototypes. (__lll_lock): Add private argument, if it is constant LLL_PRIVATE, call __lll_lock_wait_private, otherwise pass private to __lll_lock_wait. (__lll_robust_lock, __lll_cond_lock, __lll_timedlock, __lll_robust_timedlock): Add private argument, pass it to __lll_*wait functions. (__lll_unlock): Add private argument, if it is constant LLL_PRIVATE, call __lll_unlock_wake_private, otherwise pass private to __lll_unlock_wake. (__lll_robust_unlock): Add private argument, pass it to __lll_robust_unlock_wake. (lll_lock, lll_robust_lock, lll_cond_lock, lll_timedlock, lll_robust_timedlock, lll_unlock, lll_robust_unlock): Add private argument, pass it through to __lll_* inline function. (__lll_mutex_unlock_force, lll_mutex_unlock_force): Remove. (lll_lock_t): Remove. (__lll_cond_wait, __lll_cond_timedwait, __lll_cond_wake, __lll_cond_broadcast, lll_cond_wait, lll_cond_timedwait, lll_cond_wake, lll_cond_broadcast): Remove. * sysdeps/unix/sysv/linux/ia64/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/powerpc/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/s390/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/sparc/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/i386/lowlevellock.h: Allow including the header from assembler. Renamed all lll_mutex_* resp. lll_robust_mutex_* macros to lll_* resp. lll_robust_*. (LOCK, FUTEX_CMP_REQUEUE, FUTEX_WAKE_OP, FUTEX_OP_CLEAR_WAKE_IF_GT_ONE): Define. (LLL_MUTEX_LOCK_INITIALIZER, LLL_MUTEX_LOCK_INITIALIZER_LOCKED, LLL_MUTEX_LOCK_INITIALIZER_WAITERS): Remove. (__lll_mutex_lock_wait, __lll_mutex_timedlock_wait, __lll_mutex_unlock_wake, __lll_lock_wait, __lll_unlock_wake): Remove prototype. (__lll_trylock_asm, __lll_lock_asm_start, __lll_unlock_asm): Define. (lll_robust_trylock, lll_cond_trylock): Use LLL_LOCK_INITIALIZER* rather than LLL_MUTEX_LOCK_INITIALIZER* macros. (lll_trylock): Likewise, use __lll_trylock_asm, pass MULTIPLE_THREADS_OFFSET as another asm operand. (lll_lock): Add private argument, use __lll_lock_asm_start, pass MULTIPLE_THREADS_OFFSET as last asm operand, call __lll_lock_wait_private if private is constant LLL_PRIVATE, otherwise pass private as another argument to __lll_lock_wait. (lll_robust_lock, lll_cond_lock, lll_robust_cond_lock, lll_timedlock, lll_robust_timedlock): Add private argument, pass private as another argument to __lll_*lock_wait call. (lll_unlock): Add private argument, use __lll_unlock_asm, pass MULTIPLE_THREADS_OFFSET as another asm operand, call __lll_unlock_wake_private if private is constant LLL_PRIVATE, otherwise pass private as another argument to __lll_unlock_wake. (lll_robust_unlock): Add private argument, pass private as another argument to __lll_unlock_wake. (lll_robust_dead): Add private argument, use __lll_private_flag macro. (lll_islocked): Use LLL_LOCK_INITIALIZER instead of LLL_MUTEX_LOCK_INITIALIZER. (lll_lock_t): Remove. (LLL_LOCK_INITIALIZER_WAITERS): Define. (__lll_cond_wait, __lll_cond_timedwait, __lll_cond_wake, __lll_cond_broadcast, lll_cond_wait, lll_cond_timedwait, lll_cond_wake, lll_cond_broadcast): Remove. * sysdeps/unix/sysv/linux/x86_64/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S: Revert 2007-05-2{3,9} changes. * sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S: Include kernel-features.h and lowlevellock.h. (LOAD_PRIVATE_FUTEX_WAIT): Define. (LOAD_FUTEX_WAIT): Rewritten. (LOCK, SYS_gettimeofday, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_lock_wait_private, __lll_unlock_wake_private): New functions. (__lll_mutex_lock_wait): Rename to ... (__lll_lock_wait): ... this. Take futex addr from %edx instead of %ecx, %ecx is now private argument. Don't compile in for libc.so. (__lll_mutex_timedlock_wait): Rename to ... (__lll_timedlock_wait): ... this. Use __NR_gettimeofday. %esi contains private argument. Don't compile in for libc.so. (__lll_mutex_unlock_wake): Rename to ... (__lll_unlock_wake): ... this. %ecx contains private argument. Don't compile in for libc.so. (__lll_timedwait_tid): Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S: Include kernel-features.h and lowlevellock.h. (LOAD_FUTEX_WAIT): Define. (LOCK, SYS_gettimeofday, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_robust_mutex_lock_wait): Rename to ... (__lll_robust_lock_wait): ... this. Futex addr is now in %edx argument, %ecx argument contains private. Use LOAD_FUTEX_WAIT macro. (__lll_robust_mutex_timedlock_wait): Rename to ... (__lll_robust_timedlock_wait): ... this. Use __NR_gettimeofday. %esi argument contains private, use LOAD_FUTEX_WAIT macro. * sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (pthread_barrier_wait): Rename __lll_mutex_* to __lll_*, pass PRIVATE(%ebx) ^ LLL_SHARED as private argument in %ecx to __lll_lock_wait and __lll_unlock_wake, pass MUTEX(%ebx) address to __lll_lock_wait in %edx. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_REQUEUE, FUTEX_CMP_REQUEUE, EINVAL, LOCK): Don't define. (__pthread_cond_broadcast): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_WAKE_OP, FUTEX_OP_CLEAR_WAKE_IF_GT_ONE, EINVAL, LOCK): Don't define. (__pthread_cond_signal): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S: Include lowlevellock.h. (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_timedwait): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_wait, __condvar_w_cleanup): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_rdlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebx) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebx) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S: Include lowlevellock.h. (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebp) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebp) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S: Include lowlevellock.h. (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebp) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebp) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_unlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%edi) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%edi) in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebx) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebx) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. * sysdeps/unix/sysv/linux/i386/pthread_once.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG): Don't define. * sysdeps/unix/sysv/linux/i386/i486/sem_post.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAKE): Don't define. * sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S: Include lowlevellock.h. (LOCK, SYS_futex, SYS_gettimeofday, FUTEX_WAIT): Don't define. (sem_timedwait): Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/sem_trywait.S: Include lowlevellock.h. (LOCK): Don't define. * sysdeps/unix/sysv/linux/i386/i486/sem_wait.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT): Don't define. * sysdeps/unix/sysv/linux/powerpc/sem_post.c: Wake only when there are waiters. * sysdeps/unix/sysv/linux/x86_64/libc-lowlevellock.S: Revert 2007-05-2{3,9} changes. * sysdeps/unix/sysv/linux/x86_64/lowlevellock.S: Include kernel-features.h and lowlevellock.h. (LOAD_PRIVATE_FUTEX_WAIT): Define. (LOAD_FUTEX_WAIT): Rewritten. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_lock_wait_private, __lll_unlock_wake_private): New functions. (__lll_mutex_lock_wait): Rename to ... (__lll_lock_wait): ... this. %esi is now private argument. Don't compile in for libc.so. (__lll_mutex_timedlock_wait): Rename to ... (__lll_timedlock_wait): ... this. %esi contains private argument. Don't compile in for libc.so. (__lll_mutex_unlock_wake): Rename to ... (__lll_unlock_wake): ... this. %esi contains private argument. Don't compile in for libc.so. * sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S: Include kernel-features.h and lowlevellock.h. (LOAD_FUTEX_WAIT): Define. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_robust_mutex_lock_wait): Rename to ... (__lll_robust_lock_wait): ... this. %esi argument contains private. Use LOAD_FUTEX_WAIT macro. (__lll_robust_mutex_timedlock_wait): Rename to ... (__lll_robust_timedlock_wait): ... this. %esi argument contains private, use LOAD_FUTEX_WAIT macro. * sysdeps/unix/sysv/linux/x86_64/pthread_barrier_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (pthread_barrier_wait): Rename __lll_mutex_* to __lll_*, pass PRIVATE(%rdi) ^ LLL_SHARED as private argument in %esi to __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_REQUEUE, FUTEX_CMP_REQUEUE, EINVAL, LOCK): Don't define. (__pthread_cond_broadcast): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_WAKE_OP, FUTEX_OP_CLEAR_WAKE_IF_GT_ONE, EINVAL, LOCK): Don't define. (__pthread_cond_signal): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_timedwait): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_wait, __condvar_cleanup): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_rdlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_unlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_once.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_post.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAKE): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_trywait.S: Include lowlevellock.h. (LOCK): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_wait.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT): Don't define. * sysdeps/unix/sysv/linux/sparc/internaltypes.h: New file. * sysdeps/unix/sysv/linux/sparc/pthread_barrier_destroy.c: New file. * sysdeps/unix/sysv/linux/sparc/pthread_barrier_init.c: New file. * sysdeps/unix/sysv/linux/sparc/pthread_barrier_wait.c: New file. * sysdeps/unix/sysv/linux/sparc/sparc32/lowlevellock.c (__lll_lock_wait_private): New function. (__lll_lock_wait, __lll_timedlock_wait): Add private argument, pass it to lll_futex_*wait. Don't compile in for libc.so. * sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_init.c: Remove. * sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_wait.c (struct sparc_pthread_barrier): Remove. (pthread_barrier_wait): Use union sparc_pthread_barrier instead of struct sparc_pthread_barrier. Pass ibarrier->s.pshared ? LLL_SHARED : LLL_PRIVATE to lll_{,un}lock and lll_futex_wait macros. * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_init.c: Remove. * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_wait.c: Include sparc pthread_barrier_wait.c instead of generic one.
2007-08-01 06:47:26 +02:00
leal cond_lock(%ebx), %edx
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
#endif
#if (LLL_SHARED-LLL_PRIVATE) > 255
xorl %ecx, %ecx
#endif
cmpl $-1, dep_mutex(%ebx)
setne %cl
subl $1, %ecx
andl $(LLL_SHARED-LLL_PRIVATE), %ecx
#if LLL_PRIVATE != 0
addl $LLL_PRIVATE, %ecx
#endif
* sysdeps/unix/sysv/linux/powerpc/sem_post.c (__new_sem_post): Use __asm __volatile (__lll_acq_instr ::: "memory") instead of atomic_full_barrier. 2007-07-31 Jakub Jelinek <jakub@redhat.com> * allocatestack.c (stack_cache_lock): Change type to int. (get_cached_stack, allocate_stack, __deallocate_stack, __make_stacks_executable, __find_thread_by_id, __nptl_setxid, __pthread_init_static_tls, __wait_lookup_done): Add LLL_PRIVATE as second argument to lll_lock and lll_unlock macros on stack_cache_lock. * pthread_create.c (__find_in_stack_list): Likewise. (start_thread): Similarly with pd->lock. Use lll_robust_dead macro instead of lll_robust_mutex_dead, pass LLL_SHARED to it as second argument. * descr.h (struct pthread): Change lock and setxid_futex field type to int. * old_pthread_cond_broadcast.c (__pthread_cond_broadcast_2_0): Use LLL_LOCK_INITIALIZER instead of LLL_MUTEX_LOCK_INITIALIZER. * old_pthread_cond_signal.c (__pthread_cond_signal_2_0): Likewise. * old_pthread_cond_timedwait.c (__pthread_cond_timedwait_2_0): Likewise. * old_pthread_cond_wait.c (__pthread_cond_wait_2_0): Likewise. * pthread_cond_init.c (__pthread_cond_init): Likewise. * pthreadP.h (__attr_list_lock): Change type to int. * pthread_attr_init.c (__attr_list_lock): Likewise. * pthread_barrier_destroy.c (pthread_barrier_destroy): Pass ibarrier->private ^ FUTEX_PRIVATE_FLAG as second argument to lll_{,un}lock. * pthread_barrier_wait.c (pthread_barrier_wait): Likewise and also for lll_futex_{wake,wait}. * pthread_barrier_init.c (pthread_barrier_init): Make iattr a pointer to const. * pthread_cond_broadcast.c (__pthread_cond_broadcast): Pass LLL_SHARED as second argument to lll_{,un}lock. * pthread_cond_destroy.c (__pthread_cond_destroy): Likewise. * pthread_cond_signal.c (__pthread_cond_singal): Likewise. * pthread_cond_timedwait.c (__pthread_cond_timedwait): Likewise. * pthread_cond_wait.c (__condvar_cleanup, __pthread_cond_wait): Likewise. * pthread_getattr_np.c (pthread_getattr_np): Add LLL_PRIVATE as second argument to lll_{,un}lock macros on pd->lock. * pthread_getschedparam.c (__pthread_getschedparam): Likewise. * pthread_setschedparam.c (__pthread_setschedparam): Likewise. * pthread_setschedprio.c (pthread_setschedprio): Likewise. * tpp.c (__pthread_tpp_change_priority, __pthread_current_priority): Likewise. * sysdeps/pthread/createthread.c (do_clone, create_thread): Likewise. * pthread_once.c (once_lock): Change type to int. (__pthread_once): Pass LLL_PRIVATE as second argument to lll_{,un}lock macros on once_lock. * pthread_rwlock_rdlock.c (__pthread_rwlock_rdlock): Use lll_{,un}lock macros instead of lll_mutex_{,un}lock, pass rwlock->__data.__shared as second argument to them and similarly for lll_futex_w*. * pthread_rwlock_timedrdlock.c (pthread_rwlock_timedrdlock): Likewise. * pthread_rwlock_timedwrlock.c (pthread_rwlock_timedwrlock): Likewise. * pthread_rwlock_tryrdlock.c (__pthread_rwlock_tryrdlock): Likewise. * pthread_rwlock_trywrlock.c (__pthread_rwlock_trywrlock): Likewise. * pthread_rwlock_unlock.c (__pthread_rwlock_unlock): Likewise. * pthread_rwlock_wrlock.c (__pthread_rwlock_wrlock): Likewise. * sem_close.c (sem_close): Pass LLL_PRIVATE as second argument to lll_{,un}lock macros on __sem_mappings_lock. * sem_open.c (check_add_mapping): Likewise. (__sem_mappings_lock): Change type to int. * semaphoreP.h (__sem_mappings_lock): Likewise. * pthread_mutex_lock.c (LLL_MUTEX_LOCK, LLL_MUTEX_TRYLOCK, LLL_ROBUST_MUTEX_LOCK): Use lll_{,try,robust_}lock macros instead of lll_*mutex_*, pass LLL_SHARED as last argument. (__pthread_mutex_lock): Use lll_unlock instead of lll_mutex_unlock, pass LLL_SHARED as last argument. * sysdeps/unix/sysv/linux/pthread_mutex_cond_lock.c (LLL_MUTEX_LOCK, LLL_MUTEX_TRYLOCK, LLL_ROBUST_MUTEX_LOCK): Use lll_{cond_,cond_try,robust_cond}lock macros instead of lll_*mutex_*, pass LLL_SHARED as last argument. * pthread_mutex_timedlock.c (pthread_mutex_timedlock): Use lll_{timed,try,robust_timed,un}lock instead of lll_*mutex*, pass LLL_SHARED as last argument. * pthread_mutex_trylock.c (__pthread_mutex_trylock): Similarly. * pthread_mutex_unlock.c (__pthread_mutex_unlock_usercnt): Similarly. * sysdeps/pthread/bits/libc-lock.h (__libc_lock_lock, __libc_lock_lock_recursive, __libc_lock_unlock, __libc_lock_unlock_recursive): Pass LLL_PRIVATE as second argument to lll_{,un}lock. * sysdeps/pthread/bits/stdio-lock.h (_IO_lock_lock, _IO_lock_unlock): Likewise. * sysdeps/unix/sysv/linux/fork.c (__libc_fork): Don't use compound literal. * sysdeps/unix/sysv/linux/unregister-atfork.c (__unregister_atfork): Pass LLL_PRIVATE as second argument to lll_{,un}lock macros on __fork_lock. * sysdeps/unix/sysv/linux/register-atfork.c (__register_atfork, free_mem): Likewise. (__fork_lock): Change type to int. * sysdeps/unix/sysv/linux/fork.h (__fork_lock): Likewise. * sysdeps/unix/sysv/linux/sem_post.c (__new_sem_post): Pass isem->private ^ FUTEX_PRIVATE_FLAG as second argument to lll_futex_wake. * sysdeps/unix/sysv/linux/sem_timedwait.c (sem_timedwait): Likewise. * sysdeps/unix/sysv/linux/sem_wait.c (__new_sem_wait): Likewise. * sysdeps/unix/sysv/linux/lowlevellock.c (__lll_lock_wait_private): New function. (__lll_lock_wait, __lll_timedlock_wait): Add private argument and pass it through to lll_futex_*wait, only compile in when IS_IN_libpthread. * sysdeps/unix/sysv/linux/lowlevelrobustlock.c (__lll_robust_lock_wait, __lll_robust_timedlock_wait): Add private argument and pass it through to lll_futex_*wait. * sysdeps/unix/sysv/linux/alpha/lowlevellock.h: Renamed all lll_mutex_* resp. lll_robust_mutex_* macros to lll_* resp. lll_robust_*. Renamed all __lll_mutex_* resp. __lll_robust_mutex_* inline functions to __lll_* resp. __lll_robust_*. (LLL_MUTEX_LOCK_INITIALIZER): Remove. (lll_mutex_dead): Add private argument. (__lll_lock_wait_private): New prototype. (__lll_lock_wait, __lll_robust_lock_wait, __lll_lock_timedwait, __lll_robust_lock_timedwait): Add private argument to prototypes. (__lll_lock): Add private argument, if it is constant LLL_PRIVATE, call __lll_lock_wait_private, otherwise pass private to __lll_lock_wait. (__lll_robust_lock, __lll_cond_lock, __lll_timedlock, __lll_robust_timedlock): Add private argument, pass it to __lll_*wait functions. (__lll_unlock): Add private argument, if it is constant LLL_PRIVATE, call __lll_unlock_wake_private, otherwise pass private to __lll_unlock_wake. (__lll_robust_unlock): Add private argument, pass it to __lll_robust_unlock_wake. (lll_lock, lll_robust_lock, lll_cond_lock, lll_timedlock, lll_robust_timedlock, lll_unlock, lll_robust_unlock): Add private argument, pass it through to __lll_* inline function. (__lll_mutex_unlock_force, lll_mutex_unlock_force): Remove. (lll_lock_t): Remove. (__lll_cond_wait, __lll_cond_timedwait, __lll_cond_wake, __lll_cond_broadcast, lll_cond_wait, lll_cond_timedwait, lll_cond_wake, lll_cond_broadcast): Remove. * sysdeps/unix/sysv/linux/ia64/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/powerpc/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/s390/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/sparc/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/i386/lowlevellock.h: Allow including the header from assembler. Renamed all lll_mutex_* resp. lll_robust_mutex_* macros to lll_* resp. lll_robust_*. (LOCK, FUTEX_CMP_REQUEUE, FUTEX_WAKE_OP, FUTEX_OP_CLEAR_WAKE_IF_GT_ONE): Define. (LLL_MUTEX_LOCK_INITIALIZER, LLL_MUTEX_LOCK_INITIALIZER_LOCKED, LLL_MUTEX_LOCK_INITIALIZER_WAITERS): Remove. (__lll_mutex_lock_wait, __lll_mutex_timedlock_wait, __lll_mutex_unlock_wake, __lll_lock_wait, __lll_unlock_wake): Remove prototype. (__lll_trylock_asm, __lll_lock_asm_start, __lll_unlock_asm): Define. (lll_robust_trylock, lll_cond_trylock): Use LLL_LOCK_INITIALIZER* rather than LLL_MUTEX_LOCK_INITIALIZER* macros. (lll_trylock): Likewise, use __lll_trylock_asm, pass MULTIPLE_THREADS_OFFSET as another asm operand. (lll_lock): Add private argument, use __lll_lock_asm_start, pass MULTIPLE_THREADS_OFFSET as last asm operand, call __lll_lock_wait_private if private is constant LLL_PRIVATE, otherwise pass private as another argument to __lll_lock_wait. (lll_robust_lock, lll_cond_lock, lll_robust_cond_lock, lll_timedlock, lll_robust_timedlock): Add private argument, pass private as another argument to __lll_*lock_wait call. (lll_unlock): Add private argument, use __lll_unlock_asm, pass MULTIPLE_THREADS_OFFSET as another asm operand, call __lll_unlock_wake_private if private is constant LLL_PRIVATE, otherwise pass private as another argument to __lll_unlock_wake. (lll_robust_unlock): Add private argument, pass private as another argument to __lll_unlock_wake. (lll_robust_dead): Add private argument, use __lll_private_flag macro. (lll_islocked): Use LLL_LOCK_INITIALIZER instead of LLL_MUTEX_LOCK_INITIALIZER. (lll_lock_t): Remove. (LLL_LOCK_INITIALIZER_WAITERS): Define. (__lll_cond_wait, __lll_cond_timedwait, __lll_cond_wake, __lll_cond_broadcast, lll_cond_wait, lll_cond_timedwait, lll_cond_wake, lll_cond_broadcast): Remove. * sysdeps/unix/sysv/linux/x86_64/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S: Revert 2007-05-2{3,9} changes. * sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S: Include kernel-features.h and lowlevellock.h. (LOAD_PRIVATE_FUTEX_WAIT): Define. (LOAD_FUTEX_WAIT): Rewritten. (LOCK, SYS_gettimeofday, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_lock_wait_private, __lll_unlock_wake_private): New functions. (__lll_mutex_lock_wait): Rename to ... (__lll_lock_wait): ... this. Take futex addr from %edx instead of %ecx, %ecx is now private argument. Don't compile in for libc.so. (__lll_mutex_timedlock_wait): Rename to ... (__lll_timedlock_wait): ... this. Use __NR_gettimeofday. %esi contains private argument. Don't compile in for libc.so. (__lll_mutex_unlock_wake): Rename to ... (__lll_unlock_wake): ... this. %ecx contains private argument. Don't compile in for libc.so. (__lll_timedwait_tid): Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S: Include kernel-features.h and lowlevellock.h. (LOAD_FUTEX_WAIT): Define. (LOCK, SYS_gettimeofday, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_robust_mutex_lock_wait): Rename to ... (__lll_robust_lock_wait): ... this. Futex addr is now in %edx argument, %ecx argument contains private. Use LOAD_FUTEX_WAIT macro. (__lll_robust_mutex_timedlock_wait): Rename to ... (__lll_robust_timedlock_wait): ... this. Use __NR_gettimeofday. %esi argument contains private, use LOAD_FUTEX_WAIT macro. * sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (pthread_barrier_wait): Rename __lll_mutex_* to __lll_*, pass PRIVATE(%ebx) ^ LLL_SHARED as private argument in %ecx to __lll_lock_wait and __lll_unlock_wake, pass MUTEX(%ebx) address to __lll_lock_wait in %edx. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_REQUEUE, FUTEX_CMP_REQUEUE, EINVAL, LOCK): Don't define. (__pthread_cond_broadcast): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_WAKE_OP, FUTEX_OP_CLEAR_WAKE_IF_GT_ONE, EINVAL, LOCK): Don't define. (__pthread_cond_signal): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S: Include lowlevellock.h. (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_timedwait): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_wait, __condvar_w_cleanup): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_rdlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebx) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebx) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S: Include lowlevellock.h. (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebp) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebp) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S: Include lowlevellock.h. (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebp) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebp) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_unlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%edi) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%edi) in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebx) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebx) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. * sysdeps/unix/sysv/linux/i386/pthread_once.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG): Don't define. * sysdeps/unix/sysv/linux/i386/i486/sem_post.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAKE): Don't define. * sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S: Include lowlevellock.h. (LOCK, SYS_futex, SYS_gettimeofday, FUTEX_WAIT): Don't define. (sem_timedwait): Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/sem_trywait.S: Include lowlevellock.h. (LOCK): Don't define. * sysdeps/unix/sysv/linux/i386/i486/sem_wait.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT): Don't define. * sysdeps/unix/sysv/linux/powerpc/sem_post.c: Wake only when there are waiters. * sysdeps/unix/sysv/linux/x86_64/libc-lowlevellock.S: Revert 2007-05-2{3,9} changes. * sysdeps/unix/sysv/linux/x86_64/lowlevellock.S: Include kernel-features.h and lowlevellock.h. (LOAD_PRIVATE_FUTEX_WAIT): Define. (LOAD_FUTEX_WAIT): Rewritten. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_lock_wait_private, __lll_unlock_wake_private): New functions. (__lll_mutex_lock_wait): Rename to ... (__lll_lock_wait): ... this. %esi is now private argument. Don't compile in for libc.so. (__lll_mutex_timedlock_wait): Rename to ... (__lll_timedlock_wait): ... this. %esi contains private argument. Don't compile in for libc.so. (__lll_mutex_unlock_wake): Rename to ... (__lll_unlock_wake): ... this. %esi contains private argument. Don't compile in for libc.so. * sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S: Include kernel-features.h and lowlevellock.h. (LOAD_FUTEX_WAIT): Define. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_robust_mutex_lock_wait): Rename to ... (__lll_robust_lock_wait): ... this. %esi argument contains private. Use LOAD_FUTEX_WAIT macro. (__lll_robust_mutex_timedlock_wait): Rename to ... (__lll_robust_timedlock_wait): ... this. %esi argument contains private, use LOAD_FUTEX_WAIT macro. * sysdeps/unix/sysv/linux/x86_64/pthread_barrier_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (pthread_barrier_wait): Rename __lll_mutex_* to __lll_*, pass PRIVATE(%rdi) ^ LLL_SHARED as private argument in %esi to __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_REQUEUE, FUTEX_CMP_REQUEUE, EINVAL, LOCK): Don't define. (__pthread_cond_broadcast): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_WAKE_OP, FUTEX_OP_CLEAR_WAKE_IF_GT_ONE, EINVAL, LOCK): Don't define. (__pthread_cond_signal): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_timedwait): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_wait, __condvar_cleanup): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_rdlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_unlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_once.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_post.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAKE): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_trywait.S: Include lowlevellock.h. (LOCK): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_wait.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT): Don't define. * sysdeps/unix/sysv/linux/sparc/internaltypes.h: New file. * sysdeps/unix/sysv/linux/sparc/pthread_barrier_destroy.c: New file. * sysdeps/unix/sysv/linux/sparc/pthread_barrier_init.c: New file. * sysdeps/unix/sysv/linux/sparc/pthread_barrier_wait.c: New file. * sysdeps/unix/sysv/linux/sparc/sparc32/lowlevellock.c (__lll_lock_wait_private): New function. (__lll_lock_wait, __lll_timedlock_wait): Add private argument, pass it to lll_futex_*wait. Don't compile in for libc.so. * sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_init.c: Remove. * sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_wait.c (struct sparc_pthread_barrier): Remove. (pthread_barrier_wait): Use union sparc_pthread_barrier instead of struct sparc_pthread_barrier. Pass ibarrier->s.pshared ? LLL_SHARED : LLL_PRIVATE to lll_{,un}lock and lll_futex_wait macros. * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_init.c: Remove. * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_wait.c: Include sparc pthread_barrier_wait.c instead of generic one.
2007-08-01 06:47:26 +02:00
call __lll_lock_wait
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
jmp 2b
/* The initial unlocking of the mutex failed. */
12:
LOCK
#if cond_lock == 0
subl $1, (%ebx)
#else
subl $1, cond_lock(%ebx)
#endif
jne 14b
movl %eax, %esi
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
#if cond_lock == 0
movl %ebx, %eax
#else
leal cond_lock(%ebx), %eax
#endif
#if (LLL_SHARED-LLL_PRIVATE) > 255
xorl %ecx, %ecx
#endif
cmpl $-1, dep_mutex(%ebx)
setne %cl
subl $1, %ecx
andl $(LLL_SHARED-LLL_PRIVATE), %ecx
#if LLL_PRIVATE != 0
addl $LLL_PRIVATE, %ecx
#endif
* sysdeps/unix/sysv/linux/powerpc/sem_post.c (__new_sem_post): Use __asm __volatile (__lll_acq_instr ::: "memory") instead of atomic_full_barrier. 2007-07-31 Jakub Jelinek <jakub@redhat.com> * allocatestack.c (stack_cache_lock): Change type to int. (get_cached_stack, allocate_stack, __deallocate_stack, __make_stacks_executable, __find_thread_by_id, __nptl_setxid, __pthread_init_static_tls, __wait_lookup_done): Add LLL_PRIVATE as second argument to lll_lock and lll_unlock macros on stack_cache_lock. * pthread_create.c (__find_in_stack_list): Likewise. (start_thread): Similarly with pd->lock. Use lll_robust_dead macro instead of lll_robust_mutex_dead, pass LLL_SHARED to it as second argument. * descr.h (struct pthread): Change lock and setxid_futex field type to int. * old_pthread_cond_broadcast.c (__pthread_cond_broadcast_2_0): Use LLL_LOCK_INITIALIZER instead of LLL_MUTEX_LOCK_INITIALIZER. * old_pthread_cond_signal.c (__pthread_cond_signal_2_0): Likewise. * old_pthread_cond_timedwait.c (__pthread_cond_timedwait_2_0): Likewise. * old_pthread_cond_wait.c (__pthread_cond_wait_2_0): Likewise. * pthread_cond_init.c (__pthread_cond_init): Likewise. * pthreadP.h (__attr_list_lock): Change type to int. * pthread_attr_init.c (__attr_list_lock): Likewise. * pthread_barrier_destroy.c (pthread_barrier_destroy): Pass ibarrier->private ^ FUTEX_PRIVATE_FLAG as second argument to lll_{,un}lock. * pthread_barrier_wait.c (pthread_barrier_wait): Likewise and also for lll_futex_{wake,wait}. * pthread_barrier_init.c (pthread_barrier_init): Make iattr a pointer to const. * pthread_cond_broadcast.c (__pthread_cond_broadcast): Pass LLL_SHARED as second argument to lll_{,un}lock. * pthread_cond_destroy.c (__pthread_cond_destroy): Likewise. * pthread_cond_signal.c (__pthread_cond_singal): Likewise. * pthread_cond_timedwait.c (__pthread_cond_timedwait): Likewise. * pthread_cond_wait.c (__condvar_cleanup, __pthread_cond_wait): Likewise. * pthread_getattr_np.c (pthread_getattr_np): Add LLL_PRIVATE as second argument to lll_{,un}lock macros on pd->lock. * pthread_getschedparam.c (__pthread_getschedparam): Likewise. * pthread_setschedparam.c (__pthread_setschedparam): Likewise. * pthread_setschedprio.c (pthread_setschedprio): Likewise. * tpp.c (__pthread_tpp_change_priority, __pthread_current_priority): Likewise. * sysdeps/pthread/createthread.c (do_clone, create_thread): Likewise. * pthread_once.c (once_lock): Change type to int. (__pthread_once): Pass LLL_PRIVATE as second argument to lll_{,un}lock macros on once_lock. * pthread_rwlock_rdlock.c (__pthread_rwlock_rdlock): Use lll_{,un}lock macros instead of lll_mutex_{,un}lock, pass rwlock->__data.__shared as second argument to them and similarly for lll_futex_w*. * pthread_rwlock_timedrdlock.c (pthread_rwlock_timedrdlock): Likewise. * pthread_rwlock_timedwrlock.c (pthread_rwlock_timedwrlock): Likewise. * pthread_rwlock_tryrdlock.c (__pthread_rwlock_tryrdlock): Likewise. * pthread_rwlock_trywrlock.c (__pthread_rwlock_trywrlock): Likewise. * pthread_rwlock_unlock.c (__pthread_rwlock_unlock): Likewise. * pthread_rwlock_wrlock.c (__pthread_rwlock_wrlock): Likewise. * sem_close.c (sem_close): Pass LLL_PRIVATE as second argument to lll_{,un}lock macros on __sem_mappings_lock. * sem_open.c (check_add_mapping): Likewise. (__sem_mappings_lock): Change type to int. * semaphoreP.h (__sem_mappings_lock): Likewise. * pthread_mutex_lock.c (LLL_MUTEX_LOCK, LLL_MUTEX_TRYLOCK, LLL_ROBUST_MUTEX_LOCK): Use lll_{,try,robust_}lock macros instead of lll_*mutex_*, pass LLL_SHARED as last argument. (__pthread_mutex_lock): Use lll_unlock instead of lll_mutex_unlock, pass LLL_SHARED as last argument. * sysdeps/unix/sysv/linux/pthread_mutex_cond_lock.c (LLL_MUTEX_LOCK, LLL_MUTEX_TRYLOCK, LLL_ROBUST_MUTEX_LOCK): Use lll_{cond_,cond_try,robust_cond}lock macros instead of lll_*mutex_*, pass LLL_SHARED as last argument. * pthread_mutex_timedlock.c (pthread_mutex_timedlock): Use lll_{timed,try,robust_timed,un}lock instead of lll_*mutex*, pass LLL_SHARED as last argument. * pthread_mutex_trylock.c (__pthread_mutex_trylock): Similarly. * pthread_mutex_unlock.c (__pthread_mutex_unlock_usercnt): Similarly. * sysdeps/pthread/bits/libc-lock.h (__libc_lock_lock, __libc_lock_lock_recursive, __libc_lock_unlock, __libc_lock_unlock_recursive): Pass LLL_PRIVATE as second argument to lll_{,un}lock. * sysdeps/pthread/bits/stdio-lock.h (_IO_lock_lock, _IO_lock_unlock): Likewise. * sysdeps/unix/sysv/linux/fork.c (__libc_fork): Don't use compound literal. * sysdeps/unix/sysv/linux/unregister-atfork.c (__unregister_atfork): Pass LLL_PRIVATE as second argument to lll_{,un}lock macros on __fork_lock. * sysdeps/unix/sysv/linux/register-atfork.c (__register_atfork, free_mem): Likewise. (__fork_lock): Change type to int. * sysdeps/unix/sysv/linux/fork.h (__fork_lock): Likewise. * sysdeps/unix/sysv/linux/sem_post.c (__new_sem_post): Pass isem->private ^ FUTEX_PRIVATE_FLAG as second argument to lll_futex_wake. * sysdeps/unix/sysv/linux/sem_timedwait.c (sem_timedwait): Likewise. * sysdeps/unix/sysv/linux/sem_wait.c (__new_sem_wait): Likewise. * sysdeps/unix/sysv/linux/lowlevellock.c (__lll_lock_wait_private): New function. (__lll_lock_wait, __lll_timedlock_wait): Add private argument and pass it through to lll_futex_*wait, only compile in when IS_IN_libpthread. * sysdeps/unix/sysv/linux/lowlevelrobustlock.c (__lll_robust_lock_wait, __lll_robust_timedlock_wait): Add private argument and pass it through to lll_futex_*wait. * sysdeps/unix/sysv/linux/alpha/lowlevellock.h: Renamed all lll_mutex_* resp. lll_robust_mutex_* macros to lll_* resp. lll_robust_*. Renamed all __lll_mutex_* resp. __lll_robust_mutex_* inline functions to __lll_* resp. __lll_robust_*. (LLL_MUTEX_LOCK_INITIALIZER): Remove. (lll_mutex_dead): Add private argument. (__lll_lock_wait_private): New prototype. (__lll_lock_wait, __lll_robust_lock_wait, __lll_lock_timedwait, __lll_robust_lock_timedwait): Add private argument to prototypes. (__lll_lock): Add private argument, if it is constant LLL_PRIVATE, call __lll_lock_wait_private, otherwise pass private to __lll_lock_wait. (__lll_robust_lock, __lll_cond_lock, __lll_timedlock, __lll_robust_timedlock): Add private argument, pass it to __lll_*wait functions. (__lll_unlock): Add private argument, if it is constant LLL_PRIVATE, call __lll_unlock_wake_private, otherwise pass private to __lll_unlock_wake. (__lll_robust_unlock): Add private argument, pass it to __lll_robust_unlock_wake. (lll_lock, lll_robust_lock, lll_cond_lock, lll_timedlock, lll_robust_timedlock, lll_unlock, lll_robust_unlock): Add private argument, pass it through to __lll_* inline function. (__lll_mutex_unlock_force, lll_mutex_unlock_force): Remove. (lll_lock_t): Remove. (__lll_cond_wait, __lll_cond_timedwait, __lll_cond_wake, __lll_cond_broadcast, lll_cond_wait, lll_cond_timedwait, lll_cond_wake, lll_cond_broadcast): Remove. * sysdeps/unix/sysv/linux/ia64/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/powerpc/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/s390/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/sparc/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/i386/lowlevellock.h: Allow including the header from assembler. Renamed all lll_mutex_* resp. lll_robust_mutex_* macros to lll_* resp. lll_robust_*. (LOCK, FUTEX_CMP_REQUEUE, FUTEX_WAKE_OP, FUTEX_OP_CLEAR_WAKE_IF_GT_ONE): Define. (LLL_MUTEX_LOCK_INITIALIZER, LLL_MUTEX_LOCK_INITIALIZER_LOCKED, LLL_MUTEX_LOCK_INITIALIZER_WAITERS): Remove. (__lll_mutex_lock_wait, __lll_mutex_timedlock_wait, __lll_mutex_unlock_wake, __lll_lock_wait, __lll_unlock_wake): Remove prototype. (__lll_trylock_asm, __lll_lock_asm_start, __lll_unlock_asm): Define. (lll_robust_trylock, lll_cond_trylock): Use LLL_LOCK_INITIALIZER* rather than LLL_MUTEX_LOCK_INITIALIZER* macros. (lll_trylock): Likewise, use __lll_trylock_asm, pass MULTIPLE_THREADS_OFFSET as another asm operand. (lll_lock): Add private argument, use __lll_lock_asm_start, pass MULTIPLE_THREADS_OFFSET as last asm operand, call __lll_lock_wait_private if private is constant LLL_PRIVATE, otherwise pass private as another argument to __lll_lock_wait. (lll_robust_lock, lll_cond_lock, lll_robust_cond_lock, lll_timedlock, lll_robust_timedlock): Add private argument, pass private as another argument to __lll_*lock_wait call. (lll_unlock): Add private argument, use __lll_unlock_asm, pass MULTIPLE_THREADS_OFFSET as another asm operand, call __lll_unlock_wake_private if private is constant LLL_PRIVATE, otherwise pass private as another argument to __lll_unlock_wake. (lll_robust_unlock): Add private argument, pass private as another argument to __lll_unlock_wake. (lll_robust_dead): Add private argument, use __lll_private_flag macro. (lll_islocked): Use LLL_LOCK_INITIALIZER instead of LLL_MUTEX_LOCK_INITIALIZER. (lll_lock_t): Remove. (LLL_LOCK_INITIALIZER_WAITERS): Define. (__lll_cond_wait, __lll_cond_timedwait, __lll_cond_wake, __lll_cond_broadcast, lll_cond_wait, lll_cond_timedwait, lll_cond_wake, lll_cond_broadcast): Remove. * sysdeps/unix/sysv/linux/x86_64/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S: Revert 2007-05-2{3,9} changes. * sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S: Include kernel-features.h and lowlevellock.h. (LOAD_PRIVATE_FUTEX_WAIT): Define. (LOAD_FUTEX_WAIT): Rewritten. (LOCK, SYS_gettimeofday, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_lock_wait_private, __lll_unlock_wake_private): New functions. (__lll_mutex_lock_wait): Rename to ... (__lll_lock_wait): ... this. Take futex addr from %edx instead of %ecx, %ecx is now private argument. Don't compile in for libc.so. (__lll_mutex_timedlock_wait): Rename to ... (__lll_timedlock_wait): ... this. Use __NR_gettimeofday. %esi contains private argument. Don't compile in for libc.so. (__lll_mutex_unlock_wake): Rename to ... (__lll_unlock_wake): ... this. %ecx contains private argument. Don't compile in for libc.so. (__lll_timedwait_tid): Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S: Include kernel-features.h and lowlevellock.h. (LOAD_FUTEX_WAIT): Define. (LOCK, SYS_gettimeofday, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_robust_mutex_lock_wait): Rename to ... (__lll_robust_lock_wait): ... this. Futex addr is now in %edx argument, %ecx argument contains private. Use LOAD_FUTEX_WAIT macro. (__lll_robust_mutex_timedlock_wait): Rename to ... (__lll_robust_timedlock_wait): ... this. Use __NR_gettimeofday. %esi argument contains private, use LOAD_FUTEX_WAIT macro. * sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (pthread_barrier_wait): Rename __lll_mutex_* to __lll_*, pass PRIVATE(%ebx) ^ LLL_SHARED as private argument in %ecx to __lll_lock_wait and __lll_unlock_wake, pass MUTEX(%ebx) address to __lll_lock_wait in %edx. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_REQUEUE, FUTEX_CMP_REQUEUE, EINVAL, LOCK): Don't define. (__pthread_cond_broadcast): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_WAKE_OP, FUTEX_OP_CLEAR_WAKE_IF_GT_ONE, EINVAL, LOCK): Don't define. (__pthread_cond_signal): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S: Include lowlevellock.h. (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_timedwait): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_wait, __condvar_w_cleanup): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_rdlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebx) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebx) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S: Include lowlevellock.h. (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebp) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebp) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S: Include lowlevellock.h. (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebp) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebp) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_unlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%edi) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%edi) in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebx) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebx) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. * sysdeps/unix/sysv/linux/i386/pthread_once.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG): Don't define. * sysdeps/unix/sysv/linux/i386/i486/sem_post.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAKE): Don't define. * sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S: Include lowlevellock.h. (LOCK, SYS_futex, SYS_gettimeofday, FUTEX_WAIT): Don't define. (sem_timedwait): Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/sem_trywait.S: Include lowlevellock.h. (LOCK): Don't define. * sysdeps/unix/sysv/linux/i386/i486/sem_wait.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT): Don't define. * sysdeps/unix/sysv/linux/powerpc/sem_post.c: Wake only when there are waiters. * sysdeps/unix/sysv/linux/x86_64/libc-lowlevellock.S: Revert 2007-05-2{3,9} changes. * sysdeps/unix/sysv/linux/x86_64/lowlevellock.S: Include kernel-features.h and lowlevellock.h. (LOAD_PRIVATE_FUTEX_WAIT): Define. (LOAD_FUTEX_WAIT): Rewritten. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_lock_wait_private, __lll_unlock_wake_private): New functions. (__lll_mutex_lock_wait): Rename to ... (__lll_lock_wait): ... this. %esi is now private argument. Don't compile in for libc.so. (__lll_mutex_timedlock_wait): Rename to ... (__lll_timedlock_wait): ... this. %esi contains private argument. Don't compile in for libc.so. (__lll_mutex_unlock_wake): Rename to ... (__lll_unlock_wake): ... this. %esi contains private argument. Don't compile in for libc.so. * sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S: Include kernel-features.h and lowlevellock.h. (LOAD_FUTEX_WAIT): Define. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_robust_mutex_lock_wait): Rename to ... (__lll_robust_lock_wait): ... this. %esi argument contains private. Use LOAD_FUTEX_WAIT macro. (__lll_robust_mutex_timedlock_wait): Rename to ... (__lll_robust_timedlock_wait): ... this. %esi argument contains private, use LOAD_FUTEX_WAIT macro. * sysdeps/unix/sysv/linux/x86_64/pthread_barrier_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (pthread_barrier_wait): Rename __lll_mutex_* to __lll_*, pass PRIVATE(%rdi) ^ LLL_SHARED as private argument in %esi to __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_REQUEUE, FUTEX_CMP_REQUEUE, EINVAL, LOCK): Don't define. (__pthread_cond_broadcast): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_WAKE_OP, FUTEX_OP_CLEAR_WAKE_IF_GT_ONE, EINVAL, LOCK): Don't define. (__pthread_cond_signal): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_timedwait): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_wait, __condvar_cleanup): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_rdlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_unlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_once.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_post.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAKE): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_trywait.S: Include lowlevellock.h. (LOCK): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_wait.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT): Don't define. * sysdeps/unix/sysv/linux/sparc/internaltypes.h: New file. * sysdeps/unix/sysv/linux/sparc/pthread_barrier_destroy.c: New file. * sysdeps/unix/sysv/linux/sparc/pthread_barrier_init.c: New file. * sysdeps/unix/sysv/linux/sparc/pthread_barrier_wait.c: New file. * sysdeps/unix/sysv/linux/sparc/sparc32/lowlevellock.c (__lll_lock_wait_private): New function. (__lll_lock_wait, __lll_timedlock_wait): Add private argument, pass it to lll_futex_*wait. Don't compile in for libc.so. * sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_init.c: Remove. * sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_wait.c (struct sparc_pthread_barrier): Remove. (pthread_barrier_wait): Use union sparc_pthread_barrier instead of struct sparc_pthread_barrier. Pass ibarrier->s.pshared ? LLL_SHARED : LLL_PRIVATE to lll_{,un}lock and lll_futex_wait macros. * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_init.c: Remove. * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_wait.c: Include sparc pthread_barrier_wait.c instead of generic one.
2007-08-01 06:47:26 +02:00
call __lll_unlock_wake
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
movl %esi, %eax
jmp 14b
cfi_adjust_cfa_offset(FRAME_SIZE)
/* Unlock in loop requires wakeup. */
3:
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
#if cond_lock == 0
movl %ebx, %eax
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
#else
leal cond_lock(%ebx), %eax
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
#endif
#if (LLL_SHARED-LLL_PRIVATE) > 255
xorl %ecx, %ecx
#endif
cmpl $-1, dep_mutex(%ebx)
setne %cl
subl $1, %ecx
andl $(LLL_SHARED-LLL_PRIVATE), %ecx
#if LLL_PRIVATE != 0
addl $LLL_PRIVATE, %ecx
#endif
call __lll_unlock_wake
jmp 4b
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
/* Locking in loop failed. */
5:
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
#if cond_lock == 0
movl %ebx, %edx
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
#else
leal cond_lock(%ebx), %edx
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
#endif
#if (LLL_SHARED-LLL_PRIVATE) > 255
xorl %ecx, %ecx
#endif
cmpl $-1, dep_mutex(%ebx)
setne %cl
subl $1, %ecx
andl $(LLL_SHARED-LLL_PRIVATE), %ecx
#if LLL_PRIVATE != 0
addl $LLL_PRIVATE, %ecx
#endif
call __lll_lock_wait
jmp 6b
/* Unlock after loop requires wakeup. */
10:
#if cond_lock == 0
movl %ebx, %eax
#else
leal cond_lock(%ebx), %eax
#endif
#if (LLL_SHARED-LLL_PRIVATE) > 255
xorl %ecx, %ecx
#endif
cmpl $-1, dep_mutex(%ebx)
setne %cl
subl $1, %ecx
andl $(LLL_SHARED-LLL_PRIVATE), %ecx
#if LLL_PRIVATE != 0
addl $LLL_PRIVATE, %ecx
#endif
* sysdeps/unix/sysv/linux/powerpc/sem_post.c (__new_sem_post): Use __asm __volatile (__lll_acq_instr ::: "memory") instead of atomic_full_barrier. 2007-07-31 Jakub Jelinek <jakub@redhat.com> * allocatestack.c (stack_cache_lock): Change type to int. (get_cached_stack, allocate_stack, __deallocate_stack, __make_stacks_executable, __find_thread_by_id, __nptl_setxid, __pthread_init_static_tls, __wait_lookup_done): Add LLL_PRIVATE as second argument to lll_lock and lll_unlock macros on stack_cache_lock. * pthread_create.c (__find_in_stack_list): Likewise. (start_thread): Similarly with pd->lock. Use lll_robust_dead macro instead of lll_robust_mutex_dead, pass LLL_SHARED to it as second argument. * descr.h (struct pthread): Change lock and setxid_futex field type to int. * old_pthread_cond_broadcast.c (__pthread_cond_broadcast_2_0): Use LLL_LOCK_INITIALIZER instead of LLL_MUTEX_LOCK_INITIALIZER. * old_pthread_cond_signal.c (__pthread_cond_signal_2_0): Likewise. * old_pthread_cond_timedwait.c (__pthread_cond_timedwait_2_0): Likewise. * old_pthread_cond_wait.c (__pthread_cond_wait_2_0): Likewise. * pthread_cond_init.c (__pthread_cond_init): Likewise. * pthreadP.h (__attr_list_lock): Change type to int. * pthread_attr_init.c (__attr_list_lock): Likewise. * pthread_barrier_destroy.c (pthread_barrier_destroy): Pass ibarrier->private ^ FUTEX_PRIVATE_FLAG as second argument to lll_{,un}lock. * pthread_barrier_wait.c (pthread_barrier_wait): Likewise and also for lll_futex_{wake,wait}. * pthread_barrier_init.c (pthread_barrier_init): Make iattr a pointer to const. * pthread_cond_broadcast.c (__pthread_cond_broadcast): Pass LLL_SHARED as second argument to lll_{,un}lock. * pthread_cond_destroy.c (__pthread_cond_destroy): Likewise. * pthread_cond_signal.c (__pthread_cond_singal): Likewise. * pthread_cond_timedwait.c (__pthread_cond_timedwait): Likewise. * pthread_cond_wait.c (__condvar_cleanup, __pthread_cond_wait): Likewise. * pthread_getattr_np.c (pthread_getattr_np): Add LLL_PRIVATE as second argument to lll_{,un}lock macros on pd->lock. * pthread_getschedparam.c (__pthread_getschedparam): Likewise. * pthread_setschedparam.c (__pthread_setschedparam): Likewise. * pthread_setschedprio.c (pthread_setschedprio): Likewise. * tpp.c (__pthread_tpp_change_priority, __pthread_current_priority): Likewise. * sysdeps/pthread/createthread.c (do_clone, create_thread): Likewise. * pthread_once.c (once_lock): Change type to int. (__pthread_once): Pass LLL_PRIVATE as second argument to lll_{,un}lock macros on once_lock. * pthread_rwlock_rdlock.c (__pthread_rwlock_rdlock): Use lll_{,un}lock macros instead of lll_mutex_{,un}lock, pass rwlock->__data.__shared as second argument to them and similarly for lll_futex_w*. * pthread_rwlock_timedrdlock.c (pthread_rwlock_timedrdlock): Likewise. * pthread_rwlock_timedwrlock.c (pthread_rwlock_timedwrlock): Likewise. * pthread_rwlock_tryrdlock.c (__pthread_rwlock_tryrdlock): Likewise. * pthread_rwlock_trywrlock.c (__pthread_rwlock_trywrlock): Likewise. * pthread_rwlock_unlock.c (__pthread_rwlock_unlock): Likewise. * pthread_rwlock_wrlock.c (__pthread_rwlock_wrlock): Likewise. * sem_close.c (sem_close): Pass LLL_PRIVATE as second argument to lll_{,un}lock macros on __sem_mappings_lock. * sem_open.c (check_add_mapping): Likewise. (__sem_mappings_lock): Change type to int. * semaphoreP.h (__sem_mappings_lock): Likewise. * pthread_mutex_lock.c (LLL_MUTEX_LOCK, LLL_MUTEX_TRYLOCK, LLL_ROBUST_MUTEX_LOCK): Use lll_{,try,robust_}lock macros instead of lll_*mutex_*, pass LLL_SHARED as last argument. (__pthread_mutex_lock): Use lll_unlock instead of lll_mutex_unlock, pass LLL_SHARED as last argument. * sysdeps/unix/sysv/linux/pthread_mutex_cond_lock.c (LLL_MUTEX_LOCK, LLL_MUTEX_TRYLOCK, LLL_ROBUST_MUTEX_LOCK): Use lll_{cond_,cond_try,robust_cond}lock macros instead of lll_*mutex_*, pass LLL_SHARED as last argument. * pthread_mutex_timedlock.c (pthread_mutex_timedlock): Use lll_{timed,try,robust_timed,un}lock instead of lll_*mutex*, pass LLL_SHARED as last argument. * pthread_mutex_trylock.c (__pthread_mutex_trylock): Similarly. * pthread_mutex_unlock.c (__pthread_mutex_unlock_usercnt): Similarly. * sysdeps/pthread/bits/libc-lock.h (__libc_lock_lock, __libc_lock_lock_recursive, __libc_lock_unlock, __libc_lock_unlock_recursive): Pass LLL_PRIVATE as second argument to lll_{,un}lock. * sysdeps/pthread/bits/stdio-lock.h (_IO_lock_lock, _IO_lock_unlock): Likewise. * sysdeps/unix/sysv/linux/fork.c (__libc_fork): Don't use compound literal. * sysdeps/unix/sysv/linux/unregister-atfork.c (__unregister_atfork): Pass LLL_PRIVATE as second argument to lll_{,un}lock macros on __fork_lock. * sysdeps/unix/sysv/linux/register-atfork.c (__register_atfork, free_mem): Likewise. (__fork_lock): Change type to int. * sysdeps/unix/sysv/linux/fork.h (__fork_lock): Likewise. * sysdeps/unix/sysv/linux/sem_post.c (__new_sem_post): Pass isem->private ^ FUTEX_PRIVATE_FLAG as second argument to lll_futex_wake. * sysdeps/unix/sysv/linux/sem_timedwait.c (sem_timedwait): Likewise. * sysdeps/unix/sysv/linux/sem_wait.c (__new_sem_wait): Likewise. * sysdeps/unix/sysv/linux/lowlevellock.c (__lll_lock_wait_private): New function. (__lll_lock_wait, __lll_timedlock_wait): Add private argument and pass it through to lll_futex_*wait, only compile in when IS_IN_libpthread. * sysdeps/unix/sysv/linux/lowlevelrobustlock.c (__lll_robust_lock_wait, __lll_robust_timedlock_wait): Add private argument and pass it through to lll_futex_*wait. * sysdeps/unix/sysv/linux/alpha/lowlevellock.h: Renamed all lll_mutex_* resp. lll_robust_mutex_* macros to lll_* resp. lll_robust_*. Renamed all __lll_mutex_* resp. __lll_robust_mutex_* inline functions to __lll_* resp. __lll_robust_*. (LLL_MUTEX_LOCK_INITIALIZER): Remove. (lll_mutex_dead): Add private argument. (__lll_lock_wait_private): New prototype. (__lll_lock_wait, __lll_robust_lock_wait, __lll_lock_timedwait, __lll_robust_lock_timedwait): Add private argument to prototypes. (__lll_lock): Add private argument, if it is constant LLL_PRIVATE, call __lll_lock_wait_private, otherwise pass private to __lll_lock_wait. (__lll_robust_lock, __lll_cond_lock, __lll_timedlock, __lll_robust_timedlock): Add private argument, pass it to __lll_*wait functions. (__lll_unlock): Add private argument, if it is constant LLL_PRIVATE, call __lll_unlock_wake_private, otherwise pass private to __lll_unlock_wake. (__lll_robust_unlock): Add private argument, pass it to __lll_robust_unlock_wake. (lll_lock, lll_robust_lock, lll_cond_lock, lll_timedlock, lll_robust_timedlock, lll_unlock, lll_robust_unlock): Add private argument, pass it through to __lll_* inline function. (__lll_mutex_unlock_force, lll_mutex_unlock_force): Remove. (lll_lock_t): Remove. (__lll_cond_wait, __lll_cond_timedwait, __lll_cond_wake, __lll_cond_broadcast, lll_cond_wait, lll_cond_timedwait, lll_cond_wake, lll_cond_broadcast): Remove. * sysdeps/unix/sysv/linux/ia64/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/powerpc/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/s390/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/sparc/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/i386/lowlevellock.h: Allow including the header from assembler. Renamed all lll_mutex_* resp. lll_robust_mutex_* macros to lll_* resp. lll_robust_*. (LOCK, FUTEX_CMP_REQUEUE, FUTEX_WAKE_OP, FUTEX_OP_CLEAR_WAKE_IF_GT_ONE): Define. (LLL_MUTEX_LOCK_INITIALIZER, LLL_MUTEX_LOCK_INITIALIZER_LOCKED, LLL_MUTEX_LOCK_INITIALIZER_WAITERS): Remove. (__lll_mutex_lock_wait, __lll_mutex_timedlock_wait, __lll_mutex_unlock_wake, __lll_lock_wait, __lll_unlock_wake): Remove prototype. (__lll_trylock_asm, __lll_lock_asm_start, __lll_unlock_asm): Define. (lll_robust_trylock, lll_cond_trylock): Use LLL_LOCK_INITIALIZER* rather than LLL_MUTEX_LOCK_INITIALIZER* macros. (lll_trylock): Likewise, use __lll_trylock_asm, pass MULTIPLE_THREADS_OFFSET as another asm operand. (lll_lock): Add private argument, use __lll_lock_asm_start, pass MULTIPLE_THREADS_OFFSET as last asm operand, call __lll_lock_wait_private if private is constant LLL_PRIVATE, otherwise pass private as another argument to __lll_lock_wait. (lll_robust_lock, lll_cond_lock, lll_robust_cond_lock, lll_timedlock, lll_robust_timedlock): Add private argument, pass private as another argument to __lll_*lock_wait call. (lll_unlock): Add private argument, use __lll_unlock_asm, pass MULTIPLE_THREADS_OFFSET as another asm operand, call __lll_unlock_wake_private if private is constant LLL_PRIVATE, otherwise pass private as another argument to __lll_unlock_wake. (lll_robust_unlock): Add private argument, pass private as another argument to __lll_unlock_wake. (lll_robust_dead): Add private argument, use __lll_private_flag macro. (lll_islocked): Use LLL_LOCK_INITIALIZER instead of LLL_MUTEX_LOCK_INITIALIZER. (lll_lock_t): Remove. (LLL_LOCK_INITIALIZER_WAITERS): Define. (__lll_cond_wait, __lll_cond_timedwait, __lll_cond_wake, __lll_cond_broadcast, lll_cond_wait, lll_cond_timedwait, lll_cond_wake, lll_cond_broadcast): Remove. * sysdeps/unix/sysv/linux/x86_64/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S: Revert 2007-05-2{3,9} changes. * sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S: Include kernel-features.h and lowlevellock.h. (LOAD_PRIVATE_FUTEX_WAIT): Define. (LOAD_FUTEX_WAIT): Rewritten. (LOCK, SYS_gettimeofday, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_lock_wait_private, __lll_unlock_wake_private): New functions. (__lll_mutex_lock_wait): Rename to ... (__lll_lock_wait): ... this. Take futex addr from %edx instead of %ecx, %ecx is now private argument. Don't compile in for libc.so. (__lll_mutex_timedlock_wait): Rename to ... (__lll_timedlock_wait): ... this. Use __NR_gettimeofday. %esi contains private argument. Don't compile in for libc.so. (__lll_mutex_unlock_wake): Rename to ... (__lll_unlock_wake): ... this. %ecx contains private argument. Don't compile in for libc.so. (__lll_timedwait_tid): Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S: Include kernel-features.h and lowlevellock.h. (LOAD_FUTEX_WAIT): Define. (LOCK, SYS_gettimeofday, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_robust_mutex_lock_wait): Rename to ... (__lll_robust_lock_wait): ... this. Futex addr is now in %edx argument, %ecx argument contains private. Use LOAD_FUTEX_WAIT macro. (__lll_robust_mutex_timedlock_wait): Rename to ... (__lll_robust_timedlock_wait): ... this. Use __NR_gettimeofday. %esi argument contains private, use LOAD_FUTEX_WAIT macro. * sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (pthread_barrier_wait): Rename __lll_mutex_* to __lll_*, pass PRIVATE(%ebx) ^ LLL_SHARED as private argument in %ecx to __lll_lock_wait and __lll_unlock_wake, pass MUTEX(%ebx) address to __lll_lock_wait in %edx. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_REQUEUE, FUTEX_CMP_REQUEUE, EINVAL, LOCK): Don't define. (__pthread_cond_broadcast): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_WAKE_OP, FUTEX_OP_CLEAR_WAKE_IF_GT_ONE, EINVAL, LOCK): Don't define. (__pthread_cond_signal): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S: Include lowlevellock.h. (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_timedwait): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_wait, __condvar_w_cleanup): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_rdlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebx) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebx) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S: Include lowlevellock.h. (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebp) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebp) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S: Include lowlevellock.h. (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebp) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebp) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_unlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%edi) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%edi) in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebx) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebx) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. * sysdeps/unix/sysv/linux/i386/pthread_once.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG): Don't define. * sysdeps/unix/sysv/linux/i386/i486/sem_post.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAKE): Don't define. * sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S: Include lowlevellock.h. (LOCK, SYS_futex, SYS_gettimeofday, FUTEX_WAIT): Don't define. (sem_timedwait): Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/sem_trywait.S: Include lowlevellock.h. (LOCK): Don't define. * sysdeps/unix/sysv/linux/i386/i486/sem_wait.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT): Don't define. * sysdeps/unix/sysv/linux/powerpc/sem_post.c: Wake only when there are waiters. * sysdeps/unix/sysv/linux/x86_64/libc-lowlevellock.S: Revert 2007-05-2{3,9} changes. * sysdeps/unix/sysv/linux/x86_64/lowlevellock.S: Include kernel-features.h and lowlevellock.h. (LOAD_PRIVATE_FUTEX_WAIT): Define. (LOAD_FUTEX_WAIT): Rewritten. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_lock_wait_private, __lll_unlock_wake_private): New functions. (__lll_mutex_lock_wait): Rename to ... (__lll_lock_wait): ... this. %esi is now private argument. Don't compile in for libc.so. (__lll_mutex_timedlock_wait): Rename to ... (__lll_timedlock_wait): ... this. %esi contains private argument. Don't compile in for libc.so. (__lll_mutex_unlock_wake): Rename to ... (__lll_unlock_wake): ... this. %esi contains private argument. Don't compile in for libc.so. * sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S: Include kernel-features.h and lowlevellock.h. (LOAD_FUTEX_WAIT): Define. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_robust_mutex_lock_wait): Rename to ... (__lll_robust_lock_wait): ... this. %esi argument contains private. Use LOAD_FUTEX_WAIT macro. (__lll_robust_mutex_timedlock_wait): Rename to ... (__lll_robust_timedlock_wait): ... this. %esi argument contains private, use LOAD_FUTEX_WAIT macro. * sysdeps/unix/sysv/linux/x86_64/pthread_barrier_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (pthread_barrier_wait): Rename __lll_mutex_* to __lll_*, pass PRIVATE(%rdi) ^ LLL_SHARED as private argument in %esi to __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_REQUEUE, FUTEX_CMP_REQUEUE, EINVAL, LOCK): Don't define. (__pthread_cond_broadcast): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_WAKE_OP, FUTEX_OP_CLEAR_WAKE_IF_GT_ONE, EINVAL, LOCK): Don't define. (__pthread_cond_signal): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_timedwait): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_wait, __condvar_cleanup): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_rdlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_unlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_once.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_post.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAKE): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_trywait.S: Include lowlevellock.h. (LOCK): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_wait.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT): Don't define. * sysdeps/unix/sysv/linux/sparc/internaltypes.h: New file. * sysdeps/unix/sysv/linux/sparc/pthread_barrier_destroy.c: New file. * sysdeps/unix/sysv/linux/sparc/pthread_barrier_init.c: New file. * sysdeps/unix/sysv/linux/sparc/pthread_barrier_wait.c: New file. * sysdeps/unix/sysv/linux/sparc/sparc32/lowlevellock.c (__lll_lock_wait_private): New function. (__lll_lock_wait, __lll_timedlock_wait): Add private argument, pass it to lll_futex_*wait. Don't compile in for libc.so. * sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_init.c: Remove. * sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_wait.c (struct sparc_pthread_barrier): Remove. (pthread_barrier_wait): Use union sparc_pthread_barrier instead of struct sparc_pthread_barrier. Pass ibarrier->s.pshared ? LLL_SHARED : LLL_PRIVATE to lll_{,un}lock and lll_futex_wait macros. * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_init.c: Remove. * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_wait.c: Include sparc pthread_barrier_wait.c instead of generic one.
2007-08-01 06:47:26 +02:00
call __lll_unlock_wake
jmp 11b
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
.size __pthread_cond_wait, .-__pthread_cond_wait
versioned_symbol (libpthread, __pthread_cond_wait, pthread_cond_wait,
GLIBC_2_3_2)
.type __condvar_w_cleanup2, @function
__condvar_w_cleanup2:
subl $cond_futex, %ebx
.size __condvar_w_cleanup2, .-__condvar_w_cleanup2
.LSbl4:
.type __condvar_w_cleanup, @function
__condvar_w_cleanup:
movl %eax, %esi
/* Get internal lock. */
movl $1, %edx
xorl %eax, %eax
LOCK
#if cond_lock == 0
cmpxchgl %edx, (%ebx)
#else
cmpxchgl %edx, cond_lock(%ebx)
#endif
Update. * sysdeps/unix/sysv/linux/x86_64/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/x86_64/lowlevellock.S: Likewise. * sysdeps/unix/sysv/linux/x86_64/lowlevelmutex.S: Removed. * sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S: Adjust for new mutex implementation. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S: Likewise. * sysdeps/unix/sysv/linux/x86_64/pthread_barrier_wait.S: Likewise * sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S: Likewise. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S: Likewise. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S: Likewise. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S: Likewise. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S: Likewise. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S: Likewise. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S: Likewise. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S: Likewise. Don't use requeue. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S: Likewise.
2003-09-22 06:41:12 +02:00
jz 1f
#if cond_lock == 0
* sysdeps/unix/sysv/linux/powerpc/sem_post.c (__new_sem_post): Use __asm __volatile (__lll_acq_instr ::: "memory") instead of atomic_full_barrier. 2007-07-31 Jakub Jelinek <jakub@redhat.com> * allocatestack.c (stack_cache_lock): Change type to int. (get_cached_stack, allocate_stack, __deallocate_stack, __make_stacks_executable, __find_thread_by_id, __nptl_setxid, __pthread_init_static_tls, __wait_lookup_done): Add LLL_PRIVATE as second argument to lll_lock and lll_unlock macros on stack_cache_lock. * pthread_create.c (__find_in_stack_list): Likewise. (start_thread): Similarly with pd->lock. Use lll_robust_dead macro instead of lll_robust_mutex_dead, pass LLL_SHARED to it as second argument. * descr.h (struct pthread): Change lock and setxid_futex field type to int. * old_pthread_cond_broadcast.c (__pthread_cond_broadcast_2_0): Use LLL_LOCK_INITIALIZER instead of LLL_MUTEX_LOCK_INITIALIZER. * old_pthread_cond_signal.c (__pthread_cond_signal_2_0): Likewise. * old_pthread_cond_timedwait.c (__pthread_cond_timedwait_2_0): Likewise. * old_pthread_cond_wait.c (__pthread_cond_wait_2_0): Likewise. * pthread_cond_init.c (__pthread_cond_init): Likewise. * pthreadP.h (__attr_list_lock): Change type to int. * pthread_attr_init.c (__attr_list_lock): Likewise. * pthread_barrier_destroy.c (pthread_barrier_destroy): Pass ibarrier->private ^ FUTEX_PRIVATE_FLAG as second argument to lll_{,un}lock. * pthread_barrier_wait.c (pthread_barrier_wait): Likewise and also for lll_futex_{wake,wait}. * pthread_barrier_init.c (pthread_barrier_init): Make iattr a pointer to const. * pthread_cond_broadcast.c (__pthread_cond_broadcast): Pass LLL_SHARED as second argument to lll_{,un}lock. * pthread_cond_destroy.c (__pthread_cond_destroy): Likewise. * pthread_cond_signal.c (__pthread_cond_singal): Likewise. * pthread_cond_timedwait.c (__pthread_cond_timedwait): Likewise. * pthread_cond_wait.c (__condvar_cleanup, __pthread_cond_wait): Likewise. * pthread_getattr_np.c (pthread_getattr_np): Add LLL_PRIVATE as second argument to lll_{,un}lock macros on pd->lock. * pthread_getschedparam.c (__pthread_getschedparam): Likewise. * pthread_setschedparam.c (__pthread_setschedparam): Likewise. * pthread_setschedprio.c (pthread_setschedprio): Likewise. * tpp.c (__pthread_tpp_change_priority, __pthread_current_priority): Likewise. * sysdeps/pthread/createthread.c (do_clone, create_thread): Likewise. * pthread_once.c (once_lock): Change type to int. (__pthread_once): Pass LLL_PRIVATE as second argument to lll_{,un}lock macros on once_lock. * pthread_rwlock_rdlock.c (__pthread_rwlock_rdlock): Use lll_{,un}lock macros instead of lll_mutex_{,un}lock, pass rwlock->__data.__shared as second argument to them and similarly for lll_futex_w*. * pthread_rwlock_timedrdlock.c (pthread_rwlock_timedrdlock): Likewise. * pthread_rwlock_timedwrlock.c (pthread_rwlock_timedwrlock): Likewise. * pthread_rwlock_tryrdlock.c (__pthread_rwlock_tryrdlock): Likewise. * pthread_rwlock_trywrlock.c (__pthread_rwlock_trywrlock): Likewise. * pthread_rwlock_unlock.c (__pthread_rwlock_unlock): Likewise. * pthread_rwlock_wrlock.c (__pthread_rwlock_wrlock): Likewise. * sem_close.c (sem_close): Pass LLL_PRIVATE as second argument to lll_{,un}lock macros on __sem_mappings_lock. * sem_open.c (check_add_mapping): Likewise. (__sem_mappings_lock): Change type to int. * semaphoreP.h (__sem_mappings_lock): Likewise. * pthread_mutex_lock.c (LLL_MUTEX_LOCK, LLL_MUTEX_TRYLOCK, LLL_ROBUST_MUTEX_LOCK): Use lll_{,try,robust_}lock macros instead of lll_*mutex_*, pass LLL_SHARED as last argument. (__pthread_mutex_lock): Use lll_unlock instead of lll_mutex_unlock, pass LLL_SHARED as last argument. * sysdeps/unix/sysv/linux/pthread_mutex_cond_lock.c (LLL_MUTEX_LOCK, LLL_MUTEX_TRYLOCK, LLL_ROBUST_MUTEX_LOCK): Use lll_{cond_,cond_try,robust_cond}lock macros instead of lll_*mutex_*, pass LLL_SHARED as last argument. * pthread_mutex_timedlock.c (pthread_mutex_timedlock): Use lll_{timed,try,robust_timed,un}lock instead of lll_*mutex*, pass LLL_SHARED as last argument. * pthread_mutex_trylock.c (__pthread_mutex_trylock): Similarly. * pthread_mutex_unlock.c (__pthread_mutex_unlock_usercnt): Similarly. * sysdeps/pthread/bits/libc-lock.h (__libc_lock_lock, __libc_lock_lock_recursive, __libc_lock_unlock, __libc_lock_unlock_recursive): Pass LLL_PRIVATE as second argument to lll_{,un}lock. * sysdeps/pthread/bits/stdio-lock.h (_IO_lock_lock, _IO_lock_unlock): Likewise. * sysdeps/unix/sysv/linux/fork.c (__libc_fork): Don't use compound literal. * sysdeps/unix/sysv/linux/unregister-atfork.c (__unregister_atfork): Pass LLL_PRIVATE as second argument to lll_{,un}lock macros on __fork_lock. * sysdeps/unix/sysv/linux/register-atfork.c (__register_atfork, free_mem): Likewise. (__fork_lock): Change type to int. * sysdeps/unix/sysv/linux/fork.h (__fork_lock): Likewise. * sysdeps/unix/sysv/linux/sem_post.c (__new_sem_post): Pass isem->private ^ FUTEX_PRIVATE_FLAG as second argument to lll_futex_wake. * sysdeps/unix/sysv/linux/sem_timedwait.c (sem_timedwait): Likewise. * sysdeps/unix/sysv/linux/sem_wait.c (__new_sem_wait): Likewise. * sysdeps/unix/sysv/linux/lowlevellock.c (__lll_lock_wait_private): New function. (__lll_lock_wait, __lll_timedlock_wait): Add private argument and pass it through to lll_futex_*wait, only compile in when IS_IN_libpthread. * sysdeps/unix/sysv/linux/lowlevelrobustlock.c (__lll_robust_lock_wait, __lll_robust_timedlock_wait): Add private argument and pass it through to lll_futex_*wait. * sysdeps/unix/sysv/linux/alpha/lowlevellock.h: Renamed all lll_mutex_* resp. lll_robust_mutex_* macros to lll_* resp. lll_robust_*. Renamed all __lll_mutex_* resp. __lll_robust_mutex_* inline functions to __lll_* resp. __lll_robust_*. (LLL_MUTEX_LOCK_INITIALIZER): Remove. (lll_mutex_dead): Add private argument. (__lll_lock_wait_private): New prototype. (__lll_lock_wait, __lll_robust_lock_wait, __lll_lock_timedwait, __lll_robust_lock_timedwait): Add private argument to prototypes. (__lll_lock): Add private argument, if it is constant LLL_PRIVATE, call __lll_lock_wait_private, otherwise pass private to __lll_lock_wait. (__lll_robust_lock, __lll_cond_lock, __lll_timedlock, __lll_robust_timedlock): Add private argument, pass it to __lll_*wait functions. (__lll_unlock): Add private argument, if it is constant LLL_PRIVATE, call __lll_unlock_wake_private, otherwise pass private to __lll_unlock_wake. (__lll_robust_unlock): Add private argument, pass it to __lll_robust_unlock_wake. (lll_lock, lll_robust_lock, lll_cond_lock, lll_timedlock, lll_robust_timedlock, lll_unlock, lll_robust_unlock): Add private argument, pass it through to __lll_* inline function. (__lll_mutex_unlock_force, lll_mutex_unlock_force): Remove. (lll_lock_t): Remove. (__lll_cond_wait, __lll_cond_timedwait, __lll_cond_wake, __lll_cond_broadcast, lll_cond_wait, lll_cond_timedwait, lll_cond_wake, lll_cond_broadcast): Remove. * sysdeps/unix/sysv/linux/ia64/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/powerpc/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/s390/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/sparc/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/i386/lowlevellock.h: Allow including the header from assembler. Renamed all lll_mutex_* resp. lll_robust_mutex_* macros to lll_* resp. lll_robust_*. (LOCK, FUTEX_CMP_REQUEUE, FUTEX_WAKE_OP, FUTEX_OP_CLEAR_WAKE_IF_GT_ONE): Define. (LLL_MUTEX_LOCK_INITIALIZER, LLL_MUTEX_LOCK_INITIALIZER_LOCKED, LLL_MUTEX_LOCK_INITIALIZER_WAITERS): Remove. (__lll_mutex_lock_wait, __lll_mutex_timedlock_wait, __lll_mutex_unlock_wake, __lll_lock_wait, __lll_unlock_wake): Remove prototype. (__lll_trylock_asm, __lll_lock_asm_start, __lll_unlock_asm): Define. (lll_robust_trylock, lll_cond_trylock): Use LLL_LOCK_INITIALIZER* rather than LLL_MUTEX_LOCK_INITIALIZER* macros. (lll_trylock): Likewise, use __lll_trylock_asm, pass MULTIPLE_THREADS_OFFSET as another asm operand. (lll_lock): Add private argument, use __lll_lock_asm_start, pass MULTIPLE_THREADS_OFFSET as last asm operand, call __lll_lock_wait_private if private is constant LLL_PRIVATE, otherwise pass private as another argument to __lll_lock_wait. (lll_robust_lock, lll_cond_lock, lll_robust_cond_lock, lll_timedlock, lll_robust_timedlock): Add private argument, pass private as another argument to __lll_*lock_wait call. (lll_unlock): Add private argument, use __lll_unlock_asm, pass MULTIPLE_THREADS_OFFSET as another asm operand, call __lll_unlock_wake_private if private is constant LLL_PRIVATE, otherwise pass private as another argument to __lll_unlock_wake. (lll_robust_unlock): Add private argument, pass private as another argument to __lll_unlock_wake. (lll_robust_dead): Add private argument, use __lll_private_flag macro. (lll_islocked): Use LLL_LOCK_INITIALIZER instead of LLL_MUTEX_LOCK_INITIALIZER. (lll_lock_t): Remove. (LLL_LOCK_INITIALIZER_WAITERS): Define. (__lll_cond_wait, __lll_cond_timedwait, __lll_cond_wake, __lll_cond_broadcast, lll_cond_wait, lll_cond_timedwait, lll_cond_wake, lll_cond_broadcast): Remove. * sysdeps/unix/sysv/linux/x86_64/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S: Revert 2007-05-2{3,9} changes. * sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S: Include kernel-features.h and lowlevellock.h. (LOAD_PRIVATE_FUTEX_WAIT): Define. (LOAD_FUTEX_WAIT): Rewritten. (LOCK, SYS_gettimeofday, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_lock_wait_private, __lll_unlock_wake_private): New functions. (__lll_mutex_lock_wait): Rename to ... (__lll_lock_wait): ... this. Take futex addr from %edx instead of %ecx, %ecx is now private argument. Don't compile in for libc.so. (__lll_mutex_timedlock_wait): Rename to ... (__lll_timedlock_wait): ... this. Use __NR_gettimeofday. %esi contains private argument. Don't compile in for libc.so. (__lll_mutex_unlock_wake): Rename to ... (__lll_unlock_wake): ... this. %ecx contains private argument. Don't compile in for libc.so. (__lll_timedwait_tid): Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S: Include kernel-features.h and lowlevellock.h. (LOAD_FUTEX_WAIT): Define. (LOCK, SYS_gettimeofday, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_robust_mutex_lock_wait): Rename to ... (__lll_robust_lock_wait): ... this. Futex addr is now in %edx argument, %ecx argument contains private. Use LOAD_FUTEX_WAIT macro. (__lll_robust_mutex_timedlock_wait): Rename to ... (__lll_robust_timedlock_wait): ... this. Use __NR_gettimeofday. %esi argument contains private, use LOAD_FUTEX_WAIT macro. * sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (pthread_barrier_wait): Rename __lll_mutex_* to __lll_*, pass PRIVATE(%ebx) ^ LLL_SHARED as private argument in %ecx to __lll_lock_wait and __lll_unlock_wake, pass MUTEX(%ebx) address to __lll_lock_wait in %edx. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_REQUEUE, FUTEX_CMP_REQUEUE, EINVAL, LOCK): Don't define. (__pthread_cond_broadcast): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_WAKE_OP, FUTEX_OP_CLEAR_WAKE_IF_GT_ONE, EINVAL, LOCK): Don't define. (__pthread_cond_signal): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S: Include lowlevellock.h. (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_timedwait): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_wait, __condvar_w_cleanup): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_rdlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebx) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebx) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S: Include lowlevellock.h. (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebp) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebp) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S: Include lowlevellock.h. (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebp) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebp) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_unlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%edi) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%edi) in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebx) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebx) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. * sysdeps/unix/sysv/linux/i386/pthread_once.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG): Don't define. * sysdeps/unix/sysv/linux/i386/i486/sem_post.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAKE): Don't define. * sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S: Include lowlevellock.h. (LOCK, SYS_futex, SYS_gettimeofday, FUTEX_WAIT): Don't define. (sem_timedwait): Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/sem_trywait.S: Include lowlevellock.h. (LOCK): Don't define. * sysdeps/unix/sysv/linux/i386/i486/sem_wait.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT): Don't define. * sysdeps/unix/sysv/linux/powerpc/sem_post.c: Wake only when there are waiters. * sysdeps/unix/sysv/linux/x86_64/libc-lowlevellock.S: Revert 2007-05-2{3,9} changes. * sysdeps/unix/sysv/linux/x86_64/lowlevellock.S: Include kernel-features.h and lowlevellock.h. (LOAD_PRIVATE_FUTEX_WAIT): Define. (LOAD_FUTEX_WAIT): Rewritten. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_lock_wait_private, __lll_unlock_wake_private): New functions. (__lll_mutex_lock_wait): Rename to ... (__lll_lock_wait): ... this. %esi is now private argument. Don't compile in for libc.so. (__lll_mutex_timedlock_wait): Rename to ... (__lll_timedlock_wait): ... this. %esi contains private argument. Don't compile in for libc.so. (__lll_mutex_unlock_wake): Rename to ... (__lll_unlock_wake): ... this. %esi contains private argument. Don't compile in for libc.so. * sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S: Include kernel-features.h and lowlevellock.h. (LOAD_FUTEX_WAIT): Define. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_robust_mutex_lock_wait): Rename to ... (__lll_robust_lock_wait): ... this. %esi argument contains private. Use LOAD_FUTEX_WAIT macro. (__lll_robust_mutex_timedlock_wait): Rename to ... (__lll_robust_timedlock_wait): ... this. %esi argument contains private, use LOAD_FUTEX_WAIT macro. * sysdeps/unix/sysv/linux/x86_64/pthread_barrier_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (pthread_barrier_wait): Rename __lll_mutex_* to __lll_*, pass PRIVATE(%rdi) ^ LLL_SHARED as private argument in %esi to __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_REQUEUE, FUTEX_CMP_REQUEUE, EINVAL, LOCK): Don't define. (__pthread_cond_broadcast): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_WAKE_OP, FUTEX_OP_CLEAR_WAKE_IF_GT_ONE, EINVAL, LOCK): Don't define. (__pthread_cond_signal): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_timedwait): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_wait, __condvar_cleanup): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_rdlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_unlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_once.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_post.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAKE): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_trywait.S: Include lowlevellock.h. (LOCK): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_wait.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT): Don't define. * sysdeps/unix/sysv/linux/sparc/internaltypes.h: New file. * sysdeps/unix/sysv/linux/sparc/pthread_barrier_destroy.c: New file. * sysdeps/unix/sysv/linux/sparc/pthread_barrier_init.c: New file. * sysdeps/unix/sysv/linux/sparc/pthread_barrier_wait.c: New file. * sysdeps/unix/sysv/linux/sparc/sparc32/lowlevellock.c (__lll_lock_wait_private): New function. (__lll_lock_wait, __lll_timedlock_wait): Add private argument, pass it to lll_futex_*wait. Don't compile in for libc.so. * sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_init.c: Remove. * sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_wait.c (struct sparc_pthread_barrier): Remove. (pthread_barrier_wait): Use union sparc_pthread_barrier instead of struct sparc_pthread_barrier. Pass ibarrier->s.pshared ? LLL_SHARED : LLL_PRIVATE to lll_{,un}lock and lll_futex_wait macros. * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_init.c: Remove. * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_wait.c: Include sparc pthread_barrier_wait.c instead of generic one.
2007-08-01 06:47:26 +02:00
movl %ebx, %edx
#else
* sysdeps/unix/sysv/linux/powerpc/sem_post.c (__new_sem_post): Use __asm __volatile (__lll_acq_instr ::: "memory") instead of atomic_full_barrier. 2007-07-31 Jakub Jelinek <jakub@redhat.com> * allocatestack.c (stack_cache_lock): Change type to int. (get_cached_stack, allocate_stack, __deallocate_stack, __make_stacks_executable, __find_thread_by_id, __nptl_setxid, __pthread_init_static_tls, __wait_lookup_done): Add LLL_PRIVATE as second argument to lll_lock and lll_unlock macros on stack_cache_lock. * pthread_create.c (__find_in_stack_list): Likewise. (start_thread): Similarly with pd->lock. Use lll_robust_dead macro instead of lll_robust_mutex_dead, pass LLL_SHARED to it as second argument. * descr.h (struct pthread): Change lock and setxid_futex field type to int. * old_pthread_cond_broadcast.c (__pthread_cond_broadcast_2_0): Use LLL_LOCK_INITIALIZER instead of LLL_MUTEX_LOCK_INITIALIZER. * old_pthread_cond_signal.c (__pthread_cond_signal_2_0): Likewise. * old_pthread_cond_timedwait.c (__pthread_cond_timedwait_2_0): Likewise. * old_pthread_cond_wait.c (__pthread_cond_wait_2_0): Likewise. * pthread_cond_init.c (__pthread_cond_init): Likewise. * pthreadP.h (__attr_list_lock): Change type to int. * pthread_attr_init.c (__attr_list_lock): Likewise. * pthread_barrier_destroy.c (pthread_barrier_destroy): Pass ibarrier->private ^ FUTEX_PRIVATE_FLAG as second argument to lll_{,un}lock. * pthread_barrier_wait.c (pthread_barrier_wait): Likewise and also for lll_futex_{wake,wait}. * pthread_barrier_init.c (pthread_barrier_init): Make iattr a pointer to const. * pthread_cond_broadcast.c (__pthread_cond_broadcast): Pass LLL_SHARED as second argument to lll_{,un}lock. * pthread_cond_destroy.c (__pthread_cond_destroy): Likewise. * pthread_cond_signal.c (__pthread_cond_singal): Likewise. * pthread_cond_timedwait.c (__pthread_cond_timedwait): Likewise. * pthread_cond_wait.c (__condvar_cleanup, __pthread_cond_wait): Likewise. * pthread_getattr_np.c (pthread_getattr_np): Add LLL_PRIVATE as second argument to lll_{,un}lock macros on pd->lock. * pthread_getschedparam.c (__pthread_getschedparam): Likewise. * pthread_setschedparam.c (__pthread_setschedparam): Likewise. * pthread_setschedprio.c (pthread_setschedprio): Likewise. * tpp.c (__pthread_tpp_change_priority, __pthread_current_priority): Likewise. * sysdeps/pthread/createthread.c (do_clone, create_thread): Likewise. * pthread_once.c (once_lock): Change type to int. (__pthread_once): Pass LLL_PRIVATE as second argument to lll_{,un}lock macros on once_lock. * pthread_rwlock_rdlock.c (__pthread_rwlock_rdlock): Use lll_{,un}lock macros instead of lll_mutex_{,un}lock, pass rwlock->__data.__shared as second argument to them and similarly for lll_futex_w*. * pthread_rwlock_timedrdlock.c (pthread_rwlock_timedrdlock): Likewise. * pthread_rwlock_timedwrlock.c (pthread_rwlock_timedwrlock): Likewise. * pthread_rwlock_tryrdlock.c (__pthread_rwlock_tryrdlock): Likewise. * pthread_rwlock_trywrlock.c (__pthread_rwlock_trywrlock): Likewise. * pthread_rwlock_unlock.c (__pthread_rwlock_unlock): Likewise. * pthread_rwlock_wrlock.c (__pthread_rwlock_wrlock): Likewise. * sem_close.c (sem_close): Pass LLL_PRIVATE as second argument to lll_{,un}lock macros on __sem_mappings_lock. * sem_open.c (check_add_mapping): Likewise. (__sem_mappings_lock): Change type to int. * semaphoreP.h (__sem_mappings_lock): Likewise. * pthread_mutex_lock.c (LLL_MUTEX_LOCK, LLL_MUTEX_TRYLOCK, LLL_ROBUST_MUTEX_LOCK): Use lll_{,try,robust_}lock macros instead of lll_*mutex_*, pass LLL_SHARED as last argument. (__pthread_mutex_lock): Use lll_unlock instead of lll_mutex_unlock, pass LLL_SHARED as last argument. * sysdeps/unix/sysv/linux/pthread_mutex_cond_lock.c (LLL_MUTEX_LOCK, LLL_MUTEX_TRYLOCK, LLL_ROBUST_MUTEX_LOCK): Use lll_{cond_,cond_try,robust_cond}lock macros instead of lll_*mutex_*, pass LLL_SHARED as last argument. * pthread_mutex_timedlock.c (pthread_mutex_timedlock): Use lll_{timed,try,robust_timed,un}lock instead of lll_*mutex*, pass LLL_SHARED as last argument. * pthread_mutex_trylock.c (__pthread_mutex_trylock): Similarly. * pthread_mutex_unlock.c (__pthread_mutex_unlock_usercnt): Similarly. * sysdeps/pthread/bits/libc-lock.h (__libc_lock_lock, __libc_lock_lock_recursive, __libc_lock_unlock, __libc_lock_unlock_recursive): Pass LLL_PRIVATE as second argument to lll_{,un}lock. * sysdeps/pthread/bits/stdio-lock.h (_IO_lock_lock, _IO_lock_unlock): Likewise. * sysdeps/unix/sysv/linux/fork.c (__libc_fork): Don't use compound literal. * sysdeps/unix/sysv/linux/unregister-atfork.c (__unregister_atfork): Pass LLL_PRIVATE as second argument to lll_{,un}lock macros on __fork_lock. * sysdeps/unix/sysv/linux/register-atfork.c (__register_atfork, free_mem): Likewise. (__fork_lock): Change type to int. * sysdeps/unix/sysv/linux/fork.h (__fork_lock): Likewise. * sysdeps/unix/sysv/linux/sem_post.c (__new_sem_post): Pass isem->private ^ FUTEX_PRIVATE_FLAG as second argument to lll_futex_wake. * sysdeps/unix/sysv/linux/sem_timedwait.c (sem_timedwait): Likewise. * sysdeps/unix/sysv/linux/sem_wait.c (__new_sem_wait): Likewise. * sysdeps/unix/sysv/linux/lowlevellock.c (__lll_lock_wait_private): New function. (__lll_lock_wait, __lll_timedlock_wait): Add private argument and pass it through to lll_futex_*wait, only compile in when IS_IN_libpthread. * sysdeps/unix/sysv/linux/lowlevelrobustlock.c (__lll_robust_lock_wait, __lll_robust_timedlock_wait): Add private argument and pass it through to lll_futex_*wait. * sysdeps/unix/sysv/linux/alpha/lowlevellock.h: Renamed all lll_mutex_* resp. lll_robust_mutex_* macros to lll_* resp. lll_robust_*. Renamed all __lll_mutex_* resp. __lll_robust_mutex_* inline functions to __lll_* resp. __lll_robust_*. (LLL_MUTEX_LOCK_INITIALIZER): Remove. (lll_mutex_dead): Add private argument. (__lll_lock_wait_private): New prototype. (__lll_lock_wait, __lll_robust_lock_wait, __lll_lock_timedwait, __lll_robust_lock_timedwait): Add private argument to prototypes. (__lll_lock): Add private argument, if it is constant LLL_PRIVATE, call __lll_lock_wait_private, otherwise pass private to __lll_lock_wait. (__lll_robust_lock, __lll_cond_lock, __lll_timedlock, __lll_robust_timedlock): Add private argument, pass it to __lll_*wait functions. (__lll_unlock): Add private argument, if it is constant LLL_PRIVATE, call __lll_unlock_wake_private, otherwise pass private to __lll_unlock_wake. (__lll_robust_unlock): Add private argument, pass it to __lll_robust_unlock_wake. (lll_lock, lll_robust_lock, lll_cond_lock, lll_timedlock, lll_robust_timedlock, lll_unlock, lll_robust_unlock): Add private argument, pass it through to __lll_* inline function. (__lll_mutex_unlock_force, lll_mutex_unlock_force): Remove. (lll_lock_t): Remove. (__lll_cond_wait, __lll_cond_timedwait, __lll_cond_wake, __lll_cond_broadcast, lll_cond_wait, lll_cond_timedwait, lll_cond_wake, lll_cond_broadcast): Remove. * sysdeps/unix/sysv/linux/ia64/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/powerpc/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/s390/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/sparc/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/i386/lowlevellock.h: Allow including the header from assembler. Renamed all lll_mutex_* resp. lll_robust_mutex_* macros to lll_* resp. lll_robust_*. (LOCK, FUTEX_CMP_REQUEUE, FUTEX_WAKE_OP, FUTEX_OP_CLEAR_WAKE_IF_GT_ONE): Define. (LLL_MUTEX_LOCK_INITIALIZER, LLL_MUTEX_LOCK_INITIALIZER_LOCKED, LLL_MUTEX_LOCK_INITIALIZER_WAITERS): Remove. (__lll_mutex_lock_wait, __lll_mutex_timedlock_wait, __lll_mutex_unlock_wake, __lll_lock_wait, __lll_unlock_wake): Remove prototype. (__lll_trylock_asm, __lll_lock_asm_start, __lll_unlock_asm): Define. (lll_robust_trylock, lll_cond_trylock): Use LLL_LOCK_INITIALIZER* rather than LLL_MUTEX_LOCK_INITIALIZER* macros. (lll_trylock): Likewise, use __lll_trylock_asm, pass MULTIPLE_THREADS_OFFSET as another asm operand. (lll_lock): Add private argument, use __lll_lock_asm_start, pass MULTIPLE_THREADS_OFFSET as last asm operand, call __lll_lock_wait_private if private is constant LLL_PRIVATE, otherwise pass private as another argument to __lll_lock_wait. (lll_robust_lock, lll_cond_lock, lll_robust_cond_lock, lll_timedlock, lll_robust_timedlock): Add private argument, pass private as another argument to __lll_*lock_wait call. (lll_unlock): Add private argument, use __lll_unlock_asm, pass MULTIPLE_THREADS_OFFSET as another asm operand, call __lll_unlock_wake_private if private is constant LLL_PRIVATE, otherwise pass private as another argument to __lll_unlock_wake. (lll_robust_unlock): Add private argument, pass private as another argument to __lll_unlock_wake. (lll_robust_dead): Add private argument, use __lll_private_flag macro. (lll_islocked): Use LLL_LOCK_INITIALIZER instead of LLL_MUTEX_LOCK_INITIALIZER. (lll_lock_t): Remove. (LLL_LOCK_INITIALIZER_WAITERS): Define. (__lll_cond_wait, __lll_cond_timedwait, __lll_cond_wake, __lll_cond_broadcast, lll_cond_wait, lll_cond_timedwait, lll_cond_wake, lll_cond_broadcast): Remove. * sysdeps/unix/sysv/linux/x86_64/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S: Revert 2007-05-2{3,9} changes. * sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S: Include kernel-features.h and lowlevellock.h. (LOAD_PRIVATE_FUTEX_WAIT): Define. (LOAD_FUTEX_WAIT): Rewritten. (LOCK, SYS_gettimeofday, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_lock_wait_private, __lll_unlock_wake_private): New functions. (__lll_mutex_lock_wait): Rename to ... (__lll_lock_wait): ... this. Take futex addr from %edx instead of %ecx, %ecx is now private argument. Don't compile in for libc.so. (__lll_mutex_timedlock_wait): Rename to ... (__lll_timedlock_wait): ... this. Use __NR_gettimeofday. %esi contains private argument. Don't compile in for libc.so. (__lll_mutex_unlock_wake): Rename to ... (__lll_unlock_wake): ... this. %ecx contains private argument. Don't compile in for libc.so. (__lll_timedwait_tid): Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S: Include kernel-features.h and lowlevellock.h. (LOAD_FUTEX_WAIT): Define. (LOCK, SYS_gettimeofday, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_robust_mutex_lock_wait): Rename to ... (__lll_robust_lock_wait): ... this. Futex addr is now in %edx argument, %ecx argument contains private. Use LOAD_FUTEX_WAIT macro. (__lll_robust_mutex_timedlock_wait): Rename to ... (__lll_robust_timedlock_wait): ... this. Use __NR_gettimeofday. %esi argument contains private, use LOAD_FUTEX_WAIT macro. * sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (pthread_barrier_wait): Rename __lll_mutex_* to __lll_*, pass PRIVATE(%ebx) ^ LLL_SHARED as private argument in %ecx to __lll_lock_wait and __lll_unlock_wake, pass MUTEX(%ebx) address to __lll_lock_wait in %edx. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_REQUEUE, FUTEX_CMP_REQUEUE, EINVAL, LOCK): Don't define. (__pthread_cond_broadcast): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_WAKE_OP, FUTEX_OP_CLEAR_WAKE_IF_GT_ONE, EINVAL, LOCK): Don't define. (__pthread_cond_signal): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S: Include lowlevellock.h. (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_timedwait): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_wait, __condvar_w_cleanup): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_rdlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebx) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebx) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S: Include lowlevellock.h. (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebp) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebp) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S: Include lowlevellock.h. (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebp) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebp) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_unlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%edi) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%edi) in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebx) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebx) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. * sysdeps/unix/sysv/linux/i386/pthread_once.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG): Don't define. * sysdeps/unix/sysv/linux/i386/i486/sem_post.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAKE): Don't define. * sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S: Include lowlevellock.h. (LOCK, SYS_futex, SYS_gettimeofday, FUTEX_WAIT): Don't define. (sem_timedwait): Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/sem_trywait.S: Include lowlevellock.h. (LOCK): Don't define. * sysdeps/unix/sysv/linux/i386/i486/sem_wait.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT): Don't define. * sysdeps/unix/sysv/linux/powerpc/sem_post.c: Wake only when there are waiters. * sysdeps/unix/sysv/linux/x86_64/libc-lowlevellock.S: Revert 2007-05-2{3,9} changes. * sysdeps/unix/sysv/linux/x86_64/lowlevellock.S: Include kernel-features.h and lowlevellock.h. (LOAD_PRIVATE_FUTEX_WAIT): Define. (LOAD_FUTEX_WAIT): Rewritten. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_lock_wait_private, __lll_unlock_wake_private): New functions. (__lll_mutex_lock_wait): Rename to ... (__lll_lock_wait): ... this. %esi is now private argument. Don't compile in for libc.so. (__lll_mutex_timedlock_wait): Rename to ... (__lll_timedlock_wait): ... this. %esi contains private argument. Don't compile in for libc.so. (__lll_mutex_unlock_wake): Rename to ... (__lll_unlock_wake): ... this. %esi contains private argument. Don't compile in for libc.so. * sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S: Include kernel-features.h and lowlevellock.h. (LOAD_FUTEX_WAIT): Define. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_robust_mutex_lock_wait): Rename to ... (__lll_robust_lock_wait): ... this. %esi argument contains private. Use LOAD_FUTEX_WAIT macro. (__lll_robust_mutex_timedlock_wait): Rename to ... (__lll_robust_timedlock_wait): ... this. %esi argument contains private, use LOAD_FUTEX_WAIT macro. * sysdeps/unix/sysv/linux/x86_64/pthread_barrier_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (pthread_barrier_wait): Rename __lll_mutex_* to __lll_*, pass PRIVATE(%rdi) ^ LLL_SHARED as private argument in %esi to __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_REQUEUE, FUTEX_CMP_REQUEUE, EINVAL, LOCK): Don't define. (__pthread_cond_broadcast): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_WAKE_OP, FUTEX_OP_CLEAR_WAKE_IF_GT_ONE, EINVAL, LOCK): Don't define. (__pthread_cond_signal): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_timedwait): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_wait, __condvar_cleanup): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_rdlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_unlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_once.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_post.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAKE): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_trywait.S: Include lowlevellock.h. (LOCK): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_wait.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT): Don't define. * sysdeps/unix/sysv/linux/sparc/internaltypes.h: New file. * sysdeps/unix/sysv/linux/sparc/pthread_barrier_destroy.c: New file. * sysdeps/unix/sysv/linux/sparc/pthread_barrier_init.c: New file. * sysdeps/unix/sysv/linux/sparc/pthread_barrier_wait.c: New file. * sysdeps/unix/sysv/linux/sparc/sparc32/lowlevellock.c (__lll_lock_wait_private): New function. (__lll_lock_wait, __lll_timedlock_wait): Add private argument, pass it to lll_futex_*wait. Don't compile in for libc.so. * sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_init.c: Remove. * sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_wait.c (struct sparc_pthread_barrier): Remove. (pthread_barrier_wait): Use union sparc_pthread_barrier instead of struct sparc_pthread_barrier. Pass ibarrier->s.pshared ? LLL_SHARED : LLL_PRIVATE to lll_{,un}lock and lll_futex_wait macros. * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_init.c: Remove. * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_wait.c: Include sparc pthread_barrier_wait.c instead of generic one.
2007-08-01 06:47:26 +02:00
leal cond_lock(%ebx), %edx
#endif
#if (LLL_SHARED-LLL_PRIVATE) > 255
xorl %ecx, %ecx
#endif
cmpl $-1, dep_mutex(%ebx)
setne %cl
subl $1, %ecx
andl $(LLL_SHARED-LLL_PRIVATE), %ecx
#if LLL_PRIVATE != 0
addl $LLL_PRIVATE, %ecx
#endif
* sysdeps/unix/sysv/linux/powerpc/sem_post.c (__new_sem_post): Use __asm __volatile (__lll_acq_instr ::: "memory") instead of atomic_full_barrier. 2007-07-31 Jakub Jelinek <jakub@redhat.com> * allocatestack.c (stack_cache_lock): Change type to int. (get_cached_stack, allocate_stack, __deallocate_stack, __make_stacks_executable, __find_thread_by_id, __nptl_setxid, __pthread_init_static_tls, __wait_lookup_done): Add LLL_PRIVATE as second argument to lll_lock and lll_unlock macros on stack_cache_lock. * pthread_create.c (__find_in_stack_list): Likewise. (start_thread): Similarly with pd->lock. Use lll_robust_dead macro instead of lll_robust_mutex_dead, pass LLL_SHARED to it as second argument. * descr.h (struct pthread): Change lock and setxid_futex field type to int. * old_pthread_cond_broadcast.c (__pthread_cond_broadcast_2_0): Use LLL_LOCK_INITIALIZER instead of LLL_MUTEX_LOCK_INITIALIZER. * old_pthread_cond_signal.c (__pthread_cond_signal_2_0): Likewise. * old_pthread_cond_timedwait.c (__pthread_cond_timedwait_2_0): Likewise. * old_pthread_cond_wait.c (__pthread_cond_wait_2_0): Likewise. * pthread_cond_init.c (__pthread_cond_init): Likewise. * pthreadP.h (__attr_list_lock): Change type to int. * pthread_attr_init.c (__attr_list_lock): Likewise. * pthread_barrier_destroy.c (pthread_barrier_destroy): Pass ibarrier->private ^ FUTEX_PRIVATE_FLAG as second argument to lll_{,un}lock. * pthread_barrier_wait.c (pthread_barrier_wait): Likewise and also for lll_futex_{wake,wait}. * pthread_barrier_init.c (pthread_barrier_init): Make iattr a pointer to const. * pthread_cond_broadcast.c (__pthread_cond_broadcast): Pass LLL_SHARED as second argument to lll_{,un}lock. * pthread_cond_destroy.c (__pthread_cond_destroy): Likewise. * pthread_cond_signal.c (__pthread_cond_singal): Likewise. * pthread_cond_timedwait.c (__pthread_cond_timedwait): Likewise. * pthread_cond_wait.c (__condvar_cleanup, __pthread_cond_wait): Likewise. * pthread_getattr_np.c (pthread_getattr_np): Add LLL_PRIVATE as second argument to lll_{,un}lock macros on pd->lock. * pthread_getschedparam.c (__pthread_getschedparam): Likewise. * pthread_setschedparam.c (__pthread_setschedparam): Likewise. * pthread_setschedprio.c (pthread_setschedprio): Likewise. * tpp.c (__pthread_tpp_change_priority, __pthread_current_priority): Likewise. * sysdeps/pthread/createthread.c (do_clone, create_thread): Likewise. * pthread_once.c (once_lock): Change type to int. (__pthread_once): Pass LLL_PRIVATE as second argument to lll_{,un}lock macros on once_lock. * pthread_rwlock_rdlock.c (__pthread_rwlock_rdlock): Use lll_{,un}lock macros instead of lll_mutex_{,un}lock, pass rwlock->__data.__shared as second argument to them and similarly for lll_futex_w*. * pthread_rwlock_timedrdlock.c (pthread_rwlock_timedrdlock): Likewise. * pthread_rwlock_timedwrlock.c (pthread_rwlock_timedwrlock): Likewise. * pthread_rwlock_tryrdlock.c (__pthread_rwlock_tryrdlock): Likewise. * pthread_rwlock_trywrlock.c (__pthread_rwlock_trywrlock): Likewise. * pthread_rwlock_unlock.c (__pthread_rwlock_unlock): Likewise. * pthread_rwlock_wrlock.c (__pthread_rwlock_wrlock): Likewise. * sem_close.c (sem_close): Pass LLL_PRIVATE as second argument to lll_{,un}lock macros on __sem_mappings_lock. * sem_open.c (check_add_mapping): Likewise. (__sem_mappings_lock): Change type to int. * semaphoreP.h (__sem_mappings_lock): Likewise. * pthread_mutex_lock.c (LLL_MUTEX_LOCK, LLL_MUTEX_TRYLOCK, LLL_ROBUST_MUTEX_LOCK): Use lll_{,try,robust_}lock macros instead of lll_*mutex_*, pass LLL_SHARED as last argument. (__pthread_mutex_lock): Use lll_unlock instead of lll_mutex_unlock, pass LLL_SHARED as last argument. * sysdeps/unix/sysv/linux/pthread_mutex_cond_lock.c (LLL_MUTEX_LOCK, LLL_MUTEX_TRYLOCK, LLL_ROBUST_MUTEX_LOCK): Use lll_{cond_,cond_try,robust_cond}lock macros instead of lll_*mutex_*, pass LLL_SHARED as last argument. * pthread_mutex_timedlock.c (pthread_mutex_timedlock): Use lll_{timed,try,robust_timed,un}lock instead of lll_*mutex*, pass LLL_SHARED as last argument. * pthread_mutex_trylock.c (__pthread_mutex_trylock): Similarly. * pthread_mutex_unlock.c (__pthread_mutex_unlock_usercnt): Similarly. * sysdeps/pthread/bits/libc-lock.h (__libc_lock_lock, __libc_lock_lock_recursive, __libc_lock_unlock, __libc_lock_unlock_recursive): Pass LLL_PRIVATE as second argument to lll_{,un}lock. * sysdeps/pthread/bits/stdio-lock.h (_IO_lock_lock, _IO_lock_unlock): Likewise. * sysdeps/unix/sysv/linux/fork.c (__libc_fork): Don't use compound literal. * sysdeps/unix/sysv/linux/unregister-atfork.c (__unregister_atfork): Pass LLL_PRIVATE as second argument to lll_{,un}lock macros on __fork_lock. * sysdeps/unix/sysv/linux/register-atfork.c (__register_atfork, free_mem): Likewise. (__fork_lock): Change type to int. * sysdeps/unix/sysv/linux/fork.h (__fork_lock): Likewise. * sysdeps/unix/sysv/linux/sem_post.c (__new_sem_post): Pass isem->private ^ FUTEX_PRIVATE_FLAG as second argument to lll_futex_wake. * sysdeps/unix/sysv/linux/sem_timedwait.c (sem_timedwait): Likewise. * sysdeps/unix/sysv/linux/sem_wait.c (__new_sem_wait): Likewise. * sysdeps/unix/sysv/linux/lowlevellock.c (__lll_lock_wait_private): New function. (__lll_lock_wait, __lll_timedlock_wait): Add private argument and pass it through to lll_futex_*wait, only compile in when IS_IN_libpthread. * sysdeps/unix/sysv/linux/lowlevelrobustlock.c (__lll_robust_lock_wait, __lll_robust_timedlock_wait): Add private argument and pass it through to lll_futex_*wait. * sysdeps/unix/sysv/linux/alpha/lowlevellock.h: Renamed all lll_mutex_* resp. lll_robust_mutex_* macros to lll_* resp. lll_robust_*. Renamed all __lll_mutex_* resp. __lll_robust_mutex_* inline functions to __lll_* resp. __lll_robust_*. (LLL_MUTEX_LOCK_INITIALIZER): Remove. (lll_mutex_dead): Add private argument. (__lll_lock_wait_private): New prototype. (__lll_lock_wait, __lll_robust_lock_wait, __lll_lock_timedwait, __lll_robust_lock_timedwait): Add private argument to prototypes. (__lll_lock): Add private argument, if it is constant LLL_PRIVATE, call __lll_lock_wait_private, otherwise pass private to __lll_lock_wait. (__lll_robust_lock, __lll_cond_lock, __lll_timedlock, __lll_robust_timedlock): Add private argument, pass it to __lll_*wait functions. (__lll_unlock): Add private argument, if it is constant LLL_PRIVATE, call __lll_unlock_wake_private, otherwise pass private to __lll_unlock_wake. (__lll_robust_unlock): Add private argument, pass it to __lll_robust_unlock_wake. (lll_lock, lll_robust_lock, lll_cond_lock, lll_timedlock, lll_robust_timedlock, lll_unlock, lll_robust_unlock): Add private argument, pass it through to __lll_* inline function. (__lll_mutex_unlock_force, lll_mutex_unlock_force): Remove. (lll_lock_t): Remove. (__lll_cond_wait, __lll_cond_timedwait, __lll_cond_wake, __lll_cond_broadcast, lll_cond_wait, lll_cond_timedwait, lll_cond_wake, lll_cond_broadcast): Remove. * sysdeps/unix/sysv/linux/ia64/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/powerpc/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/s390/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/sparc/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/i386/lowlevellock.h: Allow including the header from assembler. Renamed all lll_mutex_* resp. lll_robust_mutex_* macros to lll_* resp. lll_robust_*. (LOCK, FUTEX_CMP_REQUEUE, FUTEX_WAKE_OP, FUTEX_OP_CLEAR_WAKE_IF_GT_ONE): Define. (LLL_MUTEX_LOCK_INITIALIZER, LLL_MUTEX_LOCK_INITIALIZER_LOCKED, LLL_MUTEX_LOCK_INITIALIZER_WAITERS): Remove. (__lll_mutex_lock_wait, __lll_mutex_timedlock_wait, __lll_mutex_unlock_wake, __lll_lock_wait, __lll_unlock_wake): Remove prototype. (__lll_trylock_asm, __lll_lock_asm_start, __lll_unlock_asm): Define. (lll_robust_trylock, lll_cond_trylock): Use LLL_LOCK_INITIALIZER* rather than LLL_MUTEX_LOCK_INITIALIZER* macros. (lll_trylock): Likewise, use __lll_trylock_asm, pass MULTIPLE_THREADS_OFFSET as another asm operand. (lll_lock): Add private argument, use __lll_lock_asm_start, pass MULTIPLE_THREADS_OFFSET as last asm operand, call __lll_lock_wait_private if private is constant LLL_PRIVATE, otherwise pass private as another argument to __lll_lock_wait. (lll_robust_lock, lll_cond_lock, lll_robust_cond_lock, lll_timedlock, lll_robust_timedlock): Add private argument, pass private as another argument to __lll_*lock_wait call. (lll_unlock): Add private argument, use __lll_unlock_asm, pass MULTIPLE_THREADS_OFFSET as another asm operand, call __lll_unlock_wake_private if private is constant LLL_PRIVATE, otherwise pass private as another argument to __lll_unlock_wake. (lll_robust_unlock): Add private argument, pass private as another argument to __lll_unlock_wake. (lll_robust_dead): Add private argument, use __lll_private_flag macro. (lll_islocked): Use LLL_LOCK_INITIALIZER instead of LLL_MUTEX_LOCK_INITIALIZER. (lll_lock_t): Remove. (LLL_LOCK_INITIALIZER_WAITERS): Define. (__lll_cond_wait, __lll_cond_timedwait, __lll_cond_wake, __lll_cond_broadcast, lll_cond_wait, lll_cond_timedwait, lll_cond_wake, lll_cond_broadcast): Remove. * sysdeps/unix/sysv/linux/x86_64/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S: Revert 2007-05-2{3,9} changes. * sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S: Include kernel-features.h and lowlevellock.h. (LOAD_PRIVATE_FUTEX_WAIT): Define. (LOAD_FUTEX_WAIT): Rewritten. (LOCK, SYS_gettimeofday, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_lock_wait_private, __lll_unlock_wake_private): New functions. (__lll_mutex_lock_wait): Rename to ... (__lll_lock_wait): ... this. Take futex addr from %edx instead of %ecx, %ecx is now private argument. Don't compile in for libc.so. (__lll_mutex_timedlock_wait): Rename to ... (__lll_timedlock_wait): ... this. Use __NR_gettimeofday. %esi contains private argument. Don't compile in for libc.so. (__lll_mutex_unlock_wake): Rename to ... (__lll_unlock_wake): ... this. %ecx contains private argument. Don't compile in for libc.so. (__lll_timedwait_tid): Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S: Include kernel-features.h and lowlevellock.h. (LOAD_FUTEX_WAIT): Define. (LOCK, SYS_gettimeofday, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_robust_mutex_lock_wait): Rename to ... (__lll_robust_lock_wait): ... this. Futex addr is now in %edx argument, %ecx argument contains private. Use LOAD_FUTEX_WAIT macro. (__lll_robust_mutex_timedlock_wait): Rename to ... (__lll_robust_timedlock_wait): ... this. Use __NR_gettimeofday. %esi argument contains private, use LOAD_FUTEX_WAIT macro. * sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (pthread_barrier_wait): Rename __lll_mutex_* to __lll_*, pass PRIVATE(%ebx) ^ LLL_SHARED as private argument in %ecx to __lll_lock_wait and __lll_unlock_wake, pass MUTEX(%ebx) address to __lll_lock_wait in %edx. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_REQUEUE, FUTEX_CMP_REQUEUE, EINVAL, LOCK): Don't define. (__pthread_cond_broadcast): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_WAKE_OP, FUTEX_OP_CLEAR_WAKE_IF_GT_ONE, EINVAL, LOCK): Don't define. (__pthread_cond_signal): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S: Include lowlevellock.h. (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_timedwait): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_wait, __condvar_w_cleanup): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_rdlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebx) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebx) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S: Include lowlevellock.h. (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebp) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebp) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S: Include lowlevellock.h. (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebp) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebp) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_unlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%edi) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%edi) in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebx) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebx) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. * sysdeps/unix/sysv/linux/i386/pthread_once.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG): Don't define. * sysdeps/unix/sysv/linux/i386/i486/sem_post.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAKE): Don't define. * sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S: Include lowlevellock.h. (LOCK, SYS_futex, SYS_gettimeofday, FUTEX_WAIT): Don't define. (sem_timedwait): Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/sem_trywait.S: Include lowlevellock.h. (LOCK): Don't define. * sysdeps/unix/sysv/linux/i386/i486/sem_wait.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT): Don't define. * sysdeps/unix/sysv/linux/powerpc/sem_post.c: Wake only when there are waiters. * sysdeps/unix/sysv/linux/x86_64/libc-lowlevellock.S: Revert 2007-05-2{3,9} changes. * sysdeps/unix/sysv/linux/x86_64/lowlevellock.S: Include kernel-features.h and lowlevellock.h. (LOAD_PRIVATE_FUTEX_WAIT): Define. (LOAD_FUTEX_WAIT): Rewritten. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_lock_wait_private, __lll_unlock_wake_private): New functions. (__lll_mutex_lock_wait): Rename to ... (__lll_lock_wait): ... this. %esi is now private argument. Don't compile in for libc.so. (__lll_mutex_timedlock_wait): Rename to ... (__lll_timedlock_wait): ... this. %esi contains private argument. Don't compile in for libc.so. (__lll_mutex_unlock_wake): Rename to ... (__lll_unlock_wake): ... this. %esi contains private argument. Don't compile in for libc.so. * sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S: Include kernel-features.h and lowlevellock.h. (LOAD_FUTEX_WAIT): Define. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_robust_mutex_lock_wait): Rename to ... (__lll_robust_lock_wait): ... this. %esi argument contains private. Use LOAD_FUTEX_WAIT macro. (__lll_robust_mutex_timedlock_wait): Rename to ... (__lll_robust_timedlock_wait): ... this. %esi argument contains private, use LOAD_FUTEX_WAIT macro. * sysdeps/unix/sysv/linux/x86_64/pthread_barrier_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (pthread_barrier_wait): Rename __lll_mutex_* to __lll_*, pass PRIVATE(%rdi) ^ LLL_SHARED as private argument in %esi to __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_REQUEUE, FUTEX_CMP_REQUEUE, EINVAL, LOCK): Don't define. (__pthread_cond_broadcast): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_WAKE_OP, FUTEX_OP_CLEAR_WAKE_IF_GT_ONE, EINVAL, LOCK): Don't define. (__pthread_cond_signal): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_timedwait): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_wait, __condvar_cleanup): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_rdlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_unlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_once.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_post.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAKE): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_trywait.S: Include lowlevellock.h. (LOCK): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_wait.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT): Don't define. * sysdeps/unix/sysv/linux/sparc/internaltypes.h: New file. * sysdeps/unix/sysv/linux/sparc/pthread_barrier_destroy.c: New file. * sysdeps/unix/sysv/linux/sparc/pthread_barrier_init.c: New file. * sysdeps/unix/sysv/linux/sparc/pthread_barrier_wait.c: New file. * sysdeps/unix/sysv/linux/sparc/sparc32/lowlevellock.c (__lll_lock_wait_private): New function. (__lll_lock_wait, __lll_timedlock_wait): Add private argument, pass it to lll_futex_*wait. Don't compile in for libc.so. * sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_init.c: Remove. * sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_wait.c (struct sparc_pthread_barrier): Remove. (pthread_barrier_wait): Use union sparc_pthread_barrier instead of struct sparc_pthread_barrier. Pass ibarrier->s.pshared ? LLL_SHARED : LLL_PRIVATE to lll_{,un}lock and lll_futex_wait macros. * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_init.c: Remove. * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_wait.c: Include sparc pthread_barrier_wait.c instead of generic one.
2007-08-01 06:47:26 +02:00
call __lll_lock_wait
1: movl broadcast_seq(%ebx), %eax
cmpl 12(%esp), %eax
jne 3f
/* We increment the wakeup_seq counter only if it is lower than
total_seq. If this is not the case the thread was woken and
then canceled. In this case we ignore the signal. */
movl total_seq(%ebx), %eax
movl total_seq+4(%ebx), %edi
cmpl wakeup_seq+4(%ebx), %edi
jb 6f
ja 7f
cmpl wakeup_seq(%ebx), %eax
jbe 7f
6: addl $1, wakeup_seq(%ebx)
adcl $0, wakeup_seq+4(%ebx)
addl $1, cond_futex(%ebx)
7: addl $1, woken_seq(%ebx)
adcl $0, woken_seq+4(%ebx)
3: subl $(1 << nwaiters_shift), cond_nwaiters(%ebx)
/* Wake up a thread which wants to destroy the condvar object. */
xorl %edi, %edi
movl total_seq(%ebx), %eax
andl total_seq+4(%ebx), %eax
cmpl $0xffffffff, %eax
jne 4f
movl cond_nwaiters(%ebx), %eax
andl $~((1 << nwaiters_shift) - 1), %eax
jne 4f
addl $cond_nwaiters, %ebx
movl $SYS_futex, %eax
#if FUTEX_PRIVATE_FLAG > 255
xorl %ecx, %ecx
#endif
cmpl $-1, dep_mutex-cond_nwaiters(%ebx)
sete %cl
subl $1, %ecx
#ifdef __ASSUME_PRIVATE_FUTEX
andl $FUTEX_PRIVATE_FLAG, %ecx
#else
andl %gs:PRIVATE_FUTEX, %ecx
#endif
addl $FUTEX_WAKE, %ecx
movl $1, %edx
ENTER_KERNEL
subl $cond_nwaiters, %ebx
movl $1, %edi
4: LOCK
#if cond_lock == 0
subl $1, (%ebx)
#else
subl $1, cond_lock(%ebx)
#endif
je 2f
#if cond_lock == 0
movl %ebx, %eax
#else
leal cond_lock(%ebx), %eax
#endif
#if (LLL_SHARED-LLL_PRIVATE) > 255
xorl %ecx, %ecx
#endif
cmpl $-1, dep_mutex(%ebx)
setne %cl
subl $1, %ecx
andl $(LLL_SHARED-LLL_PRIVATE), %ecx
#if LLL_PRIVATE != 0
addl $LLL_PRIVATE, %ecx
#endif
* sysdeps/unix/sysv/linux/powerpc/sem_post.c (__new_sem_post): Use __asm __volatile (__lll_acq_instr ::: "memory") instead of atomic_full_barrier. 2007-07-31 Jakub Jelinek <jakub@redhat.com> * allocatestack.c (stack_cache_lock): Change type to int. (get_cached_stack, allocate_stack, __deallocate_stack, __make_stacks_executable, __find_thread_by_id, __nptl_setxid, __pthread_init_static_tls, __wait_lookup_done): Add LLL_PRIVATE as second argument to lll_lock and lll_unlock macros on stack_cache_lock. * pthread_create.c (__find_in_stack_list): Likewise. (start_thread): Similarly with pd->lock. Use lll_robust_dead macro instead of lll_robust_mutex_dead, pass LLL_SHARED to it as second argument. * descr.h (struct pthread): Change lock and setxid_futex field type to int. * old_pthread_cond_broadcast.c (__pthread_cond_broadcast_2_0): Use LLL_LOCK_INITIALIZER instead of LLL_MUTEX_LOCK_INITIALIZER. * old_pthread_cond_signal.c (__pthread_cond_signal_2_0): Likewise. * old_pthread_cond_timedwait.c (__pthread_cond_timedwait_2_0): Likewise. * old_pthread_cond_wait.c (__pthread_cond_wait_2_0): Likewise. * pthread_cond_init.c (__pthread_cond_init): Likewise. * pthreadP.h (__attr_list_lock): Change type to int. * pthread_attr_init.c (__attr_list_lock): Likewise. * pthread_barrier_destroy.c (pthread_barrier_destroy): Pass ibarrier->private ^ FUTEX_PRIVATE_FLAG as second argument to lll_{,un}lock. * pthread_barrier_wait.c (pthread_barrier_wait): Likewise and also for lll_futex_{wake,wait}. * pthread_barrier_init.c (pthread_barrier_init): Make iattr a pointer to const. * pthread_cond_broadcast.c (__pthread_cond_broadcast): Pass LLL_SHARED as second argument to lll_{,un}lock. * pthread_cond_destroy.c (__pthread_cond_destroy): Likewise. * pthread_cond_signal.c (__pthread_cond_singal): Likewise. * pthread_cond_timedwait.c (__pthread_cond_timedwait): Likewise. * pthread_cond_wait.c (__condvar_cleanup, __pthread_cond_wait): Likewise. * pthread_getattr_np.c (pthread_getattr_np): Add LLL_PRIVATE as second argument to lll_{,un}lock macros on pd->lock. * pthread_getschedparam.c (__pthread_getschedparam): Likewise. * pthread_setschedparam.c (__pthread_setschedparam): Likewise. * pthread_setschedprio.c (pthread_setschedprio): Likewise. * tpp.c (__pthread_tpp_change_priority, __pthread_current_priority): Likewise. * sysdeps/pthread/createthread.c (do_clone, create_thread): Likewise. * pthread_once.c (once_lock): Change type to int. (__pthread_once): Pass LLL_PRIVATE as second argument to lll_{,un}lock macros on once_lock. * pthread_rwlock_rdlock.c (__pthread_rwlock_rdlock): Use lll_{,un}lock macros instead of lll_mutex_{,un}lock, pass rwlock->__data.__shared as second argument to them and similarly for lll_futex_w*. * pthread_rwlock_timedrdlock.c (pthread_rwlock_timedrdlock): Likewise. * pthread_rwlock_timedwrlock.c (pthread_rwlock_timedwrlock): Likewise. * pthread_rwlock_tryrdlock.c (__pthread_rwlock_tryrdlock): Likewise. * pthread_rwlock_trywrlock.c (__pthread_rwlock_trywrlock): Likewise. * pthread_rwlock_unlock.c (__pthread_rwlock_unlock): Likewise. * pthread_rwlock_wrlock.c (__pthread_rwlock_wrlock): Likewise. * sem_close.c (sem_close): Pass LLL_PRIVATE as second argument to lll_{,un}lock macros on __sem_mappings_lock. * sem_open.c (check_add_mapping): Likewise. (__sem_mappings_lock): Change type to int. * semaphoreP.h (__sem_mappings_lock): Likewise. * pthread_mutex_lock.c (LLL_MUTEX_LOCK, LLL_MUTEX_TRYLOCK, LLL_ROBUST_MUTEX_LOCK): Use lll_{,try,robust_}lock macros instead of lll_*mutex_*, pass LLL_SHARED as last argument. (__pthread_mutex_lock): Use lll_unlock instead of lll_mutex_unlock, pass LLL_SHARED as last argument. * sysdeps/unix/sysv/linux/pthread_mutex_cond_lock.c (LLL_MUTEX_LOCK, LLL_MUTEX_TRYLOCK, LLL_ROBUST_MUTEX_LOCK): Use lll_{cond_,cond_try,robust_cond}lock macros instead of lll_*mutex_*, pass LLL_SHARED as last argument. * pthread_mutex_timedlock.c (pthread_mutex_timedlock): Use lll_{timed,try,robust_timed,un}lock instead of lll_*mutex*, pass LLL_SHARED as last argument. * pthread_mutex_trylock.c (__pthread_mutex_trylock): Similarly. * pthread_mutex_unlock.c (__pthread_mutex_unlock_usercnt): Similarly. * sysdeps/pthread/bits/libc-lock.h (__libc_lock_lock, __libc_lock_lock_recursive, __libc_lock_unlock, __libc_lock_unlock_recursive): Pass LLL_PRIVATE as second argument to lll_{,un}lock. * sysdeps/pthread/bits/stdio-lock.h (_IO_lock_lock, _IO_lock_unlock): Likewise. * sysdeps/unix/sysv/linux/fork.c (__libc_fork): Don't use compound literal. * sysdeps/unix/sysv/linux/unregister-atfork.c (__unregister_atfork): Pass LLL_PRIVATE as second argument to lll_{,un}lock macros on __fork_lock. * sysdeps/unix/sysv/linux/register-atfork.c (__register_atfork, free_mem): Likewise. (__fork_lock): Change type to int. * sysdeps/unix/sysv/linux/fork.h (__fork_lock): Likewise. * sysdeps/unix/sysv/linux/sem_post.c (__new_sem_post): Pass isem->private ^ FUTEX_PRIVATE_FLAG as second argument to lll_futex_wake. * sysdeps/unix/sysv/linux/sem_timedwait.c (sem_timedwait): Likewise. * sysdeps/unix/sysv/linux/sem_wait.c (__new_sem_wait): Likewise. * sysdeps/unix/sysv/linux/lowlevellock.c (__lll_lock_wait_private): New function. (__lll_lock_wait, __lll_timedlock_wait): Add private argument and pass it through to lll_futex_*wait, only compile in when IS_IN_libpthread. * sysdeps/unix/sysv/linux/lowlevelrobustlock.c (__lll_robust_lock_wait, __lll_robust_timedlock_wait): Add private argument and pass it through to lll_futex_*wait. * sysdeps/unix/sysv/linux/alpha/lowlevellock.h: Renamed all lll_mutex_* resp. lll_robust_mutex_* macros to lll_* resp. lll_robust_*. Renamed all __lll_mutex_* resp. __lll_robust_mutex_* inline functions to __lll_* resp. __lll_robust_*. (LLL_MUTEX_LOCK_INITIALIZER): Remove. (lll_mutex_dead): Add private argument. (__lll_lock_wait_private): New prototype. (__lll_lock_wait, __lll_robust_lock_wait, __lll_lock_timedwait, __lll_robust_lock_timedwait): Add private argument to prototypes. (__lll_lock): Add private argument, if it is constant LLL_PRIVATE, call __lll_lock_wait_private, otherwise pass private to __lll_lock_wait. (__lll_robust_lock, __lll_cond_lock, __lll_timedlock, __lll_robust_timedlock): Add private argument, pass it to __lll_*wait functions. (__lll_unlock): Add private argument, if it is constant LLL_PRIVATE, call __lll_unlock_wake_private, otherwise pass private to __lll_unlock_wake. (__lll_robust_unlock): Add private argument, pass it to __lll_robust_unlock_wake. (lll_lock, lll_robust_lock, lll_cond_lock, lll_timedlock, lll_robust_timedlock, lll_unlock, lll_robust_unlock): Add private argument, pass it through to __lll_* inline function. (__lll_mutex_unlock_force, lll_mutex_unlock_force): Remove. (lll_lock_t): Remove. (__lll_cond_wait, __lll_cond_timedwait, __lll_cond_wake, __lll_cond_broadcast, lll_cond_wait, lll_cond_timedwait, lll_cond_wake, lll_cond_broadcast): Remove. * sysdeps/unix/sysv/linux/ia64/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/powerpc/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/s390/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/sparc/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/i386/lowlevellock.h: Allow including the header from assembler. Renamed all lll_mutex_* resp. lll_robust_mutex_* macros to lll_* resp. lll_robust_*. (LOCK, FUTEX_CMP_REQUEUE, FUTEX_WAKE_OP, FUTEX_OP_CLEAR_WAKE_IF_GT_ONE): Define. (LLL_MUTEX_LOCK_INITIALIZER, LLL_MUTEX_LOCK_INITIALIZER_LOCKED, LLL_MUTEX_LOCK_INITIALIZER_WAITERS): Remove. (__lll_mutex_lock_wait, __lll_mutex_timedlock_wait, __lll_mutex_unlock_wake, __lll_lock_wait, __lll_unlock_wake): Remove prototype. (__lll_trylock_asm, __lll_lock_asm_start, __lll_unlock_asm): Define. (lll_robust_trylock, lll_cond_trylock): Use LLL_LOCK_INITIALIZER* rather than LLL_MUTEX_LOCK_INITIALIZER* macros. (lll_trylock): Likewise, use __lll_trylock_asm, pass MULTIPLE_THREADS_OFFSET as another asm operand. (lll_lock): Add private argument, use __lll_lock_asm_start, pass MULTIPLE_THREADS_OFFSET as last asm operand, call __lll_lock_wait_private if private is constant LLL_PRIVATE, otherwise pass private as another argument to __lll_lock_wait. (lll_robust_lock, lll_cond_lock, lll_robust_cond_lock, lll_timedlock, lll_robust_timedlock): Add private argument, pass private as another argument to __lll_*lock_wait call. (lll_unlock): Add private argument, use __lll_unlock_asm, pass MULTIPLE_THREADS_OFFSET as another asm operand, call __lll_unlock_wake_private if private is constant LLL_PRIVATE, otherwise pass private as another argument to __lll_unlock_wake. (lll_robust_unlock): Add private argument, pass private as another argument to __lll_unlock_wake. (lll_robust_dead): Add private argument, use __lll_private_flag macro. (lll_islocked): Use LLL_LOCK_INITIALIZER instead of LLL_MUTEX_LOCK_INITIALIZER. (lll_lock_t): Remove. (LLL_LOCK_INITIALIZER_WAITERS): Define. (__lll_cond_wait, __lll_cond_timedwait, __lll_cond_wake, __lll_cond_broadcast, lll_cond_wait, lll_cond_timedwait, lll_cond_wake, lll_cond_broadcast): Remove. * sysdeps/unix/sysv/linux/x86_64/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S: Revert 2007-05-2{3,9} changes. * sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S: Include kernel-features.h and lowlevellock.h. (LOAD_PRIVATE_FUTEX_WAIT): Define. (LOAD_FUTEX_WAIT): Rewritten. (LOCK, SYS_gettimeofday, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_lock_wait_private, __lll_unlock_wake_private): New functions. (__lll_mutex_lock_wait): Rename to ... (__lll_lock_wait): ... this. Take futex addr from %edx instead of %ecx, %ecx is now private argument. Don't compile in for libc.so. (__lll_mutex_timedlock_wait): Rename to ... (__lll_timedlock_wait): ... this. Use __NR_gettimeofday. %esi contains private argument. Don't compile in for libc.so. (__lll_mutex_unlock_wake): Rename to ... (__lll_unlock_wake): ... this. %ecx contains private argument. Don't compile in for libc.so. (__lll_timedwait_tid): Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S: Include kernel-features.h and lowlevellock.h. (LOAD_FUTEX_WAIT): Define. (LOCK, SYS_gettimeofday, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_robust_mutex_lock_wait): Rename to ... (__lll_robust_lock_wait): ... this. Futex addr is now in %edx argument, %ecx argument contains private. Use LOAD_FUTEX_WAIT macro. (__lll_robust_mutex_timedlock_wait): Rename to ... (__lll_robust_timedlock_wait): ... this. Use __NR_gettimeofday. %esi argument contains private, use LOAD_FUTEX_WAIT macro. * sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (pthread_barrier_wait): Rename __lll_mutex_* to __lll_*, pass PRIVATE(%ebx) ^ LLL_SHARED as private argument in %ecx to __lll_lock_wait and __lll_unlock_wake, pass MUTEX(%ebx) address to __lll_lock_wait in %edx. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_REQUEUE, FUTEX_CMP_REQUEUE, EINVAL, LOCK): Don't define. (__pthread_cond_broadcast): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_WAKE_OP, FUTEX_OP_CLEAR_WAKE_IF_GT_ONE, EINVAL, LOCK): Don't define. (__pthread_cond_signal): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S: Include lowlevellock.h. (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_timedwait): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_wait, __condvar_w_cleanup): Rename __lll_mutex_* to __lll_*, pass cond_lock address in %edx rather than %ecx to __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_rdlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebx) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebx) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S: Include lowlevellock.h. (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebp) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebp) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S: Include lowlevellock.h. (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebp) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebp) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_unlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%edi) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%edi) in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass MUTEX(%ebx) address in %edx rather than %ecx to __lll_lock_wait, pass PSHARED(%ebx) in %ecx to both __lll_lock_wait and __lll_unlock_wake. Move return value from %ecx to %edx register. * sysdeps/unix/sysv/linux/i386/pthread_once.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG): Don't define. * sysdeps/unix/sysv/linux/i386/i486/sem_post.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAKE): Don't define. * sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S: Include lowlevellock.h. (LOCK, SYS_futex, SYS_gettimeofday, FUTEX_WAIT): Don't define. (sem_timedwait): Use __NR_gettimeofday. * sysdeps/unix/sysv/linux/i386/i486/sem_trywait.S: Include lowlevellock.h. (LOCK): Don't define. * sysdeps/unix/sysv/linux/i386/i486/sem_wait.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT): Don't define. * sysdeps/unix/sysv/linux/powerpc/sem_post.c: Wake only when there are waiters. * sysdeps/unix/sysv/linux/x86_64/libc-lowlevellock.S: Revert 2007-05-2{3,9} changes. * sysdeps/unix/sysv/linux/x86_64/lowlevellock.S: Include kernel-features.h and lowlevellock.h. (LOAD_PRIVATE_FUTEX_WAIT): Define. (LOAD_FUTEX_WAIT): Rewritten. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_lock_wait_private, __lll_unlock_wake_private): New functions. (__lll_mutex_lock_wait): Rename to ... (__lll_lock_wait): ... this. %esi is now private argument. Don't compile in for libc.so. (__lll_mutex_timedlock_wait): Rename to ... (__lll_timedlock_wait): ... this. %esi contains private argument. Don't compile in for libc.so. (__lll_mutex_unlock_wake): Rename to ... (__lll_unlock_wake): ... this. %esi contains private argument. Don't compile in for libc.so. * sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S: Include kernel-features.h and lowlevellock.h. (LOAD_FUTEX_WAIT): Define. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. (__lll_robust_mutex_lock_wait): Rename to ... (__lll_robust_lock_wait): ... this. %esi argument contains private. Use LOAD_FUTEX_WAIT macro. (__lll_robust_mutex_timedlock_wait): Rename to ... (__lll_robust_timedlock_wait): ... this. %esi argument contains private, use LOAD_FUTEX_WAIT macro. * sysdeps/unix/sysv/linux/x86_64/pthread_barrier_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (pthread_barrier_wait): Rename __lll_mutex_* to __lll_*, pass PRIVATE(%rdi) ^ LLL_SHARED as private argument in %esi to __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_REQUEUE, FUTEX_CMP_REQUEUE, EINVAL, LOCK): Don't define. (__pthread_cond_broadcast): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S: Include lowlevellock.h and pthread-errnos.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_WAKE_OP, FUTEX_OP_CLEAR_WAKE_IF_GT_ONE, EINVAL, LOCK): Don't define. (__pthread_cond_signal): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_timedwait): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. (__pthread_cond_wait, __condvar_cleanup): Rename __lll_mutex_* to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_rdlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_unlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %esi to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S: Include lowlevellock.h. (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): Don't define. (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass PSHARED(%rdi) in %ecx to both __lll_lock_wait and __lll_unlock_wake. * sysdeps/unix/sysv/linux/x86_64/pthread_once.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_post.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAKE): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_trywait.S: Include lowlevellock.h. (LOCK): Don't define. * sysdeps/unix/sysv/linux/x86_64/sem_wait.S: Include lowlevellock.h. (LOCK, SYS_futex, FUTEX_WAIT): Don't define. * sysdeps/unix/sysv/linux/sparc/internaltypes.h: New file. * sysdeps/unix/sysv/linux/sparc/pthread_barrier_destroy.c: New file. * sysdeps/unix/sysv/linux/sparc/pthread_barrier_init.c: New file. * sysdeps/unix/sysv/linux/sparc/pthread_barrier_wait.c: New file. * sysdeps/unix/sysv/linux/sparc/sparc32/lowlevellock.c (__lll_lock_wait_private): New function. (__lll_lock_wait, __lll_timedlock_wait): Add private argument, pass it to lll_futex_*wait. Don't compile in for libc.so. * sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_init.c: Remove. * sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_wait.c (struct sparc_pthread_barrier): Remove. (pthread_barrier_wait): Use union sparc_pthread_barrier instead of struct sparc_pthread_barrier. Pass ibarrier->s.pshared ? LLL_SHARED : LLL_PRIVATE to lll_{,un}lock and lll_futex_wait macros. * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_init.c: Remove. * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_wait.c: Include sparc pthread_barrier_wait.c instead of generic one.
2007-08-01 06:47:26 +02:00
call __lll_unlock_wake
/* Wake up all waiters to make sure no signal gets lost. */
2: testl %edi, %edi
jnz 5f
addl $cond_futex, %ebx
#if FUTEX_PRIVATE_FLAG > 255
xorl %ecx, %ecx
#endif
cmpl $-1, dep_mutex-cond_futex(%ebx)
sete %cl
subl $1, %ecx
#ifdef __ASSUME_PRIVATE_FUTEX
andl $FUTEX_PRIVATE_FLAG, %ecx
#else
andl %gs:PRIVATE_FUTEX, %ecx
#endif
addl $FUTEX_WAKE, %ecx
movl $SYS_futex, %eax
movl $0x7fffffff, %edx
ENTER_KERNEL
2009-12-13 20:50:16 +01:00
5: movl 24+FRAME_SIZE(%esp), %eax
call __pthread_mutex_cond_lock
movl %esi, (%esp)
.LcallUR:
call _Unwind_Resume
hlt
.LENDCODE:
cfi_endproc
.size __condvar_w_cleanup, .-__condvar_w_cleanup
.section .gcc_except_table,"a",@progbits
.LexceptSTART:
.byte DW_EH_PE_omit # @LPStart format (omit)
.byte DW_EH_PE_omit # @TType format (omit)
.byte DW_EH_PE_sdata4 # call-site format
# DW_EH_PE_sdata4
.uleb128 .Lcstend-.Lcstbegin
.Lcstbegin:
.long .LcleanupSTART-.LSTARTCODE
.long .Ladd_cond_futex-.LcleanupSTART
.long __condvar_w_cleanup-.LSTARTCODE
.uleb128 0
.long .Ladd_cond_futex-.LSTARTCODE
.long .Lsub_cond_futex-.Ladd_cond_futex
.long __condvar_w_cleanup2-.LSTARTCODE
.uleb128 0
.long .Lsub_cond_futex-.LSTARTCODE
.long .LcleanupEND-.Lsub_cond_futex
.long __condvar_w_cleanup-.LSTARTCODE
.uleb128 0
.long .LcallUR-.LSTARTCODE
.long .LENDCODE-.LcallUR
.long 0
.uleb128 0
.Lcstend:
Update. * Makefile (libpthread-routines): Remove lowlevelcond and lowlevelsem. Add sem_wait, sem_trywait, sem_timedwait, sem_post, pthread_cond_wait, pthread_cond_timedwait, pthread_cond_signal, and pthread_cond_broadcast. * sysdeps/unix/sysv/linux/i486/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i486/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i586/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelsem.S: Removed * sysdeps/unix/sysv/linux/i686/lowlevelcond.S: Removed * sysdeps/unix/sysv/linux/i486/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/sem_post.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i486/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i586/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/sem_post.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i586/pthread_cond_broadcast.S: New file. * sysdeps/unix/sysv/linux/i686/sem_wait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_trywait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/sem_post.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_wait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_timedwait.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_signal.S: New file. * sysdeps/unix/sysv/linux/i686/pthread_cond_broadcast.S: New file.
2003-01-29 00:52:31 +01:00
#ifdef PIC
.section .gnu.linkonce.t.__i686.get_pc_thunk.cx,"ax",@progbits
.globl __i686.get_pc_thunk.cx
.hidden __i686.get_pc_thunk.cx
.type __i686.get_pc_thunk.cx,@function
__i686.get_pc_thunk.cx:
movl (%esp), %ecx;
ret
.size __i686.get_pc_thunk.cx,.-__i686.get_pc_thunk.cx
#endif
#ifdef SHARED
.hidden DW.ref.__gcc_personality_v0
.weak DW.ref.__gcc_personality_v0
.section .gnu.linkonce.d.DW.ref.__gcc_personality_v0,"aw",@progbits
.align 4
.type DW.ref.__gcc_personality_v0, @object
.size DW.ref.__gcc_personality_v0, 4
DW.ref.__gcc_personality_v0:
.long __gcc_personality_v0
#endif