aboutsummaryrefslogtreecommitdiff
path: root/nptl/sysdeps
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-03-11 23:26:35 +0000
committerUlrich Drepper <drepper@redhat.com>2003-03-11 23:26:35 +0000
commit32a589b1ea1365c8651b0692d0350403fde7b6ff (patch)
tree77b94275bcf321370496c19d29267e8c66a8606d /nptl/sysdeps
parent3e976b962a84255b70bcf6d9751a9a35d3e987ab (diff)
downloadglibc-32a589b1ea1365c8651b0692d0350403fde7b6ff.zip
glibc-32a589b1ea1365c8651b0692d0350403fde7b6ff.tar.gz
glibc-32a589b1ea1365c8651b0692d0350403fde7b6ff.tar.bz2
Update.
* cancellation.c (__pthread_enable_asynccancel_2): New function. * pthreadP.h: Declare __pthread_enable_asynccancel_2. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S (__pthread_cond_timedwait): Use __pthread_enable_asynccancel_2 instead of __pthread_enable_asynccancel. * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S (__pthread_cond_wait): Likewise. * sysdeps/pthread/pthread_cond_timedwait.c (__pthread_cond_timedwait): Likewise. * sysdeps/pthread/pthread_cond_wait.c (__pthread_cond_wait): Likewise.
Diffstat (limited to 'nptl/sysdeps')
-rw-r--r--nptl/sysdeps/pthread/pthread_cond_timedwait.c2
-rw-r--r--nptl/sysdeps/pthread/pthread_cond_wait.c4
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S5
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S5
-rw-r--r--nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S2
-rw-r--r--nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelmutex.S2
-rw-r--r--nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S5
7 files changed, 14 insertions, 11 deletions
diff --git a/nptl/sysdeps/pthread/pthread_cond_timedwait.c b/nptl/sysdeps/pthread/pthread_cond_timedwait.c
index 417f873..0635e6e 100644
--- a/nptl/sysdeps/pthread/pthread_cond_timedwait.c
+++ b/nptl/sysdeps/pthread/pthread_cond_timedwait.c
@@ -120,7 +120,7 @@ __pthread_cond_timedwait (cond, mutex, abstime)
lll_mutex_unlock (cond->__data.__lock);
/* Enable asynchronous cancellation. Required by the standard. */
- cbuffer.oldtype = __pthread_enable_asynccancel ();
+ __pthread_enable_asynccancel_2 (&cbuffer.oldtype);
/* Wait until woken by signal or broadcast. Note that we
truncate the 'val' value to 32 bits. */
diff --git a/nptl/sysdeps/pthread/pthread_cond_wait.c b/nptl/sysdeps/pthread/pthread_cond_wait.c
index 78fcc7f..b681ef2 100644
--- a/nptl/sysdeps/pthread/pthread_cond_wait.c
+++ b/nptl/sysdeps/pthread/pthread_cond_wait.c
@@ -123,7 +123,7 @@ __pthread_cond_wait (cond, mutex)
lll_mutex_unlock (cond->__data.__lock);
/* Enable asynchronous cancellation. Required by the standard. */
- cbuffer.oldtype = __pthread_enable_asynccancel ();
+ __pthread_enable_asynccancel_2 (&cbuffer.oldtype);
/* Wait until woken by signal or broadcast. Note that we
truncate the 'val' value to 32 bits. */
@@ -133,7 +133,7 @@ __pthread_cond_wait (cond, mutex)
__pthread_disable_asynccancel (cbuffer.oldtype);
/* We are going to look at shared data again, so get the lock. */
- lll_mutex_lock(cond->__data.__lock);
+ lll_mutex_lock (cond->__data.__lock);
/* Check whether we are eligible for wakeup. */
val = cond->__data.__wakeup_seq;
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S
index 122be6f..f11a44e 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S
@@ -108,8 +108,8 @@ __pthread_cond_timedwait:
#endif
jne 3f
-4: call __pthread_enable_asynccancel
- movl %eax, (%esp)
+4: movl %esp, %eax
+ call __pthread_enable_asynccancel_2
/* Get the current time. */
movl %ebx, %edx
@@ -145,6 +145,7 @@ __pthread_cond_timedwait:
subl $wakeup_seq, %ebx
movl %eax, %esi
+ movl (%esp), %eax
call __pthread_disable_asynccancel
/* Lock. */
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S
index b3a49e7..c13c382 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S
@@ -165,8 +165,8 @@ __pthread_cond_wait:
#endif
jne 3f
-4: call __pthread_enable_asynccancel
- movl %eax, (%esp)
+4: movl %esp, %eax
+ call __pthread_enable_asynccancel_2
movl %esi, %ecx /* movl $FUTEX_WAIT, %ecx */
movl %edi, %edx
@@ -175,6 +175,7 @@ __pthread_cond_wait:
ENTER_KERNEL
subl $wakeup_seq, %ebx
+ movl (%esp), %eax
call __pthread_disable_asynccancel
/* Lock. */
diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S
index e7e1707..1585921 100644
--- a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S
+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S
@@ -49,7 +49,7 @@ __lll_lock_wait:
xorq %r10, %r10 /* No timeout. */
1:
- leal -1(%esi), %edx /* account for the preceeded xadd. */
+ leaq -1(%rsi), %rdx /* account for the preceeded xadd. */
movq %r10, %rsi /* movl $FUTEX_WAIT, %ecx */
movq $SYS_futex, %rax
syscall
diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelmutex.S b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelmutex.S
index a494e0e..55e4ec4 100644
--- a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelmutex.S
+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelmutex.S
@@ -50,7 +50,7 @@ __lll_mutex_lock_wait:
xorq %r10, %r10 /* No timeout. */
1:
- leal 1(%esi), %edx /* account for the preceeded xadd. */
+ leaq 1(%rsi), %rdx /* account for the preceeded xadd. */
movq %r10, %rsi /* movl $FUTEX_WAIT, %ecx */
movq $SYS_futex, %rax
syscall
diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
index c15566f..193cc08 100644
--- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
@@ -153,9 +153,10 @@ __pthread_cond_wait:
#endif
jne 3f
-4: callq __pthread_enable_asynccancel
- movq %rax, (%rsp)
+4: movq %rsp, %edi
+ callq __pthread_enable_asynccancel_2
+ movq 8(%rsp), %rdi
xorq %r10, %r10
movq %r12, %rdx
addq $wakeup_seq-cond_lock, %rdi