mirror of
https://sourceware.org/git/glibc.git
synced 2025-10-12 19:04:54 +03:00
Update.
* tst-tls2.c (do_test): Add TEMP_FAILURE_RETRY around sem_wait call. * tst-signal3.c (do_test): Likewise. * tst-sem5.c (do_test): Likewise. * tst-kill6.c (do_test): Likewise. * tst-tls3.c (do_test): Likewise. Include <errno.h>. * sysdeps/unix/sysv/linux/i386/lowlevellock.h: Use add/sub instead of inc/dec. * sysdeps/unix/sysv/linux/i386/lowlevelsem.h: Likewise. * sysdeps/unix/sysv/linux/i386/pthread_once.S: Likewise * sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/sem_post.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/lowlevelmutex.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S: Likewise.
This commit is contained in:
@@ -1,5 +1,32 @@
|
|||||||
2003-03-08 Ulrich Drepper <drepper@redhat.com>
|
2003-03-08 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
|
* tst-tls2.c (do_test): Add TEMP_FAILURE_RETRY around sem_wait call.
|
||||||
|
* tst-signal3.c (do_test): Likewise.
|
||||||
|
* tst-sem5.c (do_test): Likewise.
|
||||||
|
* tst-kill6.c (do_test): Likewise.
|
||||||
|
* tst-tls3.c (do_test): Likewise. Include <errno.h>.
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/i386/lowlevellock.h: Use add/sub instead
|
||||||
|
of inc/dec.
|
||||||
|
* sysdeps/unix/sysv/linux/i386/lowlevelsem.h: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/i386/pthread_once.S: Likewise
|
||||||
|
* sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/i386/i486/sem_post.S: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S:
|
||||||
|
Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S:
|
||||||
|
Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/i386/i486/lowlevelmutex.S: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S: Likewise.
|
||||||
|
|
||||||
* allocatestack.c (allocate_stack): If mprotect() fails free the
|
* allocatestack.c (allocate_stack): If mprotect() fails free the
|
||||||
TLS memory.
|
TLS memory.
|
||||||
|
|
||||||
|
@@ -77,7 +77,7 @@ lll_unlock_wake_cb:
|
|||||||
|
|
||||||
movl 20(%esp), %ebx
|
movl 20(%esp), %ebx
|
||||||
LOCK
|
LOCK
|
||||||
incl (%ebx)
|
addl $1, (%ebx)
|
||||||
jng 1f
|
jng 1f
|
||||||
|
|
||||||
popl %edx
|
popl %edx
|
||||||
@@ -140,7 +140,7 @@ __lll_timedwait_tid:
|
|||||||
subl %eax, %edx
|
subl %eax, %edx
|
||||||
jns 5f
|
jns 5f
|
||||||
addl $1000000000, %edx
|
addl $1000000000, %edx
|
||||||
decl %ecx
|
subl $1, %ecx
|
||||||
5: testl %ecx, %ecx
|
5: testl %ecx, %ecx
|
||||||
js 6f /* Time is already up. */
|
js 6f /* Time is already up. */
|
||||||
|
|
||||||
|
@@ -107,7 +107,7 @@ __lll_mutex_timedlock_wait:
|
|||||||
subl %eax, %edx
|
subl %eax, %edx
|
||||||
jns 4f
|
jns 4f
|
||||||
addl $1000000000, %edx
|
addl $1000000000, %edx
|
||||||
decl %ecx
|
subl $1, %ecx
|
||||||
4: testl %ecx, %ecx
|
4: testl %ecx, %ecx
|
||||||
js 5f /* Time is already up. */
|
js 5f /* Time is already up. */
|
||||||
|
|
||||||
@@ -159,9 +159,9 @@ __lll_mutex_unlock_wake:
|
|||||||
pushl %ecx
|
pushl %ecx
|
||||||
pushl %edx
|
pushl %edx
|
||||||
|
|
||||||
movl $FUTEX_WAKE, %ecx
|
|
||||||
movl %eax, %ebx
|
movl %eax, %ebx
|
||||||
movl $0, (%ebx)
|
movl $0, (%eax)
|
||||||
|
movl $FUTEX_WAKE, %ecx
|
||||||
movl $1, %edx /* Wake one thread. */
|
movl $1, %edx /* Wake one thread. */
|
||||||
movl $SYS_futex, %eax
|
movl $SYS_futex, %eax
|
||||||
ENTER_KERNEL
|
ENTER_KERNEL
|
||||||
|
@@ -53,7 +53,7 @@ pthread_barrier_wait:
|
|||||||
|
|
||||||
/* One less waiter. If this was the last one needed wake
|
/* One less waiter. If this was the last one needed wake
|
||||||
everybody. */
|
everybody. */
|
||||||
2: decl LEFT(%ebx)
|
2: subl $1, LEFT(%ebx)
|
||||||
je 3f
|
je 3f
|
||||||
|
|
||||||
/* There are more threads to come. */
|
/* There are more threads to come. */
|
||||||
@@ -67,7 +67,7 @@ pthread_barrier_wait:
|
|||||||
|
|
||||||
/* Release the mutex. */
|
/* Release the mutex. */
|
||||||
LOCK
|
LOCK
|
||||||
incl MUTEX(%ebx)
|
addl $1, MUTEX(%ebx)
|
||||||
jng 6f
|
jng 6f
|
||||||
|
|
||||||
/* Wait for the remaining threads. The call will return immediately
|
/* Wait for the remaining threads. The call will return immediately
|
||||||
@@ -98,9 +98,9 @@ pthread_barrier_wait:
|
|||||||
3: movl INIT_COUNT(%ebx), %eax
|
3: movl INIT_COUNT(%ebx), %eax
|
||||||
movl %eax, LEFT(%ebx)
|
movl %eax, LEFT(%ebx)
|
||||||
#if CURR_EVENT == 0
|
#if CURR_EVENT == 0
|
||||||
incl (%ebx)
|
addl $1, (%ebx)
|
||||||
#else
|
#else
|
||||||
incl CURR_EVENT(%ebx)
|
addl $1, CURR_EVENT(%ebx)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Wake up all waiters. The count is a signed number in the kernel
|
/* Wake up all waiters. The count is a signed number in the kernel
|
||||||
@@ -114,7 +114,7 @@ pthread_barrier_wait:
|
|||||||
waking the waiting threads since otherwise a new thread might
|
waking the waiting threads since otherwise a new thread might
|
||||||
arrive and gets waken up, too. */
|
arrive and gets waken up, too. */
|
||||||
LOCK
|
LOCK
|
||||||
incl MUTEX(%ebx)
|
addl $1, MUTEX(%ebx)
|
||||||
jng 4f
|
jng 4f
|
||||||
|
|
||||||
5: orl $-1, %eax /* == PTHREAD_BARRIER_SERIAL_THREAD */
|
5: orl $-1, %eax /* == PTHREAD_BARRIER_SERIAL_THREAD */
|
||||||
|
@@ -71,7 +71,7 @@ __pthread_cond_broadcast:
|
|||||||
|
|
||||||
/* Unlock. */
|
/* Unlock. */
|
||||||
LOCK
|
LOCK
|
||||||
decl cond_lock-wakeup_seq(%ebx)
|
subl $1, cond_lock-wakeup_seq(%ebx)
|
||||||
jne 7f
|
jne 7f
|
||||||
|
|
||||||
/* Wake up all threads. */
|
/* Wake up all threads. */
|
||||||
@@ -87,7 +87,7 @@ __pthread_cond_broadcast:
|
|||||||
.align 16
|
.align 16
|
||||||
/* Unlock. */
|
/* Unlock. */
|
||||||
4: LOCK
|
4: LOCK
|
||||||
decl cond_lock-wakeup_seq(%ebx)
|
subl $1, cond_lock-wakeup_seq(%ebx)
|
||||||
jne 5f
|
jne 5f
|
||||||
|
|
||||||
6: xorl %eax, %eax
|
6: xorl %eax, %eax
|
||||||
|
@@ -76,7 +76,7 @@ __pthread_cond_signal:
|
|||||||
|
|
||||||
/* Unlock. */
|
/* Unlock. */
|
||||||
4: LOCK
|
4: LOCK
|
||||||
decl cond_lock-wakeup_seq(%ebx)
|
subl $1, cond_lock-wakeup_seq(%ebx)
|
||||||
jne 5f
|
jne 5f
|
||||||
|
|
||||||
6: xorl %eax, %eax
|
6: xorl %eax, %eax
|
||||||
|
@@ -102,9 +102,9 @@ __pthread_cond_timedwait:
|
|||||||
/* Unlock. */
|
/* Unlock. */
|
||||||
8: LOCK
|
8: LOCK
|
||||||
#if cond_lock == 0
|
#if cond_lock == 0
|
||||||
decl (%ebx)
|
subl $1, (%ebx)
|
||||||
#else
|
#else
|
||||||
decl cond_lock(%ebx)
|
subl $1, cond_lock(%ebx)
|
||||||
#endif
|
#endif
|
||||||
jne 3f
|
jne 3f
|
||||||
|
|
||||||
@@ -129,7 +129,7 @@ __pthread_cond_timedwait:
|
|||||||
subl %eax, %edx
|
subl %eax, %edx
|
||||||
jns 12f
|
jns 12f
|
||||||
addl $1000000000, %edx
|
addl $1000000000, %edx
|
||||||
decl %ecx
|
subl $1, %ecx
|
||||||
12: testl %ecx, %ecx
|
12: testl %ecx, %ecx
|
||||||
js 13f
|
js 13f
|
||||||
|
|
||||||
@@ -190,9 +190,9 @@ __pthread_cond_timedwait:
|
|||||||
|
|
||||||
LOCK
|
LOCK
|
||||||
#if cond_lock == 0
|
#if cond_lock == 0
|
||||||
decl (%ebx)
|
subl $1, (%ebx)
|
||||||
#else
|
#else
|
||||||
decl cond_lock(%ebx)
|
subl $1, cond_lock(%ebx)
|
||||||
#endif
|
#endif
|
||||||
jne 10f
|
jne 10f
|
||||||
|
|
||||||
@@ -259,9 +259,9 @@ __pthread_cond_timedwait:
|
|||||||
16: movl %eax, (%esp)
|
16: movl %eax, (%esp)
|
||||||
LOCK
|
LOCK
|
||||||
#if cond_lock == 0
|
#if cond_lock == 0
|
||||||
decl (%ebx)
|
subl $1, (%ebx)
|
||||||
#else
|
#else
|
||||||
decl cond_lock(%ebx)
|
subl $1, cond_lock(%ebx)
|
||||||
#endif
|
#endif
|
||||||
jne 17f
|
jne 17f
|
||||||
|
|
||||||
|
@@ -71,9 +71,9 @@ __condvar_cleanup:
|
|||||||
|
|
||||||
LOCK
|
LOCK
|
||||||
#if cond_lock == 0
|
#if cond_lock == 0
|
||||||
decl (%ebx)
|
subl $1, (%ebx)
|
||||||
#else
|
#else
|
||||||
decl cond_lock(%ebx)
|
subl $1, cond_lock(%ebx)
|
||||||
#endif
|
#endif
|
||||||
je 2f
|
je 2f
|
||||||
#if cond_lock == 0
|
#if cond_lock == 0
|
||||||
@@ -159,9 +159,9 @@ __pthread_cond_wait:
|
|||||||
/* Unlock. */
|
/* Unlock. */
|
||||||
8: LOCK
|
8: LOCK
|
||||||
#if cond_lock == 0
|
#if cond_lock == 0
|
||||||
decl (%ebx)
|
subl $1, (%ebx)
|
||||||
#else
|
#else
|
||||||
decl cond_lock(%ebx)
|
subl $1, cond_lock(%ebx)
|
||||||
#endif
|
#endif
|
||||||
jne 3f
|
jne 3f
|
||||||
|
|
||||||
@@ -211,9 +211,9 @@ __pthread_cond_wait:
|
|||||||
|
|
||||||
LOCK
|
LOCK
|
||||||
#if cond_lock == 0
|
#if cond_lock == 0
|
||||||
decl (%ebx)
|
subl $1, (%ebx)
|
||||||
#else
|
#else
|
||||||
decl cond_lock(%ebx)
|
subl $1, cond_lock(%ebx)
|
||||||
#endif
|
#endif
|
||||||
jne 10f
|
jne 10f
|
||||||
|
|
||||||
@@ -277,9 +277,9 @@ __pthread_cond_wait:
|
|||||||
12: movl %eax, (%esp)
|
12: movl %eax, (%esp)
|
||||||
LOCK
|
LOCK
|
||||||
#if cond_lock == 0
|
#if cond_lock == 0
|
||||||
decl (%ebx)
|
subl $1, (%ebx)
|
||||||
#else
|
#else
|
||||||
decl cond_lock(%ebx)
|
subl $1, cond_lock(%ebx)
|
||||||
#endif
|
#endif
|
||||||
jne 13f
|
jne 13f
|
||||||
|
|
||||||
|
@@ -66,16 +66,16 @@ __pthread_rwlock_rdlock:
|
|||||||
cmpl $0, FLAGS(%ebx)
|
cmpl $0, FLAGS(%ebx)
|
||||||
je 5f
|
je 5f
|
||||||
|
|
||||||
3: incl READERS_QUEUED(%ebx)
|
3: addl $1, READERS_QUEUED(%ebx)
|
||||||
je 4f
|
je 4f
|
||||||
|
|
||||||
movl READERS_WAKEUP(%ebx), %edx
|
movl READERS_WAKEUP(%ebx), %edx
|
||||||
|
|
||||||
LOCK
|
LOCK
|
||||||
#if MUTEX == 0
|
#if MUTEX == 0
|
||||||
decl (%ebx)
|
subl $1, (%ebx)
|
||||||
#else
|
#else
|
||||||
decl MUTEX(%ebx)
|
subl $1, MUTEX(%ebx)
|
||||||
#endif
|
#endif
|
||||||
jne 10f
|
jne 10f
|
||||||
|
|
||||||
@@ -97,17 +97,17 @@ __pthread_rwlock_rdlock:
|
|||||||
testl %eax, %eax
|
testl %eax, %eax
|
||||||
jne 12f
|
jne 12f
|
||||||
|
|
||||||
13: decl READERS_QUEUED(%ebx)
|
13: subl $1, READERS_QUEUED(%ebx)
|
||||||
jmp 2b
|
jmp 2b
|
||||||
|
|
||||||
5: xorl %ecx, %ecx
|
5: xorl %ecx, %ecx
|
||||||
incl NR_READERS(%ebx)
|
addl $1, NR_READERS(%ebx)
|
||||||
je 8f
|
je 8f
|
||||||
9: LOCK
|
9: LOCK
|
||||||
#if MUTEX == 0
|
#if MUTEX == 0
|
||||||
decl (%ebx)
|
subl $1, (%ebx)
|
||||||
#else
|
#else
|
||||||
decl MUTEX(%ebx)
|
subl $1, MUTEX(%ebx)
|
||||||
#endif
|
#endif
|
||||||
jne 6f
|
jne 6f
|
||||||
7:
|
7:
|
||||||
@@ -142,12 +142,12 @@ __pthread_rwlock_rdlock:
|
|||||||
jmp 7b
|
jmp 7b
|
||||||
|
|
||||||
/* Overflow. */
|
/* Overflow. */
|
||||||
8: decl NR_READERS(%ebx)
|
8: subl $1, NR_READERS(%ebx)
|
||||||
movl $EAGAIN, %ecx
|
movl $EAGAIN, %ecx
|
||||||
jmp 9b
|
jmp 9b
|
||||||
|
|
||||||
/* Overflow. */
|
/* Overflow. */
|
||||||
4: decl READERS_QUEUED(%ebx)
|
4: subl $1, READERS_QUEUED(%ebx)
|
||||||
movl $EAGAIN, %ecx
|
movl $EAGAIN, %ecx
|
||||||
jmp 9b
|
jmp 9b
|
||||||
|
|
||||||
|
@@ -76,16 +76,16 @@ pthread_rwlock_timedrdlock:
|
|||||||
3: cmpl $1000000000, 4(%edi)
|
3: cmpl $1000000000, 4(%edi)
|
||||||
jae 19f
|
jae 19f
|
||||||
|
|
||||||
incl READERS_QUEUED(%ebp)
|
addl $1, READERS_QUEUED(%ebp)
|
||||||
je 4f
|
je 4f
|
||||||
|
|
||||||
movl READERS_WAKEUP(%ebp), %esi
|
movl READERS_WAKEUP(%ebp), %esi
|
||||||
|
|
||||||
LOCK
|
LOCK
|
||||||
#if MUTEX == 0
|
#if MUTEX == 0
|
||||||
decl (%ebp)
|
subl $1, (%ebp)
|
||||||
#else
|
#else
|
||||||
decl MUTEX(%ebp)
|
subl $1, MUTEX(%ebp)
|
||||||
#endif
|
#endif
|
||||||
jne 10f
|
jne 10f
|
||||||
|
|
||||||
@@ -105,7 +105,7 @@ pthread_rwlock_timedrdlock:
|
|||||||
subl %eax, %edx
|
subl %eax, %edx
|
||||||
jns 15f
|
jns 15f
|
||||||
addl $1000000000, %edx
|
addl $1000000000, %edx
|
||||||
decl %ecx
|
subl $1, %ecx
|
||||||
15: testl %ecx, %ecx
|
15: testl %ecx, %ecx
|
||||||
js 16f /* Time is already up. */
|
js 16f /* Time is already up. */
|
||||||
|
|
||||||
@@ -132,7 +132,7 @@ pthread_rwlock_timedrdlock:
|
|||||||
testl %eax, %eax
|
testl %eax, %eax
|
||||||
jne 12f
|
jne 12f
|
||||||
|
|
||||||
13: decl READERS_QUEUED(%ebp)
|
13: subl $1, READERS_QUEUED(%ebp)
|
||||||
cmpl $-ETIMEDOUT, %edx
|
cmpl $-ETIMEDOUT, %edx
|
||||||
jne 2b
|
jne 2b
|
||||||
|
|
||||||
@@ -141,13 +141,13 @@ pthread_rwlock_timedrdlock:
|
|||||||
|
|
||||||
|
|
||||||
5: xorl %ecx, %ecx
|
5: xorl %ecx, %ecx
|
||||||
incl NR_READERS(%ebp)
|
addl $1, NR_READERS(%ebp)
|
||||||
je 8f
|
je 8f
|
||||||
9: LOCK
|
9: LOCK
|
||||||
#if MUTEX == 0
|
#if MUTEX == 0
|
||||||
decl (%ebp)
|
subl $1, (%ebp)
|
||||||
#else
|
#else
|
||||||
decl MUTEX(%ebp)
|
subl $1, MUTEX(%ebp)
|
||||||
#endif
|
#endif
|
||||||
jne 6f
|
jne 6f
|
||||||
|
|
||||||
@@ -184,12 +184,12 @@ pthread_rwlock_timedrdlock:
|
|||||||
jmp 7b
|
jmp 7b
|
||||||
|
|
||||||
/* Overflow. */
|
/* Overflow. */
|
||||||
8: decl NR_READERS(%ebp)
|
8: subl $1, NR_READERS(%ebp)
|
||||||
movl $EAGAIN, %ecx
|
movl $EAGAIN, %ecx
|
||||||
jmp 9b
|
jmp 9b
|
||||||
|
|
||||||
/* Overflow. */
|
/* Overflow. */
|
||||||
4: decl READERS_QUEUED(%ebp)
|
4: subl $1, READERS_QUEUED(%ebp)
|
||||||
movl $EAGAIN, %ecx
|
movl $EAGAIN, %ecx
|
||||||
jmp 9b
|
jmp 9b
|
||||||
|
|
||||||
|
@@ -74,16 +74,16 @@ pthread_rwlock_timedwrlock:
|
|||||||
3: cmpl $1000000000, 4(%edi)
|
3: cmpl $1000000000, 4(%edi)
|
||||||
jae 19f
|
jae 19f
|
||||||
|
|
||||||
incl WRITERS_QUEUED(%ebp)
|
addl $1, WRITERS_QUEUED(%ebp)
|
||||||
je 4f
|
je 4f
|
||||||
|
|
||||||
movl WRITERS_WAKEUP(%ebp), %esi
|
movl WRITERS_WAKEUP(%ebp), %esi
|
||||||
|
|
||||||
LOCK
|
LOCK
|
||||||
#if MUTEX == 0
|
#if MUTEX == 0
|
||||||
decl (%ebp)
|
subl $1, (%ebp)
|
||||||
#else
|
#else
|
||||||
decl MUTEX(%ebp)
|
subl $1, MUTEX(%ebp)
|
||||||
#endif
|
#endif
|
||||||
jne 10f
|
jne 10f
|
||||||
|
|
||||||
@@ -103,7 +103,7 @@ pthread_rwlock_timedwrlock:
|
|||||||
subl %eax, %edx
|
subl %eax, %edx
|
||||||
jns 15f
|
jns 15f
|
||||||
addl $1000000000, %edx
|
addl $1000000000, %edx
|
||||||
decl %ecx
|
subl $1, %ecx
|
||||||
15: testl %ecx, %ecx
|
15: testl %ecx, %ecx
|
||||||
js 16f /* Time is already up. */
|
js 16f /* Time is already up. */
|
||||||
|
|
||||||
@@ -130,7 +130,7 @@ pthread_rwlock_timedwrlock:
|
|||||||
testl %eax, %eax
|
testl %eax, %eax
|
||||||
jne 12f
|
jne 12f
|
||||||
|
|
||||||
13: decl WRITERS_QUEUED(%ebp)
|
13: subl $1, WRITERS_QUEUED(%ebp)
|
||||||
cmpl $-ETIMEDOUT, %edx
|
cmpl $-ETIMEDOUT, %edx
|
||||||
jne 2b
|
jne 2b
|
||||||
|
|
||||||
@@ -143,9 +143,9 @@ pthread_rwlock_timedwrlock:
|
|||||||
movl %eax, WRITER(%ebp)
|
movl %eax, WRITER(%ebp)
|
||||||
9: LOCK
|
9: LOCK
|
||||||
#if MUTEX == 0
|
#if MUTEX == 0
|
||||||
decl (%ebp)
|
subl $1, (%ebp)
|
||||||
#else
|
#else
|
||||||
decl MUTEX(%ebp)
|
subl $1, MUTEX(%ebp)
|
||||||
#endif
|
#endif
|
||||||
jne 6f
|
jne 6f
|
||||||
|
|
||||||
@@ -182,7 +182,7 @@ pthread_rwlock_timedwrlock:
|
|||||||
jmp 7b
|
jmp 7b
|
||||||
|
|
||||||
/* Overflow. */
|
/* Overflow. */
|
||||||
4: decl WRITERS_QUEUED(%ebp)
|
4: subl $1, WRITERS_QUEUED(%ebp)
|
||||||
movl $EAGAIN, %ecx
|
movl $EAGAIN, %ecx
|
||||||
jmp 9b
|
jmp 9b
|
||||||
|
|
||||||
|
@@ -56,7 +56,7 @@ __pthread_rwlock_unlock:
|
|||||||
|
|
||||||
2: cmpl $0, WRITER(%edi)
|
2: cmpl $0, WRITER(%edi)
|
||||||
jne 5f
|
jne 5f
|
||||||
decl NR_READERS(%edi)
|
subl $1, NR_READERS(%edi)
|
||||||
jnz 6f
|
jnz 6f
|
||||||
|
|
||||||
5: movl $0, WRITER(%edi)
|
5: movl $0, WRITER(%edi)
|
||||||
@@ -74,12 +74,12 @@ __pthread_rwlock_unlock:
|
|||||||
movl $0x7fffffff, %edx
|
movl $0x7fffffff, %edx
|
||||||
leal READERS_WAKEUP(%edi), %ebx
|
leal READERS_WAKEUP(%edi), %ebx
|
||||||
|
|
||||||
0: incl (%ebx)
|
0: addl $1, (%ebx)
|
||||||
LOCK
|
LOCK
|
||||||
#if MUTEX == 0
|
#if MUTEX == 0
|
||||||
decl (%edi)
|
subl $1, (%edi)
|
||||||
#else
|
#else
|
||||||
decl MUTEX(%edi)
|
subl $1, MUTEX(%edi)
|
||||||
#endif
|
#endif
|
||||||
jne 7f
|
jne 7f
|
||||||
|
|
||||||
@@ -94,9 +94,9 @@ __pthread_rwlock_unlock:
|
|||||||
.align 16
|
.align 16
|
||||||
6: LOCK
|
6: LOCK
|
||||||
#if MUTEX == 0
|
#if MUTEX == 0
|
||||||
decl (%edi)
|
subl $1, (%edi)
|
||||||
#else
|
#else
|
||||||
decl MUTEX(%edi)
|
subl $1, MUTEX(%edi)
|
||||||
#endif
|
#endif
|
||||||
jne 3f
|
jne 3f
|
||||||
|
|
||||||
|
@@ -64,16 +64,16 @@ __pthread_rwlock_wrlock:
|
|||||||
cmp $0, NR_READERS(%ebx)
|
cmp $0, NR_READERS(%ebx)
|
||||||
je 5f
|
je 5f
|
||||||
|
|
||||||
3: incl WRITERS_QUEUED(%ebx)
|
3: addl $1, WRITERS_QUEUED(%ebx)
|
||||||
je 4f
|
je 4f
|
||||||
|
|
||||||
movl WRITERS_WAKEUP(%ebx), %edx
|
movl WRITERS_WAKEUP(%ebx), %edx
|
||||||
|
|
||||||
LOCK
|
LOCK
|
||||||
#if MUTEX == 0
|
#if MUTEX == 0
|
||||||
decl (%ebx)
|
subl $1, (%ebx)
|
||||||
#else
|
#else
|
||||||
decl MUTEX(%ebx)
|
subl $1, MUTEX(%ebx)
|
||||||
#endif
|
#endif
|
||||||
jne 10f
|
jne 10f
|
||||||
|
|
||||||
@@ -95,7 +95,7 @@ __pthread_rwlock_wrlock:
|
|||||||
testl %eax, %eax
|
testl %eax, %eax
|
||||||
jne 12f
|
jne 12f
|
||||||
|
|
||||||
13: decl WRITERS_QUEUED(%ebx)
|
13: subl $1, WRITERS_QUEUED(%ebx)
|
||||||
jmp 2b
|
jmp 2b
|
||||||
|
|
||||||
5: xorl %ecx, %ecx
|
5: xorl %ecx, %ecx
|
||||||
@@ -103,9 +103,9 @@ __pthread_rwlock_wrlock:
|
|||||||
movl %eax, WRITER(%ebx)
|
movl %eax, WRITER(%ebx)
|
||||||
9: LOCK
|
9: LOCK
|
||||||
#if MUTEX == 0
|
#if MUTEX == 0
|
||||||
decl (%ebx)
|
subl $1, (%ebx)
|
||||||
#else
|
#else
|
||||||
decl MUTEX(%ebx)
|
subl $1, MUTEX(%ebx)
|
||||||
#endif
|
#endif
|
||||||
jne 6f
|
jne 6f
|
||||||
7:
|
7:
|
||||||
@@ -138,7 +138,7 @@ __pthread_rwlock_wrlock:
|
|||||||
call __lll_mutex_unlock_wake
|
call __lll_mutex_unlock_wake
|
||||||
jmp 7b
|
jmp 7b
|
||||||
|
|
||||||
4: decl WRITERS_QUEUED(%ebx)
|
4: subl $1, WRITERS_QUEUED(%ebx)
|
||||||
movl $EAGAIN, %ecx
|
movl $EAGAIN, %ecx
|
||||||
jmp 9b
|
jmp 9b
|
||||||
|
|
||||||
|
@@ -48,7 +48,7 @@ __new_sem_post:
|
|||||||
|
|
||||||
movl $SYS_futex, %eax
|
movl $SYS_futex, %eax
|
||||||
movl $FUTEX_WAKE, %ecx
|
movl $FUTEX_WAKE, %ecx
|
||||||
incl %edx
|
addl $1, %edx
|
||||||
ENTER_KERNEL
|
ENTER_KERNEL
|
||||||
|
|
||||||
testl %eax, %eax
|
testl %eax, %eax
|
||||||
|
@@ -85,7 +85,7 @@ sem_timedwait:
|
|||||||
subl %eax, %edx
|
subl %eax, %edx
|
||||||
jns 5f
|
jns 5f
|
||||||
addl $1000000000, %edx
|
addl $1000000000, %edx
|
||||||
decl %ecx
|
subl $1, %ecx
|
||||||
5: testl %ecx, %ecx
|
5: testl %ecx, %ecx
|
||||||
movl $ETIMEDOUT, %eax
|
movl $ETIMEDOUT, %eax
|
||||||
js 6f /* Time is already up. */
|
js 6f /* Time is already up. */
|
||||||
|
@@ -99,7 +99,7 @@ extern int __lll_mutex_unlock_wait (int *__futex)
|
|||||||
|
|
||||||
#define lll_mutex_unlock(futex) \
|
#define lll_mutex_unlock(futex) \
|
||||||
(void) ({ int ignore; \
|
(void) ({ int ignore; \
|
||||||
__asm __volatile (LOCK_INSTR "decl %0\n\t" \
|
__asm __volatile (LOCK_INSTR "subl $1,%0\n\t" \
|
||||||
"jne 1f\n\t" \
|
"jne 1f\n\t" \
|
||||||
".subsection 1\n" \
|
".subsection 1\n" \
|
||||||
"1:\tleal %0, %%eax\n\t" \
|
"1:\tleal %0, %%eax\n\t" \
|
||||||
@@ -167,7 +167,7 @@ extern int lll_unlock_wake_cb (int *__futex) attribute_hidden;
|
|||||||
|
|
||||||
# define lll_unlock(futex) \
|
# define lll_unlock(futex) \
|
||||||
(void) ({ int ignore; \
|
(void) ({ int ignore; \
|
||||||
__asm __volatile (LOCK_INSTR "incl %0\n\t" \
|
__asm __volatile (LOCK_INSTR "addl $1,%0\n\t" \
|
||||||
"jng 1f\n\t" \
|
"jng 1f\n\t" \
|
||||||
".subsection 1\n" \
|
".subsection 1\n" \
|
||||||
"1:\tleal %0, %%eax\n\t" \
|
"1:\tleal %0, %%eax\n\t" \
|
||||||
@@ -225,7 +225,7 @@ extern int __libc_locking_needed attribute_hidden;
|
|||||||
__asm __volatile ("cmpl $0, %%gs:%P3\n\t" \
|
__asm __volatile ("cmpl $0, %%gs:%P3\n\t" \
|
||||||
"je,pt 0f\n\t" \
|
"je,pt 0f\n\t" \
|
||||||
"lock\n" \
|
"lock\n" \
|
||||||
"0:\tincl %0\n\t" \
|
"0:\taddl $1,%0\n\t" \
|
||||||
"jng 1f\n\t" \
|
"jng 1f\n\t" \
|
||||||
".subsection 1\n" \
|
".subsection 1\n" \
|
||||||
"1:\tleal %0, %%eax\n\t" \
|
"1:\tleal %0, %%eax\n\t" \
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2002 Free Software Foundation, Inc.
|
/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||||
|
|
||||||
@@ -46,8 +46,8 @@
|
|||||||
|
|
||||||
#define lll_sem_wait(sem) \
|
#define lll_sem_wait(sem) \
|
||||||
({ int result, ignore1, ignore2; \
|
({ int result, ignore1, ignore2; \
|
||||||
__asm __volatile ("1:\tincl 8(%4)\n\t" \
|
__asm __volatile ("1:\taddl $1,8(%4)\n\t" \
|
||||||
LOCK "incl (%4)\n\t" \
|
LOCK "addl $1,(%4)\n\t" \
|
||||||
"jng 2f\n" \
|
"jng 2f\n" \
|
||||||
".subsection 1\n" \
|
".subsection 1\n" \
|
||||||
"2:\tmovl %4, %%eax\n\t" \
|
"2:\tmovl %4, %%eax\n\t" \
|
||||||
@@ -70,7 +70,7 @@
|
|||||||
"call __lll_lock_wait\n\t" \
|
"call __lll_lock_wait\n\t" \
|
||||||
"jmp 5f\n\t" \
|
"jmp 5f\n\t" \
|
||||||
".previous\n" \
|
".previous\n" \
|
||||||
"5:\tdecl 8(%4)\n\t" \
|
"5:\tsubl $1,8(%4)\n\t" \
|
||||||
"xorl %0, %0\n\t" \
|
"xorl %0, %0\n\t" \
|
||||||
"cmpl $0, 4(%4)\n\t" \
|
"cmpl $0, 4(%4)\n\t" \
|
||||||
"jne,pt 6f\n\t" \
|
"jne,pt 6f\n\t" \
|
||||||
|
@@ -119,7 +119,7 @@ __pthread_once:
|
|||||||
|
|
||||||
/* Sucessful run of the initializer. Signal that we are done. */
|
/* Sucessful run of the initializer. Signal that we are done. */
|
||||||
LOCK
|
LOCK
|
||||||
incl (%ebx)
|
addl $1, (%ebx)
|
||||||
|
|
||||||
/* Wake up all other threads. */
|
/* Wake up all other threads. */
|
||||||
movl $0x7fffffff, %edx
|
movl $0x7fffffff, %edx
|
||||||
|
@@ -17,6 +17,7 @@
|
|||||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
02111-1307 USA. */
|
02111-1307 USA. */
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <semaphore.h>
|
#include <semaphore.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
@@ -112,7 +113,7 @@ do_test (void)
|
|||||||
exit (1);
|
exit (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sem_wait (&sem) != 0)
|
if (TEMP_FAILURE_RETRY (sem_wait (&sem)) != 0)
|
||||||
{
|
{
|
||||||
puts ("sem_wait failed");
|
puts ("sem_wait failed");
|
||||||
exit (1);
|
exit (1);
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2002 Free Software Foundation, Inc.
|
/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||||
|
|
||||||
@@ -38,7 +38,7 @@ do_test (void)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sem_wait (&s) == -1)
|
if (TEMP_FAILURE_RETRY (sem_wait (&s)) == -1)
|
||||||
{
|
{
|
||||||
puts ("sem_wait failed");
|
puts ("sem_wait failed");
|
||||||
return 1;
|
return 1;
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2002 Free Software Foundation, Inc.
|
/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||||
|
|
||||||
@@ -17,6 +17,7 @@
|
|||||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
02111-1307 USA. */
|
02111-1307 USA. */
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <semaphore.h>
|
#include <semaphore.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
@@ -156,7 +157,7 @@ do_test (void)
|
|||||||
|
|
||||||
for (i = 0; i < ROUNDS; ++i)
|
for (i = 0; i < ROUNDS; ++i)
|
||||||
{
|
{
|
||||||
if (sem_wait (&sem) != 0)
|
if (TEMP_FAILURE_RETRY (sem_wait (&sem)) != 0)
|
||||||
{
|
{
|
||||||
printf ("sem_wait round %d failed: %m\n", i);
|
printf ("sem_wait round %d failed: %m\n", i);
|
||||||
exit (1);
|
exit (1);
|
||||||
|
@@ -17,6 +17,7 @@
|
|||||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
02111-1307 USA. */
|
02111-1307 USA. */
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <semaphore.h>
|
#include <semaphore.h>
|
||||||
@@ -159,7 +160,7 @@ do_test (void)
|
|||||||
exit (1);
|
exit (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sem_wait (&s) != 0)
|
if (TEMP_FAILURE_RETRY (sem_wait (&s)) != 0)
|
||||||
{
|
{
|
||||||
puts ("sem_wait failed");
|
puts ("sem_wait failed");
|
||||||
exit (1);
|
exit (1);
|
||||||
|
@@ -18,6 +18,7 @@
|
|||||||
02111-1307 USA. */
|
02111-1307 USA. */
|
||||||
|
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
|
#include <errno.h>
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <semaphore.h>
|
#include <semaphore.h>
|
||||||
@@ -145,7 +146,7 @@ do_test (void)
|
|||||||
exit (1);
|
exit (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sem_wait (&s) != 0)
|
if (TEMP_FAILURE_RETRY (sem_wait (&s)) != 0)
|
||||||
{
|
{
|
||||||
puts ("sem_wait failed");
|
puts ("sem_wait failed");
|
||||||
exit (1);
|
exit (1);
|
||||||
|
Reference in New Issue
Block a user