
1: 2007-10-17 Jakub Jelinek <jakub@redhat.com> 2: 3: * sysdeps/unix/sysv/linux/i386/i486/sem_post.S (__old_sem_post): New 4: routine instead of an alias to __new_sem_post. 5: 6: 2007-10-15 Jakub Jelinek <jakub@redhat.com> 7: 8: * init.c (__pthread_initialize_minimal): Initialize word to appease 9: valgrind. 10: 11: 2007-10-10 Jakub Jelinek <jakub@redhat.com> 12: 13: * sysdeps/pthread/bits/libc-lock.h (__libc_rwlock_init): Inside of 14: libc.so just clear NAME. 15: (__libc_rwlock_fini): Nop inside of libc.so. 16: * tst-initializers1.c (main): Test if PTHREAD_RWLOCK_INITIALIZER is 17: all zeros. 18: 19: 2007-09-02 Ulrich Drepper <drepper@redhat.com> 20: 21: * sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S 22: (__pthread_cond_wait): Fix unlocking of internal lock after mutex 23: unlocking failed. 24: Patch by Luca Barbieri <luca.barbieri@gmail.com>. 25: 26: 2007-08-21 Ulrich Drepper <drepper@redhat.com> 27: 28: [BZ #4938] 29: * allocatestack.c (__reclaim_stacks): Clear the TSD in the 30: reclaimed stack if necessary. 31: * Makefile (tests): Add tst-tsd6. 32: * tst-tsd6.c: New file. 33: 34: 2007-08-21 Jakub Jelinek <jakub@redhat.com> 35: 36: * sysdeps/unix/sysv/linux/alpha/lowlevellock.h (lll_robust_dead): 37: Add private argument. 38: 39: 2007-08-20 Ulrich Drepper <drepper@redhat.com> 40: 41: * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S 42: (__pthread_cond_timedwait): Use clock_gettime from VDSO if possible. 43: 44: 2007-08-16 Jakub Jelinek <jakub@redhat.com> 45: 46: * sysdeps/unix/sysv/linux/alpha/lowlevellock.h 47: (__lll_robust_timedlock): Pass private as last argument to 48: __lll_robust_timedlock_wait. 49: (__lll_unlock): Fix a pasto. 50: 51: 2007-08-15 Jakub Jelinek <jakub@redhat.com> 52: 53: * sysdeps/unix/sysv/linux/sparc/internaltypes.h (sparc_new_sem, 54: sparc_old_sem): New structs. 55: * sysdeps/unix/sysv/linux/sparc/sparc32/sem_wait.c 56: (__sem_wait_cleanup): New function. 57: (__new_sem_wait): Use sparc_new_sem structure. Bump and afterwards 58: decrease nwaiters. Register __sem_wait_cleanup as cleanup handler. 59: Pass isem->private ^ FUTEX_PRIVATE_FLAG as last argument to 60: lll_futex_wait. 61: (__old_sem_wait): New function. 62: * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_wait.c: Include 63: nptl/sysdeps/unix/sysv/linux/sparc version. 64: * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_timedwait.c: 65: Likewise. 66: * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_post.c: Likewise. 67: * sysdeps/unix/sysv/linux/sparc/sparc32/sem_trywait.c 68: (__new_sem_trywait): Use sparc_old_sem structure. 69: * sysdeps/unix/sysv/linux/sparc/sparc32/sem_timedwait.c 70: (sem_timedwait): Use sparc_new_sem structure. Bump and afterwards 71: decrease nwaiters. Register __sem_wait_cleanup as cleanup handler. 72: Pass isem->private ^ FUTEX_PRIVATE_FLAG as last argument to 73: lll_futex_timed_wait. 74: * sysdeps/unix/sysv/linux/sparc/sparc32/sem_post.c (__new_sem_post): 75: Use sparc_new_sem structure. Only wake if nwaiters > 0. Pass 76: isem->private ^ FUTEX_PRIVATE_FLAG as last argument to 77: lll_futex_wake. 78: (__old_sem_post): New function. 79: * sysdeps/unix/sysv/linux/sparc/sem_wait.c: New file. 80: * sysdeps/unix/sysv/linux/sparc/sem_init.c: New file. 81: * sysdeps/unix/sysv/linux/sparc/sem_timedwait.c: New file. 82: * sysdeps/unix/sysv/linux/sparc/sem_post.c: New file. 83: * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_init.c: Remove. 84: * sysdeps/unix/sysv/linux/sparc/sparc32/sem_init.c: Remove. 85: 86: 2007-08-14 Kaz Kojima <kkojima@rr.iij4u.or.jp> 87: 88: * sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S 89: (__pthread_cond_broadcast): Pass LLL_PRIVATE to lll_* and or 90: FUTEX_PRIVATE_FLAG into SYS_futex op if cv is process private. 91: Don't use FUTEX_CMP_REQUEUE if dep_mutex is not process private. 92: * sysdeps/unix/sysv/linux/shpthread_cond_signal.S 93: (__pthread_cond_signal): Pass LLL_PRIVATE to lll_* and or 94: FUTEX_PRIVATE_FLAG into SYS_futex op if cv is process private. 95: Use FUTEX_WAKE_OP. 96: * sysdeps/unix/sysv/linux/sh/pthread_cond_wait.S: Include 97: kernel-features.h and tcb-offsets.h. 98: (__pthread_cond_wait, __condvar_w_cleanup): Pass LLL_PRIVATE to 99: lll_* and or FUTEX_PRIVATE_FLAG into SYS_futex op if cv is 100: process private. 101: * sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S: Include 102: tcb-offsets.h. 103: (__pthread_cond_timedwait, __condvar_tw_cleanup): Pass LLL_PRIVATE 104: to lll_* and or FUTEX_PRIVATE_FLAG into SYS_futex op if cv is 105: process private. 106: * sysdeps/unix/sysv/linux/sh/pthread_once.S: Use #ifdef 107: __ASSUME_PRIVATE_FUTEX instead of #if __ASSUME_PRIVATE_FUTEX. 108: * sysdeps/unix/sysv/linux/sh/pthread_rwlock_rdlock.S: Likewise. 109: * sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S: Likewise. 110: * sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S: Likewise. 111: * sysdeps/unix/sysv/linux/sh/pthread_rwlock_unlock.S: Likewise. 112: * sysdeps/unix/sysv/linux/sh/pthread_rwlock_wrlock.S: Likewise. 113: 114: 2007-08-14 Jakub Jelinek <jakub@redhat.com> 115: 116: * sysdeps/unix/sysv/linux/lowlevellock.c: Comment fix. 117: * sysdeps/unix/sysv/linux/sparc/sparc32/lowlevellock.c 118: (__lll_timedwait_tid): Pass LLL_SHARED as 4th argument to 119: lll_futex_timed_wait. 120: 121: * sysdeps/unix/sysv/linux/alpha/lowlevellock.h (__lll_unlock, 122: __lll_robust_unlock): Rewrite as macros instead of inline functions. 123: * sysdeps/unix/sysv/linux/s390/lowlevellock.h (__lll_unlock, 124: __lll_robust_unlock, __lll_wait_tid): Likewise. 125: 126: 2007-08-13 Jakub Jelinek <jakub@redhat.com> 127: 128: * sysdeps/unix/sysv/linux/i386/lowlevellock.h (__lll_private_flag): 129: Fix a pasto. 130: * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S 131: (__pthread_cond_broadcast): Pass LLL_PRIVATE to lll_* and or 132: FUTEX_PRIVATE_FLAG into SYS_futex op if cv is process private. 133: Don't use FUTEX_CMP_REQUEUE if dep_mutex is not process private. 134: * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S 135: (__pthread_cond_signal): Pass LLL_PRIVATE to lll_* and or 136: FUTEX_PRIVATE_FLAG into SYS_futex op if cv is process private. 137: * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: Include 138: kernel-features.h. 139: (__pthread_cond_wait, __condvar_w_cleanup): Pass LLL_PRIVATE to 140: lll_* and or FUTEX_PRIVATE_FLAG into SYS_futex op if cv is 141: process private. Switch DW_CFA_advance_loc1 and some 142: DW_CFA_advance_loc .eh_frame opcodes to DW_CFA_advance_loc4. 143: * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S 144: (__pthread_cond_timedwait, __condvar_tw_cleanup): Pass LLL_PRIVATE to 145: lll_* and or FUTEX_PRIVATE_FLAG into SYS_futex op if cv is 146: process private. Switch DW_CFA_advance_loc{1,2} and some 147: DW_CFA_advance_loc .eh_frame opcodes to DW_CFA_advance_loc4. 148: * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S: Use 149: #ifdef __ASSUME_PRIVATE_FUTEX instead of #if __ASSUME_PRIVATE_FUTEX. 150: * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S: 151: Likewise. 152: * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S: Likewise. 153: * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S: Likewise. 154: * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S: 155: Likewise. 156: * sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S 157: (__pthread_cond_broadcast): Compare %r8 instead of 158: dep_mutex-cond_*(%rdi) with $-1. 159: * sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S 160: (__pthread_cond_signal): Xor FUTEX_WAKE_OP with FUTEX_WAKE instead 161: of oring. 162: 163: 2007-08-13 Ulrich Drepper <drepper@redhat.com> 164: 165: * sysdeps/unix/sysv/linux/i386/i786/Implies: New file. 166: 167: 2007-08-13 Jakub Jelinek <jakub@redhat.com> 168: 169: * allocatestack.c: Include kernel-features.h. 170: * pthread_create.c: Likewise. 171: * pthread_mutex_init.c: Likewise. 172: * init.c: Likewise. 173: * pthread_cond_timedwait.c: Likewise. 174: * sysdeps/unix/sysv/linux/alpha/lowlevellock.h: Likewise. 175: * sysdeps/unix/sysv/linux/ia64/lowlevellock.h: Likewise. 176: * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S: Likewise. 177: * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S: Likewise. 178: * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S: Likewise. 179: * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S: Likewise. 180: * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S: 181: Likewise. 182: * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S: 183: Likewise. 184: * sysdeps/unix/sysv/linux/s390/lowlevellock.h: Likewise. 185: * sysdeps/unix/sysv/linux/powerpc/lowlevellock.h: Likewise. 186: * sysdeps/unix/sysv/linux/sparc/lowlevellock.h: Likewise. 187: * sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S: Likewise. 188: 189: 2007-08-12 Jakub Jelinek <jakub@redhat.com> 190: 191: * sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h 192: [__WORDSIZE=32] (pthread_rwlock_t): Split __flags element into four 193: byte elements. One of them is the new __shared element. 194: [__WORDSIZE=64] (pthread_rwlock_t): Renamed __pad1 element to __shared, 195: adjust names of other padding elements. 196: * sysdeps/unix/sysv/linux/s390/bits/pthreadtypes.h 197: [__WORDSIZE=32] (pthread_rwlock_t): Split __flags element into four 198: byte elements. One of them is the new __shared element. 199: [__WORDSIZE=64] (pthread_rwlock_t): Renamed __pad1 element to __shared, 200: adjust names of other padding elements. 201: * sysdeps/unix/sysv/linux/ia64/bits/pthreadtypes.h (pthread_rwlock_t): 202: Renamed __pad1 element to __shared, adjust names of other padding 203: elements. 204: * sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h 205: (pthread_rwlock_t): Likewise. 206: * sysdeps/unix/sysv/linux/ia64/lowlevellock.h (__lll_lock): Fix a 207: typo. 208: 209: 2007-08-09 Anton Blanchard <anton@samba.org> 210: 211: * sysdeps/unix/sysv/linux/powerpc/pthread_spin_unlock.c: New file. 212: 213: 2007-08-12 Ulrich Drepper <drepper@redhat.com> 214: 215: * sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S: Include 216: <kernel-features.h>. 217: * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S: Likewise. 218: 219: 2007-08-11 Ulrich Drepper <drepper@redhat.com> 220: 221: * pthreadP.h (PTHREAD_ROBUST_MUTEX_PSHARED): Define. 222: * pthread_mutex_lock.c: Use it instead of PTHREAD_MUTEX_PSHARED when 223: dealing with robust mutexes. 224: * pthread_mutex_timedlock.c: Likewise. 225: * pthread_mutex_trylock.c: Likewise. 226: * pthread_mutex_unlock.c: Likewise. 227: * sysdeps/unix/sysv/linux/pthread_mutex_cond_lock.c: Likewise. 228: 229: 2007-08-06 Jakub Jelinek <jakub@redhat.com> 230: 231: * pthreadP.h (PTHREAD_MUTEX_PSHARED_BIT): Define. 232: (PTHREAD_MUTEX_TYPE): Mask __kind with 127. 233: (PTHREAD_MUTEX_PSHARED): Define. 234: * pthread_mutex_init.c (__pthread_mutex_init): Set 235: PTHREAD_MUTEX_PSHARED_BIT for pshared or robust 236: mutexes. 237: * pthread_mutex_lock.c (LLL_MUTEX_LOCK): Take mutex as argument 238: instead of its __data.__lock field, pass PTHREAD_MUTEX_PSHARED 239: as second argument to lll_lock. 240: (LLL_MUTEX_TRYLOCK): Take mutex as argument 241: instead of its __data.__lock field. 242: (LLL_ROBUST_MUTEX_LOCK): Take mutex as argument instead of its 243: __data.__lock field, pass PTHREAD_MUTEX_PSHARED as second argument 244: to lll_robust_lock. 245: (__pthread_mutex_lock): Update LLL_MUTEX_LOCK, LLL_MUTEX_TRYLOCK, 246: LLL_ROBUST_MUTEX_LOCK users, use PTHREAD_MUTEX_TYPE (mutex) 247: instead of mutex->__data.__kind directly, pass 248: PTHREAD_MUTEX_PSHARED (mutex) to lll_unlock and lll_futex_wait. 249: * pthread_mutex_trylock.c (__pthread_mutex_trylock): Use 250: PTHREAD_MUTEX_TYPE (mutex) instead of mutex->__data.__kind 251: directly, pass PTHREAD_MUTEX_PSHARED (mutex) to lll_unlock. 252: (pthread_mutex_timedlock): Pass PTHREAD_MUTEX_PSHARED (mutex) 253: to lll_timedlock, lll_robust_timedlock, lll_unlock and 254: lll_futex_timed_wait. Use PTHREAD_MUTEX_TYPE (mutex) instead 255: of mutex->__data.__kind directly. 256: * pthread_mutex_timedlock.c (pthread_mutex_timedlock): Pass 257: PTHREAD_MUTEX_PSHARED (mutex) to lll_timedlock, 258: lll_robust_timedlock, lll_unlock and lll_futex_timed_wait. Use 259: PTHREAD_MUTEX_TYPE (mutex) instead of mutex->__data.__kind directly. 260: * pthread_mutex_unlock.c (__pthread_mutex_unlock_usercnt): Pass 261: PTHREAD_MUTEX_PSHARED (mutex) to lll_unlock, lll_robust_unlock 262: and lll_futex_wake. 263: * pthread_mutex_setprioceiling.c (pthread_mutex_setprioceiling): Pass 264: PTHREAD_MUTEX_PSHARED (mutex) to lll_futex_wait and lll_futex_wake. 265: Use PTHREAD_MUTEX_TYPE (mutex) instead of mutex->__data.__kind 266: directly. 267: * sysdeps/unix/sysv/linux/pthread_mutex_cond_lock.c (LLL_MUTEX_LOCK): 268: Take mutex as argument instead of its __data.__lock field, pass 269: PTHREAD_MUTEX_PSHARED as second argument to lll_cond_lock. 270: (LLL_MUTEX_TRYLOCK): Take mutex as argument instead of its 271: __data.__lock field. 272: (LLL_ROBUST_MUTEX_LOCK): Take mutex as argument instead of its 273: __data.__lock field, pass PTHREAD_MUTEX_PSHARED as second argument 274: to lll_robust_cond_lock. 275: * pthread_cond_broadcast.c (__pthread_cond_broadcast): Add pshared 276: variable, pass it to lll_lock, lll_unlock, lll_futex_requeue and 277: lll_futex_wake. Don't use lll_futex_requeue if dependent mutex 278: has PTHREAD_MUTEX_PSHARED_BIT bit set in its __data.__kind. 279: * pthread_cond_destroy.c (__pthread_cond_destroy): Add pshared 280: variable, pass it to lll_lock, lll_unlock, lll_futex_wake and 281: lll_futex_wait. 282: * pthread_cond_signal.c (__pthread_cond_signal): Add pshared 283: variable, pass it to lll_lock, lll_unlock, lll_futex_wake_unlock and 284: lll_futex_wake. 285: * pthread_cond_timedwait.c (__pthread_cond_wait): Add 286: pshared variable, pass it to lll_lock, lll_unlock, 287: lll_futex_timedwait and lll_futex_wake. 288: * pthread_cond_wait.c (__condvar_cleanup, __pthread_cond_wait): Add 289: pshared variable, pass it to lll_lock, lll_unlock, lll_futex_wait 290: and lll_futex_wake. 291: * sysdeps/unix/sysv/linux/alpha/lowlevellock.h (lll_futex_requeue, 292: lll_futex_wake_unlock): Add private argument, use __lll_private_flag 293: macro. 294: * sysdeps/unix/sysv/linux/ia64/lowlevellock.h (lll_futex_requeue, 295: lll_futex_wake_unlock): Likewise. 296: * sysdeps/unix/sysv/linux/powerpc/lowlevellock.h (lll_futex_requeue): 297: Likewise. 298: * sysdeps/unix/sysv/linux/sparc/lowlevellock.h (lll_futex_requeue, 299: lll_futex_wake_unlock): Likewise. 300: * sysdeps/unix/sysv/linux/x86_64/lowlevellock.h (lll_futex_requeue): 301: Likewise. 302: * sysdeps/unix/sysv/linux/s390/lowlevellock.h (lll_futex_requeue, 303: lll_futex_wake_unlock): Likewise. 304: (lll_futex_wake): Fix a typo. 305: * sysdeps/unix/sysv/linux/pthread-pi-defines.sym (PS_BIT): Add. 306: * sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S 307: (__pthread_cond_broadcast): Pass LLL_PRIVATE to lll_* and or 308: FUTEX_PRIVATE_FLAG into SYS_futex op if cv is process private. 309: Don't use FUTEX_CMP_REQUEUE if dep_mutex is not process private. 310: * sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S 311: (__pthread_cond_signal): Pass LLL_PRIVATE to lll_* and or 312: FUTEX_PRIVATE_FLAG into SYS_futex op if cv is process private. 313: * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S 314: (__pthread_cond_timedwait): Likewise. 315: * sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S: 316: (__condvar_cleanup, __pthread_cond_wait): Likewise. 317: 318: 2007-08-05 Jakub Jelinek <jakub@redhat.com> 319: 320: * sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h (PSEUDO): 321: Don't use CGOTSETUP and CGOTRESTORE macros. 322: (CGOTSETUP, CGOTRESTORE): Remove. 323: <IS_IN_rtld> (CENABLE, CDISABLE): Don't use JUMPTARGET, branch to 324: @local symbol. 325: 326: 2007-08-01 Kaz Kojima <kkojima@rr.iij4u.or.jp> 327: 328: * sysdeps/unix/sysv/linux/sh/libc-lowlevellock.S: Remove 329: definitions for private futexes. 330: * sysdeps/unix/sysv/linux/sh/lowlevellock.S: Include 331: kernel-features.h and lowlevellock.h. Use private futexes if 332: they are available. 333: (__lll_lock_wait_private, __lll_unlock_wake_private): New. 334: (__lll_mutex_lock_wait): Rename to 335: (__lll_lock_wait): ... this. Don't compile in for libc.so. 336: (__lll_mutex_timedlock_wait): Rename to ... 337: (__lll_timedlock_wait): ... this. Use __NR_gettimeofday. 338: Don't compile in for libc.so. 339: (__lll_mutex_unlock_wake): Rename to ... 340: (__lll_unlock_wake): ... this. Don't compile in for libc.so. 341: (__lll_timedwait_tid): Use __NR_gettimeofday. 342: * sysdeps/unix/sysv/linux/sh/lowlevellock.h: Allow including 343: the header from assembler. Renamed all lll_mutex_* resp. 344: lll_robust_mutex_* macros to lll_* resp. lll_robust_*. 345: Renamed all LLL_MUTEX_LOCK_* macros to LLL_LOCK_*. 346: (FUTEX_CMP_REQUEUE, FUTEX_WAKE_OP, FUTEX_OP_CLEAR_WAKE_IF_GT_ONE): 347: Define. 348: (__lll_lock_wait_private): Add prototype. 349: (__lll_lock_wait, __lll_timedlock_wait, __lll_robust_lock_wait, 350: __lll_robust_timedlock_wait, __lll_unlock_wake_private, 351: __lll_unlock_wake): Likewise. 352: (lll_lock): Add private argument. Call __lll_lock_wait_private 353: if private is constant LLL_PRIVATE. 354: (lll_robust_lock, lll_cond_lock, lll_robust_cond_lock, 355: lll_timedlock, lll_robust_timedlock): Add private argument. 356: (lll_unlock): Add private argument. Call __lll_unlock_wake_private 357: if private is constant LLL_PRIVATE. 358: (lll_robust_unlock, lll_robust_dead): Add private argument. 359: (lll_lock_t): Remove. 360: (__lll_cond_wait, __lll_cond_timedwait, __lll_cond_wake, 361: __lll_cond_broadcast, lll_cond_wait, lll_cond_timedwait, 362: lll_cond_wake, lll_cond_broadcast): Remove. 363: * sysdeps/unix/sysv/linux/sh/lowlevelrobustlock.S: Include 364: kernel-features.h and lowlevellock.h. 365: (SYS_gettimeofday, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Remove. 366: (LOAD_FUTEX_WAIT): Define. 367: (__lll_robust_mutex_lock_wait): Rename to ... 368: (__lll_robust_lock_wait): ... this. Add private argument. 369: Use LOAD_FUTEX_WAIT macro. 370: (__lll_robust_mutex_timedlock_wait): Rename to ... 371: (__lll_robust_timedlock_wait): ... this. Add private argument. 372: Use __NR_gettimeofday. Use LOAD_FUTEX_WAIT macro. 373: * sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S: Include 374: lowlevellock.h. 375: (SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Remove. 376: (pthread_barrier_wait): Use __lll_{lock,unlock}_* instead of 377: __lll_mutex_{lock,unlock}_*. 378: * sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S: Include 379: lowlevellock.h and pthread-errnos.h. 380: (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_REQUEUE, 381: FUTEX_CMP_REQUEUE, EINVAL): Remove. 382: (__pthread_cond_broadcast): Use __lll_{lock,unlock}_* instead of 383: __lll_mutex_{lock,unlock}_*. 384: * sysdeps/unix/sysv/linux/sh/pthread_cond_signal.S: Include 385: lowlevellock.h and pthread-errnos.h. 386: (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_REQUEUE, EINVAL): Remove. 387: (__pthread_cond_signal): Use __lll_{lock,unlock}_* instead of 388: __lll_mutex_{lock,unlock}_*. 389: * sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S: Include 390: lowlevellock.h. 391: (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE): Remove. 392: (__pthread_cond_timedwait): Use __lll_{lock,unlock}_* instead of 393: __lll_mutex_{lock,unlock}_*. Use __NR_gettimeofday. 394: (__condvar_tw_cleanup): Likewise. 395: * sysdeps/unix/sysv/linux/sh/pthread_cond_wait.S: Include 396: lowlevellock.h. 397: (SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Remove. 398: (__pthread_cond_wait): Use __lll_{lock,unlock}_* instead of 399: __lll_mutex_{lock,unlock}_*. 400: ( __condvar_w_cleanup): Likewise. 401: * sysdeps/unix/sysv/linux/sh/pthread_once.S: Include lowlevellock.h. 402: (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG): Remove. 403: * sysdeps/unix/sysv/linux/sh/pthread_rwlock_rdlock.S: Include 404: lowlevellock.h. 405: (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG): Remove. 406: (__pthread_rwlock_rdlock): Use __lll_{lock,unlock}_* instead of 407: __lll_mutex_{lock,unlock}_*. 408: * sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S: Include 409: lowlevellock.h. 410: (SYS_gettimeofday, SYS_futex, FUTEX_WAIT, FUTEX_WAKE, 411: FUTEX_PRIVATE_FLAG): Remove. 412: (pthread_rwlock_timedrdlock): Use __lll_{lock,unlock}_* instead of 413: __lll_mutex_{lock,unlock}_*. Use __NR_gettimeofday. 414: * sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S: Include 415: lowlevellock.h. 416: (SYS_gettimeofday, SYS_futex, FUTEX_WAIT, FUTEX_WAKE, 417: FUTEX_PRIVATE_FLAG): Remove. 418: (pthread_rwlock_timedwrlock): Use __lll_{lock,unlock}_* instead of 419: __lll_mutex_{lock,unlock}_*. Use __NR_gettimeofday. 420: * sysdeps/unix/sysv/linux/sh/pthread_rwlock_unlock.S: Include 421: lowlevellock.h. 422: (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG): Remove. 423: (__pthread_rwlock_unlock): Use __lll_{lock,unlock}_* instead of 424: __lll_mutex_{lock,unlock}_*. 425: * sysdeps/unix/sysv/linux/sh/pthread_rwlock_wrlock.S: Include 426: lowlevellock.h. 427: (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG): Remove. 428: (__pthread_rwlock_wrlock): Use __lll_{lock,unlock}_* instead of 429: __lll_mutex_{lock,unlock}_*. 430: * sysdeps/unix/sysv/linux/sh/sem_post.S: Include lowlevellock.h. 431: (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG): Remove. 432: (__new_sem_post): Use standard initial exec code sequences. 433: * sysdeps/unix/sysv/linux/sh/sem_timedwait.S: Include 434: lowlevellock.h. 435: (SYS_gettimeofday, SYS_futex, FUTEX_WAIT, FUTEX_WAKE, 436: FUTEX_PRIVATE_FLAG): Remove. 437: (sem_timedwait): Use __NR_gettimeofday. Use standard initial 438: exec code sequences. 439: * sysdeps/unix/sysv/linux/sh/sem_trywait.S: Include lowlevellock.h. 440: (__new_sem_trywait): Use standard initial exec code sequences. 441: * sysdeps/unix/sysv/linux/sh/sem_wait.S: Include lowlevellock.h. 442: (__new_sem_wait): Use standard initial exec code sequences. 443: 444: 2007-07-31 Anton Blanchard <anton@samba.org> 445: 446: * sysdeps/unix/sysv/linux/powerpc/sem_post.c (__new_sem_post): 447: Use __asm __volatile (__lll_acq_instr ::: "memory") instead of 448: atomic_full_barrier. 449: 450: 2007-07-31 Jakub Jelinek <jakub@redhat.com> 451: 452: * allocatestack.c (stack_cache_lock): Change type to int. 453: (get_cached_stack, allocate_stack, __deallocate_stack, 454: __make_stacks_executable, __find_thread_by_id, __nptl_setxid, 455: __pthread_init_static_tls, __wait_lookup_done): Add LLL_PRIVATE 456: as second argument to lll_lock and lll_unlock macros on 457: stack_cache_lock. 458: * pthread_create.c (__find_in_stack_list): Likewise. 459: (start_thread): Similarly with pd->lock. Use lll_robust_dead 460: macro instead of lll_robust_mutex_dead, pass LLL_SHARED to it 461: as second argument. 462: * descr.h (struct pthread): Change lock and setxid_futex field 463: type to int. 464: * old_pthread_cond_broadcast.c (__pthread_cond_broadcast_2_0): Use 465: LLL_LOCK_INITIALIZER instead of LLL_MUTEX_LOCK_INITIALIZER. 466: * old_pthread_cond_signal.c (__pthread_cond_signal_2_0): Likewise. 467: * old_pthread_cond_timedwait.c (__pthread_cond_timedwait_2_0): 468: Likewise. 469: * old_pthread_cond_wait.c (__pthread_cond_wait_2_0): Likewise. 470: * pthread_cond_init.c (__pthread_cond_init): Likewise. 471: * pthreadP.h (__attr_list_lock): Change type to int. 472: * pthread_attr_init.c (__attr_list_lock): Likewise. 473: * pthread_barrier_destroy.c (pthread_barrier_destroy): Pass 474: ibarrier->private ^ FUTEX_PRIVATE_FLAG as second argument to 475: lll_{,un}lock. 476: * pthread_barrier_wait.c (pthread_barrier_wait): Likewise and 477: also for lll_futex_{wake,wait}. 478: * pthread_barrier_init.c (pthread_barrier_init): Make iattr 479: a pointer to const. 480: * pthread_cond_broadcast.c (__pthread_cond_broadcast): Pass 481: LLL_SHARED as second argument to lll_{,un}lock. 482: * pthread_cond_destroy.c (__pthread_cond_destroy): Likewise. 483: * pthread_cond_signal.c (__pthread_cond_singal): Likewise. 484: * pthread_cond_timedwait.c (__pthread_cond_timedwait): Likewise. 485: * pthread_cond_wait.c (__condvar_cleanup, __pthread_cond_wait): 486: Likewise. 487: * pthread_getattr_np.c (pthread_getattr_np): Add LLL_PRIVATE 488: as second argument to lll_{,un}lock macros on pd->lock. 489: * pthread_getschedparam.c (__pthread_getschedparam): Likewise. 490: * pthread_setschedparam.c (__pthread_setschedparam): Likewise. 491: * pthread_setschedprio.c (pthread_setschedprio): Likewise. 492: * tpp.c (__pthread_tpp_change_priority, __pthread_current_priority): 493: Likewise. 494: * sysdeps/pthread/createthread.c (do_clone, create_thread): 495: Likewise. 496: * pthread_once.c (once_lock): Change type to int. 497: (__pthread_once): Pass LLL_PRIVATE as second argument to 498: lll_{,un}lock macros on once_lock. 499: * pthread_rwlock_rdlock.c (__pthread_rwlock_rdlock): Use 500: lll_{,un}lock macros instead of lll_mutex_{,un}lock, pass 501: rwlock->__data.__shared as second argument to them and similarly 502: for lll_futex_w*. 503: * pthread_rwlock_timedrdlock.c (pthread_rwlock_timedrdlock): 504: Likewise. 505: * pthread_rwlock_timedwrlock.c (pthread_rwlock_timedwrlock): 506: Likewise. 507: * pthread_rwlock_tryrdlock.c (__pthread_rwlock_tryrdlock): Likewise. 508: * pthread_rwlock_trywrlock.c (__pthread_rwlock_trywrlock): Likewise. 509: * pthread_rwlock_unlock.c (__pthread_rwlock_unlock): Likewise. 510: * pthread_rwlock_wrlock.c (__pthread_rwlock_wrlock): Likewise. 511: * sem_close.c (sem_close): Pass LLL_PRIVATE as second argument 512: to lll_{,un}lock macros on __sem_mappings_lock. 513: * sem_open.c (check_add_mapping): Likewise. 514: (__sem_mappings_lock): Change type to int. 515: * semaphoreP.h (__sem_mappings_lock): Likewise. 516: * pthread_mutex_lock.c (LLL_MUTEX_LOCK, LLL_MUTEX_TRYLOCK, 517: LLL_ROBUST_MUTEX_LOCK): Use lll_{,try,robust_}lock macros 518: instead of lll_*mutex_*, pass LLL_SHARED as last 519: argument. 520: (__pthread_mutex_lock): Use lll_unlock instead of lll_mutex_unlock, 521: pass LLL_SHARED as last argument. 522: * sysdeps/unix/sysv/linux/pthread_mutex_cond_lock.c (LLL_MUTEX_LOCK, 523: LLL_MUTEX_TRYLOCK, LLL_ROBUST_MUTEX_LOCK): Use 524: lll_{cond_,cond_try,robust_cond}lock macros instead of lll_*mutex_*, 525: pass LLL_SHARED as last argument. 526: * pthread_mutex_timedlock.c (pthread_mutex_timedlock): Use 527: lll_{timed,try,robust_timed,un}lock instead of lll_*mutex*, pass 528: LLL_SHARED as last argument. 529: * pthread_mutex_trylock.c (__pthread_mutex_trylock): Similarly. 530: * pthread_mutex_unlock.c (__pthread_mutex_unlock_usercnt): 531: Similarly. 532: * sysdeps/pthread/bits/libc-lock.h (__libc_lock_lock, 533: __libc_lock_lock_recursive, __libc_lock_unlock, 534: __libc_lock_unlock_recursive): Pass LLL_PRIVATE as second 535: argument to lll_{,un}lock. 536: * sysdeps/pthread/bits/stdio-lock.h (_IO_lock_lock, 537: _IO_lock_unlock): Likewise. 538: * sysdeps/unix/sysv/linux/fork.c (__libc_fork): Don't use 539: compound literal. 540: * sysdeps/unix/sysv/linux/unregister-atfork.c (__unregister_atfork): 541: Pass LLL_PRIVATE as second argument to lll_{,un}lock macros on 542: __fork_lock. 543: * sysdeps/unix/sysv/linux/register-atfork.c (__register_atfork, 544: free_mem): Likewise. 545: (__fork_lock): Change type to int. 546: * sysdeps/unix/sysv/linux/fork.h (__fork_lock): Likewise. 547: * sysdeps/unix/sysv/linux/sem_post.c (__new_sem_post): Pass 548: isem->private ^ FUTEX_PRIVATE_FLAG as second argument to 549: lll_futex_wake. 550: * sysdeps/unix/sysv/linux/sem_timedwait.c (sem_timedwait): Likewise. 551: * sysdeps/unix/sysv/linux/sem_wait.c (__new_sem_wait): Likewise. 552: * sysdeps/unix/sysv/linux/lowlevellock.c (__lll_lock_wait_private): 553: New function. 554: (__lll_lock_wait, __lll_timedlock_wait): Add private argument and 555: pass it through to lll_futex_*wait, only compile in when 556: IS_IN_libpthread. 557: * sysdeps/unix/sysv/linux/lowlevelrobustlock.c 558: (__lll_robust_lock_wait, __lll_robust_timedlock_wait): Add private 559: argument and pass it through to lll_futex_*wait. 560: * sysdeps/unix/sysv/linux/alpha/lowlevellock.h: Renamed all 561: lll_mutex_* resp. lll_robust_mutex_* macros to lll_* resp. 562: lll_robust_*. Renamed all __lll_mutex_* resp. __lll_robust_mutex_* 563: inline functions to __lll_* resp. __lll_robust_*. 564: (LLL_MUTEX_LOCK_INITIALIZER): Remove. 565: (lll_mutex_dead): Add private argument. 566: (__lll_lock_wait_private): New prototype. 567: (__lll_lock_wait, __lll_robust_lock_wait, __lll_lock_timedwait, 568: __lll_robust_lock_timedwait): Add private argument to prototypes. 569: (__lll_lock): Add private argument, if it is constant LLL_PRIVATE, 570: call __lll_lock_wait_private, otherwise pass private to 571: __lll_lock_wait. 572: (__lll_robust_lock, __lll_cond_lock, __lll_timedlock, 573: __lll_robust_timedlock): Add private argument, pass it to 574: __lll_*wait functions. 575: (__lll_unlock): Add private argument, if it is constant LLL_PRIVATE, 576: call __lll_unlock_wake_private, otherwise pass private to 577: __lll_unlock_wake. 578: (__lll_robust_unlock): Add private argument, pass it to 579: __lll_robust_unlock_wake. 580: (lll_lock, lll_robust_lock, lll_cond_lock, lll_timedlock, 581: lll_robust_timedlock, lll_unlock, lll_robust_unlock): Add private 582: argument, pass it through to __lll_* inline function. 583: (__lll_mutex_unlock_force, lll_mutex_unlock_force): Remove. 584: (lll_lock_t): Remove. 585: (__lll_cond_wait, __lll_cond_timedwait, __lll_cond_wake, 586: __lll_cond_broadcast, lll_cond_wait, lll_cond_timedwait, 587: lll_cond_wake, lll_cond_broadcast): Remove. 588: * sysdeps/unix/sysv/linux/ia64/lowlevellock.h: Likewise. 589: * sysdeps/unix/sysv/linux/powerpc/lowlevellock.h: Likewise. 590: * sysdeps/unix/sysv/linux/s390/lowlevellock.h: Likewise. 591: * sysdeps/unix/sysv/linux/sparc/lowlevellock.h: Likewise. 592: * sysdeps/unix/sysv/linux/i386/lowlevellock.h: Allow including 593: the header from assembler. Renamed all lll_mutex_* resp. 594: lll_robust_mutex_* macros to lll_* resp. lll_robust_*. 595: (LOCK, FUTEX_CMP_REQUEUE, FUTEX_WAKE_OP, 596: FUTEX_OP_CLEAR_WAKE_IF_GT_ONE): Define. 597: (LLL_MUTEX_LOCK_INITIALIZER, LLL_MUTEX_LOCK_INITIALIZER_LOCKED, 598: LLL_MUTEX_LOCK_INITIALIZER_WAITERS): Remove. 599: (__lll_mutex_lock_wait, __lll_mutex_timedlock_wait, 600: __lll_mutex_unlock_wake, __lll_lock_wait, __lll_unlock_wake): 601: Remove prototype. 602: (__lll_trylock_asm, __lll_lock_asm_start, __lll_unlock_asm): Define. 603: (lll_robust_trylock, lll_cond_trylock): Use LLL_LOCK_INITIALIZER* 604: rather than LLL_MUTEX_LOCK_INITIALIZER* macros. 605: (lll_trylock): Likewise, use __lll_trylock_asm, pass 606: MULTIPLE_THREADS_OFFSET as another asm operand. 607: (lll_lock): Add private argument, use __lll_lock_asm_start, pass 608: MULTIPLE_THREADS_OFFSET as last asm operand, call 609: __lll_lock_wait_private if private is constant LLL_PRIVATE, 610: otherwise pass private as another argument to __lll_lock_wait. 611: (lll_robust_lock, lll_cond_lock, lll_robust_cond_lock, 612: lll_timedlock, lll_robust_timedlock): Add private argument, pass 613: private as another argument to __lll_*lock_wait call. 614: (lll_unlock): Add private argument, use __lll_unlock_asm, pass 615: MULTIPLE_THREADS_OFFSET as another asm operand, call 616: __lll_unlock_wake_private if private is constant LLL_PRIVATE, 617: otherwise pass private as another argument to __lll_unlock_wake. 618: (lll_robust_unlock): Add private argument, pass private as another 619: argument to __lll_unlock_wake. 620: (lll_robust_dead): Add private argument, use __lll_private_flag 621: macro. 622: (lll_islocked): Use LLL_LOCK_INITIALIZER instead of 623: LLL_MUTEX_LOCK_INITIALIZER. 624: (lll_lock_t): Remove. 625: (LLL_LOCK_INITIALIZER_WAITERS): Define. 626: (__lll_cond_wait, __lll_cond_timedwait, __lll_cond_wake, 627: __lll_cond_broadcast, lll_cond_wait, lll_cond_timedwait, 628: lll_cond_wake, lll_cond_broadcast): Remove. 629: * sysdeps/unix/sysv/linux/x86_64/lowlevellock.h: Likewise. 630: * sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S: Revert 631: 2007-05-2{3,9} changes. 632: * sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S: Include 633: kernel-features.h and lowlevellock.h. 634: (LOAD_PRIVATE_FUTEX_WAIT): Define. 635: (LOAD_FUTEX_WAIT): Rewritten. 636: (LOCK, SYS_gettimeofday, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't 637: define. 638: (__lll_lock_wait_private, __lll_unlock_wake_private): New functions. 639: (__lll_mutex_lock_wait): Rename to ... 640: (__lll_lock_wait): ... this. Take futex addr from %edx instead of 641: %ecx, %ecx is now private argument. Don't compile in for libc.so. 642: (__lll_mutex_timedlock_wait): Rename to ... 643: (__lll_timedlock_wait): ... this. Use __NR_gettimeofday. %esi 644: contains private argument. Don't compile in for libc.so. 645: (__lll_mutex_unlock_wake): Rename to ... 646: (__lll_unlock_wake): ... this. %ecx contains private argument. 647: Don't compile in for libc.so. 648: (__lll_timedwait_tid): Use __NR_gettimeofday. 649: * sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S: Include 650: kernel-features.h and lowlevellock.h. 651: (LOAD_FUTEX_WAIT): Define. 652: (LOCK, SYS_gettimeofday, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't 653: define. 654: (__lll_robust_mutex_lock_wait): Rename to ... 655: (__lll_robust_lock_wait): ... this. Futex addr is now in %edx 656: argument, %ecx argument contains private. Use LOAD_FUTEX_WAIT 657: macro. 658: (__lll_robust_mutex_timedlock_wait): Rename to ... 659: (__lll_robust_timedlock_wait): ... this. Use __NR_gettimeofday. 660: %esi argument contains private, use LOAD_FUTEX_WAIT macro. 661: * sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S: Include 662: lowlevellock.h. 663: (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. 664: (pthread_barrier_wait): Rename __lll_mutex_* to __lll_*, pass 665: PRIVATE(%ebx) ^ LLL_SHARED as private argument in %ecx to 666: __lll_lock_wait and __lll_unlock_wake, pass MUTEX(%ebx) address 667: to __lll_lock_wait in %edx. 668: * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S: 669: Include lowlevellock.h and pthread-errnos.h. 670: (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_REQUEUE, 671: FUTEX_CMP_REQUEUE, EINVAL, LOCK): Don't define. 672: (__pthread_cond_broadcast): Rename __lll_mutex_* to __lll_*, pass 673: cond_lock address in %edx rather than %ecx to __lll_lock_wait, 674: pass LLL_SHARED in %ecx to both __lll_lock_wait and 675: __lll_unlock_wake. 676: * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S: 677: Include lowlevellock.h and pthread-errnos.h. 678: (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_WAKE_OP, 679: FUTEX_OP_CLEAR_WAKE_IF_GT_ONE, EINVAL, LOCK): Don't define. 680: (__pthread_cond_signal): Rename __lll_mutex_* to __lll_*, pass 681: cond_lock address in %edx rather than %ecx to __lll_lock_wait, 682: pass LLL_SHARED in %ecx to both __lll_lock_wait and 683: __lll_unlock_wake. 684: * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S: 685: Include lowlevellock.h. 686: (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE, LOCK): 687: Don't define. 688: (__pthread_cond_timedwait): Rename __lll_mutex_* to __lll_*, pass 689: cond_lock address in %edx rather than %ecx to __lll_lock_wait, 690: pass LLL_SHARED in %ecx to both __lll_lock_wait and 691: __lll_unlock_wake. Use __NR_gettimeofday. 692: * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: 693: Include lowlevellock.h. 694: (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. 695: (__pthread_cond_wait, __condvar_w_cleanup): Rename __lll_mutex_* 696: to __lll_*, pass cond_lock address in %edx rather than %ecx to 697: __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait 698: and __lll_unlock_wake. 699: * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S: 700: Include lowlevellock.h. 701: (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. 702: (__pthread_rwlock_rdlock): Rename __lll_mutex_* to __lll_*, pass 703: MUTEX(%ebx) address in %edx rather than %ecx to 704: __lll_lock_wait, pass PSHARED(%ebx) in %ecx to both __lll_lock_wait 705: and __lll_unlock_wake. Move return value from %ecx to %edx 706: register. 707: * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S: 708: Include lowlevellock.h.