mirror of git://sourceware.org/git/glibc.git
Fix pthread_cond_*wait with requeue-PI on i386.
This commit is contained in:
parent
aa732e2b2b
commit
893549c5a0
|
@ -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>
|
2010-01-14 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
* Versions: Add pthread_mutex_consistent, pthread_mutexattr_getrobust,
|
* Versions: Add pthread_mutex_consistent, pthread_mutexattr_getrobust,
|
||||||
|
|
|
@ -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.
|
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.
|
||||||
|
|
||||||
|
@ -57,7 +57,6 @@ __pthread_cond_timedwait:
|
||||||
pushl %ebx
|
pushl %ebx
|
||||||
cfi_adjust_cfa_offset(4)
|
cfi_adjust_cfa_offset(4)
|
||||||
cfi_rel_offset(%ebx, 0)
|
cfi_rel_offset(%ebx, 0)
|
||||||
cfi_remember_state
|
|
||||||
|
|
||||||
movl 20(%esp), %ebx
|
movl 20(%esp), %ebx
|
||||||
movl 28(%esp), %ebp
|
movl 28(%esp), %ebp
|
||||||
|
@ -99,6 +98,7 @@ __pthread_cond_timedwait:
|
||||||
#define FRAME_SIZE 32
|
#define FRAME_SIZE 32
|
||||||
subl $FRAME_SIZE, %esp
|
subl $FRAME_SIZE, %esp
|
||||||
cfi_adjust_cfa_offset(FRAME_SIZE)
|
cfi_adjust_cfa_offset(FRAME_SIZE)
|
||||||
|
cfi_remember_state
|
||||||
|
|
||||||
/* Get and store current wakeup_seq value. */
|
/* Get and store current wakeup_seq value. */
|
||||||
movl wakeup_seq(%ebx), %edi
|
movl wakeup_seq(%ebx), %edi
|
||||||
|
@ -326,14 +326,12 @@ __pthread_cond_timedwait:
|
||||||
#endif
|
#endif
|
||||||
jne 10f
|
jne 10f
|
||||||
|
|
||||||
11: xorl %eax, %eax
|
11: movl 24+FRAME_SIZE(%esp), %eax
|
||||||
/* With requeue_pi, the mutex lock is held in the kernel. */
|
/* With requeue_pi, the mutex lock is held in the kernel. */
|
||||||
movl 24(%esp), %ecx
|
movl 24(%esp), %ecx
|
||||||
testl %ecx, %ecx
|
testl %ecx, %ecx
|
||||||
jnz 26f
|
jnz 27f
|
||||||
|
|
||||||
/* Remove cancellation handler. */
|
|
||||||
movl 24+FRAME_SIZE(%esp), %eax
|
|
||||||
call __pthread_mutex_cond_lock
|
call __pthread_mutex_cond_lock
|
||||||
26: addl $FRAME_SIZE, %esp
|
26: addl $FRAME_SIZE, %esp
|
||||||
cfi_adjust_cfa_offset(-FRAME_SIZE);
|
cfi_adjust_cfa_offset(-FRAME_SIZE);
|
||||||
|
@ -366,8 +364,10 @@ __pthread_cond_timedwait:
|
||||||
cfi_restore_state
|
cfi_restore_state
|
||||||
|
|
||||||
27: call __pthread_mutex_cond_lock_adjust
|
27: call __pthread_mutex_cond_lock_adjust
|
||||||
|
xorl %eax, %eax
|
||||||
jmp 26b
|
jmp 26b
|
||||||
|
|
||||||
|
cfi_adjust_cfa_offset(-FRAME_SIZE);
|
||||||
/* Initial locking failed. */
|
/* Initial locking failed. */
|
||||||
1:
|
1:
|
||||||
#if cond_lock == 0
|
#if cond_lock == 0
|
||||||
|
|
|
@ -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.
|
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.
|
||||||
|
|
||||||
|
@ -57,7 +57,6 @@ __pthread_cond_wait:
|
||||||
pushl %ebx
|
pushl %ebx
|
||||||
cfi_adjust_cfa_offset(4)
|
cfi_adjust_cfa_offset(4)
|
||||||
cfi_rel_offset(%ebx, 0)
|
cfi_rel_offset(%ebx, 0)
|
||||||
cfi_remember_state
|
|
||||||
|
|
||||||
xorl %esi, %esi
|
xorl %esi, %esi
|
||||||
movl 20(%esp), %ebx
|
movl 20(%esp), %ebx
|
||||||
|
@ -95,6 +94,7 @@ __pthread_cond_wait:
|
||||||
#define FRAME_SIZE 20
|
#define FRAME_SIZE 20
|
||||||
subl $FRAME_SIZE, %esp
|
subl $FRAME_SIZE, %esp
|
||||||
cfi_adjust_cfa_offset(FRAME_SIZE)
|
cfi_adjust_cfa_offset(FRAME_SIZE)
|
||||||
|
cfi_remember_state
|
||||||
|
|
||||||
/* Get and store current wakeup_seq value. */
|
/* Get and store current wakeup_seq value. */
|
||||||
movl wakeup_seq(%ebx), %edi
|
movl wakeup_seq(%ebx), %edi
|
||||||
|
@ -247,12 +247,11 @@ __pthread_cond_wait:
|
||||||
jne 10f
|
jne 10f
|
||||||
|
|
||||||
/* With requeue_pi, the mutex lock is held in the kernel. */
|
/* 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
|
movl 16(%esp), %ecx
|
||||||
testl %ecx, %ecx
|
testl %ecx, %ecx
|
||||||
jnz 20f
|
jnz 21f
|
||||||
|
|
||||||
movl 24+FRAME_SIZE(%esp), %eax
|
|
||||||
call __pthread_mutex_cond_lock
|
call __pthread_mutex_cond_lock
|
||||||
20: addl $FRAME_SIZE, %esp
|
20: addl $FRAME_SIZE, %esp
|
||||||
cfi_adjust_cfa_offset(-FRAME_SIZE);
|
cfi_adjust_cfa_offset(-FRAME_SIZE);
|
||||||
|
@ -279,6 +278,7 @@ __pthread_cond_wait:
|
||||||
xorl %eax, %eax
|
xorl %eax, %eax
|
||||||
jmp 20b
|
jmp 20b
|
||||||
|
|
||||||
|
cfi_adjust_cfa_offset(-FRAME_SIZE);
|
||||||
/* Initial locking failed. */
|
/* Initial locking failed. */
|
||||||
1:
|
1:
|
||||||
#if cond_lock == 0
|
#if cond_lock == 0
|
||||||
|
|
Loading…
Reference in New Issue