diff options
author | Michal Schmidt <mschmidt@redhat.com> | 2010-01-15 18:09:14 -0800 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2010-01-15 18:09:14 -0800 |
commit | 893549c5a06956d2559391a3ffdeb6ded53b65c0 (patch) | |
tree | 9bdfb0297e3af6352618b78fbeeda14f4b6e63f0 /nptl | |
parent | aa732e2b2b3178ed436b6df39180605437897f53 (diff) | |
download | glibc-893549c5a06956d2559391a3ffdeb6ded53b65c0.tar.gz |
Fix pthread_cond_*wait with requeue-PI on i386.
Diffstat (limited to 'nptl')
-rw-r--r-- | nptl/ChangeLog | 13 | ||||
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S | 12 | ||||
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S | 10 |
3 files changed, 24 insertions, 11 deletions
diff --git a/nptl/ChangeLog b/nptl/ChangeLog index e4185e020f..c81eb03b75 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,3 +1,16 @@ +2010-01-15 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S: + Fix unwind info. + * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: Likewise. + +2010-01-15 Michal Schmidt <mschmidt@redhat.com> + + * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S: + Fix pthread_cond_timedwait with requeue-PI. + * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: + Fix pthread_cond_wait with requeue-PI. + 2010-01-14 Ulrich Drepper <drepper@redhat.com> * Versions: Add pthread_mutex_consistent, pthread_mutexattr_getrobust, 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 218762a8ad..dee73f0c32 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 @@ -1,4 +1,4 @@ -/* Copyright (C) 2002-2004, 2006-2007, 2009 Free Software Foundation, Inc. +/* Copyright (C) 2002-2004,2006-2007,2009,2010 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -57,7 +57,6 @@ __pthread_cond_timedwait: pushl %ebx cfi_adjust_cfa_offset(4) cfi_rel_offset(%ebx, 0) - cfi_remember_state movl 20(%esp), %ebx movl 28(%esp), %ebp @@ -99,6 +98,7 @@ __pthread_cond_timedwait: #define FRAME_SIZE 32 subl $FRAME_SIZE, %esp cfi_adjust_cfa_offset(FRAME_SIZE) + cfi_remember_state /* Get and store current wakeup_seq value. */ movl wakeup_seq(%ebx), %edi @@ -326,14 +326,12 @@ __pthread_cond_timedwait: #endif jne 10f -11: xorl %eax, %eax +11: movl 24+FRAME_SIZE(%esp), %eax /* With requeue_pi, the mutex lock is held in the kernel. */ movl 24(%esp), %ecx testl %ecx, %ecx - jnz 26f + jnz 27f - /* Remove cancellation handler. */ - movl 24+FRAME_SIZE(%esp), %eax call __pthread_mutex_cond_lock 26: addl $FRAME_SIZE, %esp cfi_adjust_cfa_offset(-FRAME_SIZE); @@ -366,8 +364,10 @@ __pthread_cond_timedwait: cfi_restore_state 27: call __pthread_mutex_cond_lock_adjust + xorl %eax, %eax jmp 26b + cfi_adjust_cfa_offset(-FRAME_SIZE); /* Initial locking failed. */ 1: #if cond_lock == 0 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 b3b8bc4be5..53970d755f 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 @@ -1,4 +1,4 @@ -/* Copyright (C) 2002-2004, 2006-2007, 2009 Free Software Foundation, Inc. +/* Copyright (C) 2002-2004,2006-2007,2009,2010 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -57,7 +57,6 @@ __pthread_cond_wait: pushl %ebx cfi_adjust_cfa_offset(4) cfi_rel_offset(%ebx, 0) - cfi_remember_state xorl %esi, %esi movl 20(%esp), %ebx @@ -95,6 +94,7 @@ __pthread_cond_wait: #define FRAME_SIZE 20 subl $FRAME_SIZE, %esp cfi_adjust_cfa_offset(FRAME_SIZE) + cfi_remember_state /* Get and store current wakeup_seq value. */ movl wakeup_seq(%ebx), %edi @@ -247,12 +247,11 @@ __pthread_cond_wait: jne 10f /* With requeue_pi, the mutex lock is held in the kernel. */ -11: xorl %eax, %eax +11: movl 24+FRAME_SIZE(%esp), %eax movl 16(%esp), %ecx testl %ecx, %ecx - jnz 20f + jnz 21f - movl 24+FRAME_SIZE(%esp), %eax call __pthread_mutex_cond_lock 20: addl $FRAME_SIZE, %esp cfi_adjust_cfa_offset(-FRAME_SIZE); @@ -279,6 +278,7 @@ __pthread_cond_wait: xorl %eax, %eax jmp 20b + cfi_adjust_cfa_offset(-FRAME_SIZE); /* Initial locking failed. */ 1: #if cond_lock == 0 |