2003-01-03 Ulrich Drepper <drepper@redhat.com>
+ * sysdeps/unix/sysv/linux/i386/i486/lowlevelcond.S
+ (__pthread_cond_wait): Don't save cancellation mode and seq value
+ in same location.
+
* herrno.c (__h_errno_location): Don't define as weak.
2003-01-02 Jakub Jelinek <jakub@redhat.com>
-/* Copyright (C) 2002 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
/* Get and store current wakeup_seq value. */
movl wakeup_seq(%ebx), %edi
movl wakeup_seq+4(%ebx), %edx
- movl %edi, (%esp)
- movl %edx, 4(%esp)
+ movl %edi, 4(%esp)
+ movl %edx, 8(%esp)
/* Unlock. */
8: LOCK
movl wakeup_seq(%ebx), %edi
movl wakeup_seq+4(%ebx), %edx
- cmpl 4(%esp), %ecx
+ cmpl 8(%esp), %ecx
ja 7f
jb 8b
- cmpl (%esp), %eax
+ cmpl 4(%esp), %eax
jb 8b
7: cmpl %ecx, %edx
/* Get internal lock. */
movl $1, %eax
LOCK
+#if cond_lock == 0
+ xaddl %eax, (%ebx)
+#else
xaddl %eax, cond_lock(%ebx)
+#endif
testl %eax, %eax
jne 1f
/* Unlock. */
4: LOCK
+#if cond_lock == 0
+ decl (%ebx)
+#else
decl cond_lock(%ebx)
+#endif
jne 5f
6: xorl %eax, %eax
/* Get internal lock. */
movl $1, %eax
LOCK
+#if cond_lock == 0
+ xaddl %eax, (%ebx)
+#else
xaddl %eax, cond_lock(%ebx)
+#endif
testl %eax, %eax
jne 1f
/* Unlock. */
4: LOCK
+#if cond_lock == 0
+ decl (%ebx)
+#else
decl cond_lock(%ebx)
+#endif
jne 5f
6: xorl %eax, %eax