[RFC/PATCH] RT-NPTL-2.3 6/7
Hu, Boris
boris.hu@intel.com
Sat Jul 24 06:49:00 GMT 2004
i386/bits/posix_opt.h | 12
i386/bits/pthreadtypes.h | 2
i386/i486/pthread_cond_broadcast.S | 164 ---------
i386/i486/pthread_cond_signal.S | 114 ------
i386/i486/pthread_cond_timedwait.S | 612
-------------------------------------
i386/i486/pthread_cond_wait.S | 482 -----------------------------
i386/i586/pthread_cond_broadcast.S | 20 -
i386/i586/pthread_cond_signal.S | 20 -
i386/i586/pthread_cond_timedwait.S | 20 -
i386/i586/pthread_cond_wait.S | 20 -
i386/i686/pthread_cond_broadcast.S | 20 -
i386/i686/pthread_cond_signal.S | 20 -
i386/i686/pthread_cond_timedwait.S | 21 -
i386/i686/pthread_cond_wait.S | 20 -
i386/pthread_cond_signal.c | 60 +++
i386/pthread_cond_timedwait.c | 174 ++++++++++
i386/pthread_cond_wait.c | 180 ++++++++++
ia64/lowlevellock.h | 22 +
ia64/pthread_cond_broadcast.c | 20 +
ia64/pthread_cond_signal.c | 20 +
ia64/pthread_cond_timedwait.c | 20 +
21 files changed, 509 insertions(+), 1534 deletions(-)
--- /dev/null Fri Jul 23 03:18:18 2004
+++
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/i386/pthread_cond_
signal.c Sat Jun 5 05:34:00 2004
@@ -0,0 +1,60 @@
+/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
+
+ Hacked to add robust featuers to condvar by
+ Boris Hu <boris.hu@intel.com>, 2003.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include <endian.h>
+#include <errno.h>
+#include <sysdep.h>
+#include <lowlevellock.h>
+#include <pthread.h>
+#include <pthreadP.h>
+
+#include <shlib-compat.h>
+#include <kernel-features.h>
+
+
+int
+__pthread_cond_signal (cond)
+ pthread_cond_t *cond;
+{
+ pid_t id = THREAD_GETMEM (THREAD_SELF, tid);
+
+ /* Make sure we are alone. */
+ LLL_CMUTEX_LOCK (cond->__data.__lock, id);
+
+ /* Are there any waiters to be woken? */
+ if (cond->__data.__total_seq > cond->__data.__wakeup_seq)
+ {
+ /* Yes. Mark one of them as woken. */
+ ++cond->__data.__wakeup_seq;
+ ++cond->__data.__futex;
+
+ /* Wake one. */
+ lll_fuqueue_wake (&cond->__data.__futex, 1);
+ }
+
+ /* We are done. */
+ LLL_CMUTEX_UNLOCK (cond->__data.__lock, id);
+ return 0;
+}
+
+versioned_symbol (libpthread, __pthread_cond_signal,
pthread_cond_signal,
+ GLIBC_2_3_2);
--- /dev/null Fri Jul 23 03:18:18 2004
+++
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/i386/pthread_cond_
timedwait.c Mon Jul 19 02:48:10 2004
@@ -0,0 +1,174 @@
+/* Copyright (C) 2003 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
+
+ Hacked to add robust featuers to condvar by
+ Boris Hu <boris.hu@intel.com>, 2003.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include <endian.h>
+#include <errno.h>
+#include <sysdep.h>
+#include <lowlevellock.h>
+#include <pthread.h>
+#include <pthreadP.h>
+
+#include <shlib-compat.h>
+
+
+/* Cleanup handler, defined in pthread_cond_wait.c. */
+extern void __condvar_cleanup (void *arg)
+ __attribute__ ((visibility ("hidden")));
+
+struct _condvar_cleanup_buffer
+{
+ int oldtype;
+ pthread_cond_t *cond;
+ pthread_mutex_t *mutex;
+ unsigned int bc_seq;
+};
+
+int
+__pthread_cond_timedwait (cond, mutex, abstime)
+ pthread_cond_t *cond;
+ pthread_mutex_t *mutex;
+ const struct timespec *abstime;
+{
+ struct _pthread_cleanup_buffer buffer;
+ struct _condvar_cleanup_buffer cbuffer;
+ int result = 0;
+ pid_t id = THREAD_GETMEM (THREAD_SELF, tid);
+
+ /* Catch invalid parameters. */
+ if (abstime->tv_nsec >= 1000000000
+ || abstime->tv_nsec < 0)
+ return EINVAL;
+
+ /* Make sure we are along. */
+ LLL_CMUTEX_LOCK (cond->__data.__lock, id);
+
+ /* Now we can release the mutex. */
+ int err = __pthread_mutex_unlock_usercnt (mutex, 0);
+ if (err)
+ {
+ LLL_CMUTEX_UNLOCK (cond->__data.__lock, id);
+ return err;
+ }
+
+ /* We have one new user of the condvar. */
+ ++cond->__data.__total_seq;
+ ++cond->__data.__futex;
+
+ /* Remember the mutex we are using here. If there is already a
+ different address store this is a bad user bug. Do not store
+ anything for pshared condvars. */
+ if (cond->__data.__mutex != (void *) ~0l)
+ cond->__data.__mutex = mutex;
+
+ /* Prepare structure passed to cancellation handler. */
+ cbuffer.cond = cond;
+ cbuffer.mutex = mutex;
+
+ /* Before we block we enable cancellation. Therefore we have to
+ install a cancellation handler. */
+ __pthread_cleanup_push (&buffer, __condvar_cleanup, &cbuffer);
+
+ /* The current values of the wakeup counter. The "woken" counter
+ must exceed this value. */
+ unsigned long long int val;
+ unsigned long long int seq;
+ val = seq = cond->__data.__wakeup_seq;
+
+ /* Remember the broadcast counter. */
+ cbuffer.bc_seq = cond->__data.__broadcast_seq;
+
+ while (1)
+ {
+ unsigned int futex_val = cond->__data.__futex;
+
+ /* Prepare to wait. Release the condvar futex. */
+ LLL_CMUTEX_UNLOCK (cond->__data.__lock, id);
+
+ /* Enable asynchronous cancellation. Required by the standard.
*/
+ cbuffer.oldtype = __pthread_enable_asynccancel ();
+
+ /* Wait until woken by signal or broadcast. */
+ err = lll_fuqueue_timedwait (&cond->__data.__futex, futex_val,
+ abstime);
+
+ /* Disable asynchronous cancellation. */
+ __pthread_disable_asynccancel (cbuffer.oldtype);
+
+ /* We are going to look at shared data again, so get the lock.
*/
+ LLL_CMUTEX_LOCK (cond->__data.__lock, id);
+
+ if (err == FUQUEUE_WAITER_GOT_LOCK
+ || err == EOWNERDEAD)
+ goto rq_out;
+
+ /* If a broadcast happened, we are done. */
+ if (cbuffer.bc_seq != cond->__data.__broadcast_seq)
+ goto bc_out;
+
+ /* Check whether we are eligible for wakeup. */
+ val = cond->__data.__wakeup_seq;
+ if (val != seq && cond->__data.__woken_seq != val)
+ break;
+
+ /* Not woken yet. Maybe the time expired? */
+ if (__builtin_expect (err == ETIMEDOUT, 0))
+ {
+ /* Yep. Adjust the counters. */
+ ++cond->__data.__wakeup_seq;
+ ++cond->__data.__futex;
+
+ /* The error value. */
+ result = ETIMEDOUT;
+ break;
+ }
+ }
+
+ /* Another thread woken up. */
+ ++cond->__data.__woken_seq;
+
+ bc_out:
+ /* We are done with the condvar. */
+ LLL_CMUTEX_UNLOCK (cond->__data.__lock, id);
+
+ /* The cancellation handling is back to normal, remove the handler.
*/
+ __pthread_cleanup_pop (&buffer, 0);
+
+ /* Get the mutex before returning. */
+ err = __pthread_mutex_cond_lock (mutex);
+
+ return err ?: result;
+
+ rq_out:
+ /* Another thread woken up. */
+ // ++cond->__data.__woken_seq;
+
+ /* We are done with the condvar. */
+ LLL_CMUTEX_UNLOCK (cond->__data.__lock, id);
+
+ /* The cancellation handling is back to normal, remove the handler.
*/
+ __pthread_cleanup_pop (&buffer, 0);
+
+ return __pthread_mutex_rq_lock (mutex);
+}
+
+versioned_symbol (libpthread, __pthread_cond_timedwait,
pthread_cond_timedwait,
+ GLIBC_2_3_2);
--- /dev/null Fri Jul 23 03:18:18 2004
+++
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/i386/pthread_cond_
wait.c Mon Jul 19 02:48:10 2004
@@ -0,0 +1,180 @@
+/* Copyright (C) 2003 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
+
+ Hacked to add robust featuers to condvar by
+ Boris Hu <boris.hu@intel.com>, 2003.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include <endian.h>
+#include <errno.h>
+#include <sysdep.h>
+#include <lowlevellock.h>
+#include <pthread.h>
+#include <pthreadP.h>
+
+#include <shlib-compat.h>
+
+struct _condvar_cleanup_buffer
+{
+ int oldtype;
+ pthread_cond_t *cond;
+ pthread_mutex_t *mutex;
+ unsigned int bc_seq;
+};
+
+
+void
+__attribute__ ((visibility ("hidden")))
+__condvar_cleanup (void *arg)
+{
+ struct _condvar_cleanup_buffer *cbuffer =
+ (struct _condvar_cleanup_buffer *) arg;
+ pid_t id = THREAD_GETMEM (THREAD_SELF, tid);
+
+ /* We are going to modify shared data. */
+ LLL_CMUTEX_LOCK (cbuffer->cond->__data.__lock, id);
+
+ if (cbuffer->bc_seq == cbuffer->cond->__data.__broadcast_seq)
+ {
+ /* This thread is not waiting anymore. Adjust the sequence
counters
+ appropriately. */
+ ++cbuffer->cond->__data.__wakeup_seq;
+ ++cbuffer->cond->__data.__woken_seq;
+ ++cbuffer->cond->__data.__futex;
+ }
+
+ /* We are done. */
+ LLL_CMUTEX_UNLOCK (cbuffer->cond->__data.__lock, id);
+
+ /* Wake everybody to make sure no condvar signal gets lost. */
+ lll_fuqueue_wake (&cbuffer->cond->__data.__futex, INT_MAX);
+
+ /* Get the mutex before returning unless asynchronous cancellation
+ is in effect. */
+ __pthread_mutex_cond_lock (cbuffer->mutex);
+}
+
+
+int
+__pthread_cond_wait (cond, mutex)
+ pthread_cond_t *cond;
+ pthread_mutex_t *mutex;
+{
+ struct _pthread_cleanup_buffer buffer;
+ struct _condvar_cleanup_buffer cbuffer;
+ int err;
+ pid_t id = THREAD_GETMEM (THREAD_SELF, tid);
+
+ /* Make sure we are along. */
+ LLL_CMUTEX_LOCK (cond->__data.__lock, id);
+
+ /* Now we can release the mutex. */
+ err = __pthread_mutex_unlock_usercnt (mutex, 0);
+ if (__builtin_expect (err, 0))
+ {
+ LLL_CMUTEX_UNLOCK (cond->__data.__lock, id);
+ return err;
+ }
+
+ /* We have one new user of the condvar. */
+ ++cond->__data.__total_seq;
+ ++cond->__data.__futex;
+
+ /* Remember the mutex we are using here. If there is already a
+ different address store this is a bad user bug. Do not store
+ anything for pshared condvars. */
+ if (cond->__data.__mutex != (void *) ~0l)
+ cond->__data.__mutex = mutex;
+
+ /* Prepare structure passed to cancellation handler. */
+ cbuffer.cond = cond;
+ cbuffer.mutex = mutex;
+
+ /* Before we block we enable cancellation. Therefore we have to
+ install a cancellation handler. */
+ __pthread_cleanup_push (&buffer, __condvar_cleanup, &cbuffer);
+
+ /* The current values of the wakeup counter. The "woken" counter
+ must exceed this value. */
+ unsigned long long int val;
+ unsigned long long int seq;
+ val = seq = cond->__data.__wakeup_seq;
+
+ /* Remember the broadcast counter. */
+ cbuffer.bc_seq = cond->__data.__broadcast_seq;
+
+ do
+ {
+ unsigned int futex_val = cond->__data.__futex;
+
+ /* Prepare to wait. Release the condvar futex. */
+ LLL_CMUTEX_UNLOCK (cond->__data.__lock, id);
+
+ /* Enable asynchronous cancellation. Required by the standard.
*/
+ cbuffer.oldtype = __pthread_enable_asynccancel ();
+
+ /* Wait until woken by signal or broadcast. */
+ err = lll_fuqueue_wait (&cond->__data.__futex, futex_val);
+
+ /* Disable asynchronous cancellation. */
+ __pthread_disable_asynccancel (cbuffer.oldtype);
+
+ /* We are going to look at shared data again, so get the lock.
*/
+ LLL_CMUTEX_LOCK (cond->__data.__lock, id);
+
+ if (err == FUQUEUE_WAITER_GOT_LOCK
+ || err == EOWNERDEAD)
+ goto rq_out;
+
+ /* If a broadcast happened, we are done. */
+ if (cbuffer.bc_seq != cond->__data.__broadcast_seq)
+ goto bc_out;
+
+ /* Check whether we are eligible for wakeup. */
+ val = cond->__data.__wakeup_seq;
+ }
+ while (val == seq || cond->__data.__woken_seq == val);
+
+ /* Another thread woken up. */
+ ++cond->__data.__woken_seq;
+
+ bc_out:
+ /* We are done with the condvar. */
+ LLL_CMUTEX_UNLOCK (cond->__data.__lock, id);
+
+ /* The cancellation handling is back to normal, remove the handler.
*/
+ __pthread_cleanup_pop (&buffer, 0);
+
+ /* Get the mutex before returning. */
+ return __pthread_mutex_cond_lock (mutex);
+
+ rq_out:
+ /* Another thread woken up. */
+ // ++cond->__data.__woken_seq;
+
+ /* We are done with the condvar. */
+ LLL_CMUTEX_UNLOCK (cond->__data.__lock, id);
+
+ /* The cancellation handling is back to normal, remove the handler.
*/
+ __pthread_cleanup_pop (&buffer, 0);
+
+ return __pthread_mutex_rq_lock (mutex);
+}
+
+versioned_symbol (libpthread, __pthread_cond_wait, pthread_cond_wait,
+ GLIBC_2_3_2);
---
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/i386/bits/posix_op
t.h:1.1.1.1.2.1 Tue Apr 13 03:40:43 2004
+++
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/i386/bits/posix_op
t.h Sat May 15 06:24:17 2004
@@ -144,4 +144,16 @@
/* The clock selection interfaces are available. */
#define _POSIX_CLOCK_SELECTION 200112L
+/* The Priority Inheritence of thread is available. */
+#define _POSIX_THREAD_PRIO_INHERIT 1
+
+/* The Priority Protect of thread is available. */
+#define _POSIX_THREAD_PRIO_PROTECT 2
+
+/* The robust mutex is available. */
+#define _POSIX_THREAD_ROBUST_MUTEX_NP 200301L
+
+#define _POSIX_THREAD_MUTEX_SERIAL_NP 200405L
+#define _POSIX_THREAD_MUTEX_FAST_NP 200405L
+
#endif /* posix_opt.h */
---
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/i386/bits/pthreadt
ypes.h:1.1.1.1.2.3 Fri Jun 4 14:21:44 2004
+++
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/i386/bits/pthreadt
ypes.h Sat Jun 5 02:51:51 2004
@@ -49,7 +49,7 @@
{
struct
{
- int __lock;
+ volatile int __lock;
unsigned int __count;
int __owner;
/* KIND must stay at this position in the structure to maintain
---
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_
cond_broadcast.S:1.1.1.1.2.3 Fri Jun 4 14:21:44 2004
+++
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_
cond_broadcast.S Fri Jul 23 03:18:18 2004
@@ -1,164 +0,0 @@
-/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
-
-#include <sysdep.h>
-#include <shlib-compat.h>
-#include <lowlevelcond.h>
-#include <kernel-features.h>
-
-#ifdef UP
-# define LOCK
-#else
-# define LOCK lock
-#endif
-
-#define SYS_futex 240
-#define FUTEX_WAIT 0
-#define FUTEX_WAKE 1
-#define FUTEX_REQUEUE 3
-#define FUTEX_CMP_REQUEUE 4
-
-#define EINVAL 22
-
-
- .text
-
- /* int pthread_cond_broadcast (pthread_cond_t *cond) */
- .globl __pthread_cond_broadcast
- .type __pthread_cond_broadcast, @function
- .align 16
-__pthread_cond_broadcast:
-
- pushl %ebx
- pushl %esi
- pushl %edi
- pushl %ebp
-
- movl 20(%esp), %ebx
-
- /* Get internal lock. */
- movl $1, %edx
- xorl %eax, %eax
- LOCK
-#if cond_lock == 0
- cmpxchgl %edx, (%ebx)
-#else
- cmpxchgl %edx, cond_lock(%ebx)
-#endif
- jnz 1f
-
-2: addl $cond_futex, %ebx
- movl total_seq+4-cond_futex(%ebx), %eax
- movl total_seq-cond_futex(%ebx), %ebp
- cmpl wakeup_seq+4-cond_futex(%ebx), %eax
- ja 3f
- jb 4f
- cmpl wakeup_seq-cond_futex(%ebx), %ebp
- jna 4f
-
- /* Cause all currently waiting threads to recognize they are
- woken up. */
-3: movl %ebp, wakeup_seq-cond_futex(%ebx)
- movl %eax, wakeup_seq-cond_futex+4(%ebx)
- movl %ebp, woken_seq-cond_futex(%ebx)
- movl %eax, woken_seq-cond_futex+4(%ebx)
- addl %ebp, %ebp
- addl $1, broadcast_seq-cond_futex(%ebx)
- movl %ebp, (%ebx)
-
- /* Get the address of the mutex used. */
- movl dep_mutex-cond_futex(%ebx), %edi
-
- /* Unlock. */
- LOCK
- subl $1, cond_lock-cond_futex(%ebx)
- jne 7f
-
- /* Don't use requeue for pshared condvars. */
-8: cmpl $-1, %edi
- je 9f
-
- /* Wake up all threads. */
- movl $FUTEX_CMP_REQUEUE, %ecx
- movl $SYS_futex, %eax
- movl $0x7fffffff, %esi
- movl $1, %edx
- /* Get the address of the futex involved. */
-# if MUTEX_FUTEX != 0
- addl $MUTEX_FUTEX, %edi
-# endif
-/* FIXME: Until Ingo fixes 4G/4G vDSO, 6 arg syscalls are broken for
sysenter.
- ENTER_KERNEL */
- int $0x80
-
- /* For any kind of error, which mainly is EAGAIN, we try again
- with WAKE. The general test also covers running on old
- kernels. */
- cmpl $0xfffff001, %eax
- jae 9f
-
-10: xorl %eax, %eax
- popl %ebp
- popl %edi
- popl %esi
- popl %ebx
- ret
-
- .align 16
- /* Unlock. */
-4: LOCK
- subl $1, cond_lock-cond_futex(%ebx)
- jne 5f
-
-6: xorl %eax, %eax
- popl %ebp
- popl %edi
- popl %esi
- popl %ebx
- ret
-
- /* Initial locking failed. */
-1:
-#if cond_lock == 0
- movl %ebx, %ecx
-#else
- leal cond_lock(%ebx), %ecx
-#endif
- call __lll_mutex_lock_wait
- jmp 2b
-
- /* Unlock in loop requires waekup. */
-5: leal cond_lock-cond_futex(%ebx), %eax
- call __lll_mutex_unlock_wake
- jmp 6b
-
- /* Unlock in loop requires waekup. */
-7: leal cond_lock-cond_futex(%ebx), %eax
- call __lll_mutex_unlock_wake
- jmp 8b
-
-9: /* The futex requeue functionality is not available. */
- movl $0x7fffffff, %edx
- movl $FUTEX_WAKE, %ecx
- movl $SYS_futex, %eax
- ENTER_KERNEL
- jmp 10b
- .size __pthread_cond_broadcast, .-__pthread_cond_broadcast
-versioned_symbol (libpthread, __pthread_cond_broadcast,
pthread_cond_broadcast,
- GLIBC_2_3_2)
---
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_
cond_signal.S:1.1.1.1.2.2 Fri Jun 4 14:21:45 2004
+++
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_
cond_signal.S Fri Jul 23 03:18:18 2004
@@ -1,114 +0,0 @@
-/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
-
-#include <sysdep.h>
-#include <shlib-compat.h>
-#include <lowlevelcond.h>
-#include <kernel-features.h>
-
-#ifdef UP
-# define LOCK
-#else
-# define LOCK lock
-#endif
-
-#define SYS_futex 240
-#define FUTEX_WAIT 0
-#define FUTEX_WAKE 1
-#define FUTEX_REQUEUE 3
-
-#define EINVAL 22
-
-
- .text
-
- /* int pthread_cond_signal (pthread_cond_t *cond) */
- .globl __pthread_cond_signal
- .type __pthread_cond_signal, @function
- .align 16
-__pthread_cond_signal:
-
- pushl %ebx
- pushl %edi
-
- movl 12(%esp), %edi
-
- /* Get internal lock. */
- movl $1, %edx
- xorl %eax, %eax
- LOCK
-#if cond_lock == 0
- cmpxchgl %edx, (%edi)
-#else
- cmpxchgl %edx, cond_lock(%edi)
-#endif
- jnz 1f
-
-2: leal cond_futex(%edi), %ebx
- movl total_seq+4(%edi), %eax
- movl total_seq(%edi), %ecx
- cmpl wakeup_seq+4(%edi), %eax
-#if cond_lock != 0
- /* Must use leal to preserve the flags. */
- leal cond_lock(%edi), %edi
-#endif
- ja 3f
- jb 4f
- cmpl wakeup_seq-cond_futex(%ebx), %ecx
- jbe 4f
-
- /* Bump the wakeup number. */
-3: addl $1, wakeup_seq-cond_futex(%ebx)
- adcl $0, wakeup_seq-cond_futex+4(%ebx)
- addl $1, (%ebx)
-
- /* Wake up one thread. */
- movl $FUTEX_WAKE, %ecx
- movl $SYS_futex, %eax
- movl $1, %edx
- ENTER_KERNEL
-
- /* Unlock. Note that at this point %edi always points to
- cond_lock. */
-4: LOCK
- subl $1, (%edi)
- jne 5f
-
-6: xorl %eax, %eax
- popl %edi
- popl %ebx
- ret
-
- /* Initial locking failed. */
-1:
-#if cond_lock == 0
- movl %edi, %ecx
-#else
- leal cond_lock(%edi), %ecx
-#endif
- call __lll_mutex_lock_wait
- jmp 2b
-
- /* Unlock in loop requires wakeup. */
-5: movl %edi, %eax
- call __lll_mutex_unlock_wake
- jmp 6b
- .size __pthread_cond_signal, .-__pthread_cond_signal
-versioned_symbol (libpthread, __pthread_cond_signal,
pthread_cond_signal,
- GLIBC_2_3_2)
---
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_
cond_timedwait.S:1.1.1.1.2.7 Fri Jun 18 14:22:43 2004
+++
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_
cond_timedwait.S Fri Jul 23 03:18:18 2004
@@ -1,612 +0,0 @@
-/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
-
-#include <sysdep.h>
-#include <shlib-compat.h>
-#include <lowlevelcond.h>
-#include <pthread-errnos.h>
-
-#ifdef UP
-# define LOCK
-#else
-# define LOCK lock
-#endif
-
-#define SYS_gettimeofday __NR_gettimeofday
-#define SYS_futex 240
-#define FUTEX_WAIT 0
-#define FUTEX_WAKE 1
-
-
- .text
-
-/* int pthread_cond_timedwait (pthread_cond_t *cond, pthread_mutex_t
*mutex,
- const struct timespec *abstime) */
- .globl __pthread_cond_timedwait
- .type __pthread_cond_timedwait, @function
- .align 16
-__pthread_cond_timedwait:
-.LSTARTCODE:
- pushl %ebp
-.Lpush_ebp:
- pushl %edi
-.Lpush_edi:
- pushl %esi
-.Lpush_esi:
- pushl %ebx
-.Lpush_ebx:
-
- movl 20(%esp), %ebx
- movl 28(%esp), %ebp
-
- cmpl $1000000000, 4(%ebp)
- movl $EINVAL, %eax
- jae 18f
-
- /* Get internal lock. */
- movl $1, %edx
- xorl %eax, %eax
- LOCK
-#if cond_lock == 0
- cmpxchgl %edx, (%ebx)
-#else
- cmpxchgl %edx, cond_lock(%ebx)
-#endif
- jnz 1f
-
- /* Store the reference to the mutex. If there is already a
- different value in there this is a bad user bug. */
-2: cmpl $-1, dep_mutex(%ebx)
- movl 24(%esp), %eax
- je 17f
- movl %eax, dep_mutex(%ebx)
-
- /* Unlock the mutex. */
-17: xorl %edx, %edx
- call __pthread_mutex_unlock_usercnt
-
- testl %eax, %eax
- jne 16f
-
- addl $1, total_seq(%ebx)
- adcl $0, total_seq+4(%ebx)
- addl $1, cond_futex(%ebx)
-
-#define FRAME_SIZE 24
- subl $FRAME_SIZE, %esp
-.Lsubl:
-
- /* Get and store current wakeup_seq value. */
- movl wakeup_seq(%ebx), %edi
- movl wakeup_seq+4(%ebx), %edx
- movl broadcast_seq(%ebx), %eax
- movl %edi, 12(%esp)
- movl %edx, 16(%esp)
- movl %eax, 20(%esp)
-
- /* Get the current time. */
-8: movl %ebx, %edx
-.LebxmovedUR:
-#ifdef __NR_clock_gettime
- /* Get the clock number. Note that the field in the condvar
- structure stores the number minus 1. */
- movl cond_clock(%ebx), %ebx
- /* Only clocks 0 and 1 are allowed. Both are handled in the
- kernel. */
- leal 4(%esp), %ecx
- movl $__NR_clock_gettime, %eax
- ENTER_KERNEL
-# ifndef __ASSUME_POSIX_TIMERS
- cmpl $-ENOSYS, %eax
- je 19f
-# endif
- movl %edx, %ebx
-.LebxbackUR:
-
- /* Compute relative timeout. */
- movl (%ebp), %ecx
- movl 4(%ebp), %edx
- subl 4(%esp), %ecx
- subl 8(%esp), %edx
-#else
- /* Get the current time. */
- leal 4(%esp), %ebx
- xorl %ecx, %ecx
- movl $SYS_gettimeofday, %eax
- ENTER_KERNEL
- movl %edx, %ebx
-.LebxbackUR:
-
- /* Compute relative timeout. */
- movl 8(%esp), %eax
- movl $1000, %edx
- mul %edx /* Milli seconds to nano seconds. */
- movl (%ebp), %ecx
- movl 4(%ebp), %edx
- subl 4(%esp), %ecx
- subl %eax, %edx
-#endif
- jns 12f
- addl $1000000000, %edx
- subl $1, %ecx
-12: testl %ecx, %ecx
- movl $-ETIMEDOUT, %esi
- js 6f
-
- /* Store relative timeout. */
-21: movl %ecx, 4(%esp)
- movl %edx, 8(%esp)
-
- movl cond_futex(%ebx), %edi
-
- /* Unlock. */
- LOCK
-#if cond_lock == 0
- subl $1, (%ebx)
-#else
- subl $1, cond_lock(%ebx)
-#endif
- jne 3f
-
-.LcleanupSTART:
-4: call __pthread_enable_asynccancel
- movl %eax, (%esp)
-
- leal 4(%esp), %esi
- xorl %ecx, %ecx /* movl $FUTEX_WAIT, %ecx */
- movl %edi, %edx
- addl $cond_futex, %ebx
-.Ladd_cond_futex:
- movl $SYS_futex, %eax
- ENTER_KERNEL
- subl $cond_futex, %ebx
-.Lsub_cond_futex:
- movl %eax, %esi
-
- movl (%esp), %eax
- call __pthread_disable_asynccancel
-.LcleanupEND:
-
- /* Lock. */
- movl $1, %edx
- xorl %eax, %eax
- LOCK
-#if cond_lock == 0
- cmpxchgl %edx, (%ebx)
-#else
- cmpxchgl %edx, cond_lock(%ebx)
-#endif
- jnz 5f
-
-6: movl broadcast_seq(%ebx), %eax
- cmpl 20(%esp), %eax
- jne 23f
-
- movl woken_seq(%ebx), %eax
- movl woken_seq+4(%ebx), %ecx
-
- movl wakeup_seq(%ebx), %edi
- movl wakeup_seq+4(%ebx), %edx
-
- cmpl 16(%esp), %edx
- jne 7f
- cmpl 12(%esp), %edi
- je 15f
-
-7: cmpl %ecx, %edx
- jne 9f
- cmp %eax, %edi
- jne 9f
-
-15: cmpl $-ETIMEDOUT, %esi
- jne 8b
-
- addl $1, wakeup_seq(%ebx)
- adcl $0, wakeup_seq+4(%ebx)
- addl $1, cond_futex(%ebx)
- movl $ETIMEDOUT, %esi
- jmp 14f
-
-23: xorl %esi, %esi
- jmp 24f
-
-9: xorl %esi, %esi
-14: addl $1, woken_seq(%ebx)
- adcl $0, woken_seq+4(%ebx)
-
-24: LOCK
-#if cond_lock == 0
- subl $1, (%ebx)
-#else
- subl $1, cond_lock(%ebx)
-#endif
- jne 10f
-
- /* Remove cancellation handler. */
-11: movl 24+FRAME_SIZE(%esp), %eax
- call __pthread_mutex_cond_lock
- addl $FRAME_SIZE, %esp
-.Laddl:
-
- /* We return the result of the mutex_lock operation if it
failed. */
- testl %eax, %eax
-#ifdef HAVE_CMOV
- cmovel %esi, %eax
-#else
- jne 22f
- movl %esi, %eax
-22:
-#endif
-
-18: popl %ebx
-.Lpop_ebx:
- popl %esi
-.Lpop_esi:
- popl %edi
-.Lpop_edi:
- popl %ebp
-.Lpop_ebp:
-
- ret
-
- /* Initial locking failed. */
-1:
-.LSbl1:
-#if cond_lock == 0
- movl %ebx, %ecx
-#else
- leal cond_lock(%ebx), %ecx
-#endif
- call __lll_mutex_lock_wait
- jmp 2b
-
- /* Unlock in loop requires wakeup. */
-3:
-.LSbl2:
-#if cond_lock == 0
- movl %ebx, %eax
-#else
- leal cond_lock(%ebx), %eax
-#endif
- call __lll_mutex_unlock_wake
- jmp 4b
-
- /* Locking in loop failed. */
-5:
-#if cond_lock == 0
- movl %ebx, %ecx
-#else
- leal cond_lock(%ebx), %ecx
-#endif
- call __lll_mutex_lock_wait
- jmp 6b
-
- /* Unlock after loop requires wakeup. */
-10:
-#if cond_lock == 0
- movl %ebx, %eax
-#else
- leal cond_lock(%ebx), %eax
-#endif
- call __lll_mutex_unlock_wake
- jmp 11b
-
- /* The initial unlocking of the mutex failed. */
-16:
-.LSbl3:
- LOCK
-#if cond_lock == 0
- subl $1, (%ebx)
-#else
- subl $1, cond_lock(%ebx)
-#endif
- jne 18b
-
- movl %eax, %esi
-#if cond_lock == 0
- movl %ebx, %eax
-#else
- leal cond_lock(%ebx), %eax
-#endif
- call __lll_mutex_unlock_wake
-
- movl %esi, %eax
- jmp 18b
-
-#if defined __NR_clock_gettime && !defined __ASSUME_POSIX_TIMERS
- /* clock_gettime not available. */
-.LSbl4:
-19: leal 4(%esp), %ebx
- xorl %ecx, %ecx
- movl $SYS_gettimeofday, %eax
- ENTER_KERNEL
- movl %edx, %ebx
-
- /* Compute relative timeout. */
- movl 8(%esp), %eax
- movl $1000, %edx
- mul %edx /* Milli seconds to nano seconds. */
- movl (%ebp), %ecx
- movl 4(%ebp), %edx
- subl 4(%esp), %ecx
- subl %eax, %edx
- jns 20f
- addl $1000000000, %edx
- subl $1, %ecx
-20: testl %ecx, %ecx
- movl $-ETIMEDOUT, %esi
- js 6b
- jmp 21b
-#endif
- .size __pthread_cond_timedwait, .-__pthread_cond_timedwait
-versioned_symbol (libpthread, __pthread_cond_timedwait,
pthread_cond_timedwait,
- GLIBC_2_3_2)
-
-
- .type __condvar_tw_cleanup3, @function
-__condvar_tw_cleanup3:
- movl 20+FRAME_SIZE(%esp), %ebx
-.LSbl5:
- jmp __condvar_tw_cleanup
- .size __condvar_tw_cleanup3, .-__condvar_tw_cleanup3
- .type __condvar_tw_cleanup2, @function
-__condvar_tw_cleanup2:
- subl $cond_futex, %ebx
- .size __condvar_tw_cleanup2, .-__condvar_tw_cleanup2
- .type __condvar_tw_cleanup, @function
-__condvar_tw_cleanup:
- movl %eax, %esi
-
- /* Get internal lock. */
- movl $1, %edx
- xorl %eax, %eax
- LOCK
-#if cond_lock == 0
- cmpxchgl %edx, (%ebx)
-#else
- cmpxchgl %edx, cond_lock(%ebx)
-#endif
- jz 1f
-
-#if cond_lock == 0
- movl %ebx, %ecx
-#else
- leal cond_lock(%ebx), %ecx
-#endif
- call __lll_mutex_lock_wait
-
-1: movl broadcast_seq(%ebx), %eax
- cmpl 20(%esp), %eax
- jne 3f
-
- addl $1, wakeup_seq(%ebx)
- adcl $0, wakeup_seq+4(%ebx)
-
- addl $1, cond_futex(%ebx)
-
- addl $1, woken_seq(%ebx)
- adcl $0, woken_seq+4(%ebx)
-
-3: LOCK
-#if cond_lock == 0
- subl $1, (%ebx)
-#else
- subl $1, cond_lock(%ebx)
-#endif
- je 2f
-
-#if cond_lock == 0
- movl %ebx, %eax
-#else
- leal cond_lock(%ebx), %eax
-#endif
- call __lll_mutex_unlock_wake
-
- /* Wake up all waiters to make sure no signal gets lost. */
-2: addl $cond_futex, %ebx
- movl $FUTEX_WAKE, %ecx
- movl $SYS_futex, %eax
- movl $0x7fffffff, %edx
- ENTER_KERNEL
-
- movl 24+FRAME_SIZE(%esp), %eax
- call __pthread_mutex_cond_lock
-
- movl %esi, (%esp)
-.LcallUR:
- call _Unwind_Resume
- hlt
-.LENDCODE:
- .size __condvar_tw_cleanup, .-__condvar_tw_cleanup
-
-
- .section .gcc_except_table,"a",@progbits
-.LexceptSTART:
- .byte 0xff # @LPStart format (omit)
- .byte 0xff # @TType format (omit)
- .byte 0x0b # call-site format
- # DW_EH_PE_sdata4
- .uleb128 .Lcstend-.Lcstbegin
-.Lcstbegin:
- .long .LcleanupSTART-.LSTARTCODE
- .long .Ladd_cond_futex-.LcleanupSTART
- .long __condvar_tw_cleanup-.LSTARTCODE
- .uleb128 0
- .long .LebxmovedUR-.LSTARTCODE
- .long .LebxbackUR-.LebxmovedUR
- .long __condvar_tw_cleanup3-.LSTARTCODE
- .uleb128 0
- .long .LebxmovedUR-.LSTARTCODE
- .long .Ladd_cond_futex-.LebxmovedUR
- .long __condvar_tw_cleanup-.LSTARTCODE
- .uleb128 0
- .long .Ladd_cond_futex-.LSTARTCODE
- .long .Lsub_cond_futex-.Ladd_cond_futex
- .long __condvar_tw_cleanup2-.LSTARTCODE
- .uleb128 0
- .long .Lsub_cond_futex-.LSTARTCODE
- .long .LcleanupEND-.Lsub_cond_futex
- .long __condvar_tw_cleanup-.LSTARTCODE
- .uleb128 0
- .long .LcallUR-.LSTARTCODE
- .long .LENDCODE-.LcallUR
- .long 0
- .uleb128 0
-.Lcstend:
-
-
- .section .eh_frame,"a",@progbits
-.LSTARTFRAME:
- .long L(ENDCIE)-L(STARTCIE) # Length of the CIE.
-.LSTARTCIE:
- .long 0 # CIE ID.
- .byte 1 # Version number.
-#ifdef SHARED
- .string "zPLR" # NUL-terminated
augmentation
- # string.
-#else
- .string "zPL" # NUL-terminated
augmentation
- # string.
-#endif
- .uleb128 1 # Code alignment factor.
- .sleb128 -4 # Data alignment factor.
- .byte 8 # Return address
register
- # column.
-#ifdef SHARED
- .uleb128 7 # Augmentation value
length.
- .byte 0x9b # Personality:
DW_EH_PE_pcrel
- # + DW_EH_PE_sdata4
- # + DW_EH_PE_indirect
- .long DW.ref.__gcc_personality_v0-.
- .byte 0x1b # LSDA Encoding:
DW_EH_PE_pcrel
- # + DW_EH_PE_sdata4.
- .byte 0x1b # FDE Encoding:
DW_EH_PE_pcrel
- # + DW_EH_PE_sdata4.
-#else
- .uleb128 6 # Augmentation value
length.
- .byte 0x0 # Personality: absolute
- .long __gcc_personality_v0
- .byte 0x0 # LSDA Encoding:
absolute
-#endif
- .byte 0x0c # DW_CFA_def_cfa
- .uleb128 4
- .uleb128 4
- .byte 0x88 # DW_CFA_offset, column
0x8
- .uleb128 1
- .align 4
-.LENDCIE:
-
- .long .LENDFDE-.LSTARTFDE # Length of the FDE.
-.LSTARTFDE:
- .long .LSTARTFDE-.LSTARTFRAME # CIE pointer.
-#ifdef SHARED
- .long .LSTARTCODE-. # PC-relative start
address
- # of the code
-#else
- .long .LSTARTCODE # Start address of the
code.
-#endif
- .long .LENDCODE-.LSTARTCODE # Length of the code.
- .uleb128 4 # Augmentation size
-#ifdef SHARED
- .long .LexceptSTART-.
-#else
- .long .LexceptSTART
-#endif
- .byte 0x40+.Lpush_ebp-.LSTARTCODE # DW_CFA_advance_loc+N
- .byte 14 # DW_CFA_def_cfa_offset
- .uleb128 8
- .byte 0x85 # DW_CFA_offset %ebp
- .uleb128 2
- .byte 0x40+ .Lpush_edi-.Lpush_ebp # DW_CFA_advance_loc+N
- .byte 14 # DW_CFA_def_cfa_offset
- .uleb128 12
- .byte 0x87 # DW_CFA_offset %edi
- .uleb128 3
- .byte 0x40+.Lpush_esi-.Lpush_edi # DW_CFA_advance_loc+N
- .byte 14 # DW_CFA_def_cfa_offset
- .uleb128 16
- .byte 0x86 # DW_CFA_offset %esi
- .uleb128 4
- .byte 0x40+.Lpush_ebx-.Lpush_esi # DW_CFA_advance_loc+N
- .byte 14 # DW_CFA_def_cfa_offset
- .uleb128 20
- .byte 0x83 # DW_CFA_offset %ebx
- .uleb128 5
- .byte 2 # DW_CFA_advance_loc1
- .byte .Lsubl-.Lpush_ebx
- .byte 14 # DW_CFA_def_cfa_offset
- .uleb128 20+FRAME_SIZE
- .byte 3 # DW_CFA_advance_loc2
- .2byte .Laddl-.Lsubl
- .byte 14 # DW_CFA_def_cfa_offset
- .uleb128 20
- .byte 0x40+.Lpop_ebx-.Laddl # DW_CFA_advance_loc+N
- .byte 14 # DW_CFA_def_cfa_offset
- .uleb128 16
- .byte 0xc3 # DW_CFA_restore %ebx
- .byte 0x40+.Lpop_esi-.Lpop_ebx # DW_CFA_advance_loc+N
- .byte 14 # DW_CFA_def_cfa_offset
- .uleb128 12
- .byte 0xc6 # DW_CFA_restore %esi
- .byte 0x40+.Lpop_edi-.Lpop_esi # DW_CFA_advance_loc+N
- .byte 14 # DW_CFA_def_cfa_offset
- .uleb128 8
- .byte 0xc7 # DW_CFA_restore %edi
- .byte 0x40+.Lpop_ebp-.Lpop_edi # DW_CFA_advance_loc+N
- .byte 14 # DW_CFA_def_cfa_offset
- .uleb128 4
- .byte 0xc5 # DW_CFA_restore %ebp
- .byte 0x40+.LSbl1-.Lpop_edi # DW_CFA_advance_loc+N
- .byte 14 # DW_CFA_def_cfa_offset
- .uleb128 20
- .byte 0x40+.LSbl2-.LSbl1 # DW_CFA_advance_loc+N
- .byte 14 # DW_CFA_def_cfa_offset
- .uleb128 20+FRAME_SIZE
- .byte 0x85 # DW_CFA_offset %ebp
- .uleb128 2
- .byte 0x87 # DW_CFA_offset %edi
- .uleb128 3
- .byte 0x86 # DW_CFA_offset %esi
- .uleb128 4
- .byte 0x83 # DW_CFA_offset %ebx
- .uleb128 5
- .byte 0x40+.LSbl3-.LSbl2 # DW_CFA_advance_loc+N
- .byte 14 # DW_CFA_def_cfa_offset
- .uleb128 20
-#if defined __NR_clock_gettime && !defined __ASSUME_POSIX_TIMERS
- .byte 0x40+.LSbl4-.LSbl3 # DW_CFA_advance_loc+N
-#else
- .byte 4 # DW_CFA_advance_loc4
- .long .LSbl5-.LSbl3
-#endif
- .byte 14 # DW_CFA_def_cfa_offset
- .uleb128 20+FRAME_SIZE
- .align 4
-.LENDFDE:
-
-#ifdef SHARED
- .hidden DW.ref.__gcc_personality_v0
- .weak DW.ref.__gcc_personality_v0
- .section
.gnu.linkonce.d.DW.ref.__gcc_personality_v0,"aw",@progbits
- .align 4
- .type DW.ref.__gcc_personality_v0, @object
- .size DW.ref.__gcc_personality_v0, 4
-DW.ref.__gcc_personality_v0:
- .long __gcc_personality_v0
-#endif
---
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_
cond_wait.S:1.1.1.1.2.5 Fri Jun 4 14:21:45 2004
+++
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_
cond_wait.S Fri Jul 23 03:18:18 2004
@@ -1,482 +0,0 @@
-/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
-
-#include <sysdep.h>
-#include <shlib-compat.h>
-#include <lowlevelcond.h>
-#include <tcb-offsets.h>
-
-#ifdef UP
-# define LOCK
-#else
-# define LOCK lock
-#endif
-
-#define SYS_futex 240
-#define FUTEX_WAIT 0
-#define FUTEX_WAKE 1
-
-
- .text
-
-/* int pthread_cond_wait (pthread_cond_t *cond, pthread_mutex_t *mutex)
*/
- .globl __pthread_cond_wait
- .type __pthread_cond_wait, @function
- .align 16
-__pthread_cond_wait:
-.LSTARTCODE:
-
- pushl %edi
-.Lpush_edi:
- pushl %esi
-.Lpush_esi:
- pushl %ebx
-.Lpush_ebx:
-
- xorl %esi, %esi
- movl 16(%esp), %ebx
-
- /* Get internal lock. */
- movl $1, %edx
- xorl %eax, %eax
- LOCK
-#if cond_lock == 0
- cmpxchgl %edx, (%ebx)
-#else
- cmpxchgl %edx, cond_lock(%ebx)
-#endif
- jnz 1f
-
- /* Store the reference to the mutex. If there is already a
- different value in there this is a bad user bug. */
-2: cmpl $-1, dep_mutex(%ebx)
- movl 20(%esp), %eax
- je 15f
- movl %eax, dep_mutex(%ebx)
-
- /* Unlock the mutex. */
-15: xorl %edx, %edx
- call __pthread_mutex_unlock_usercnt
-
- testl %eax, %eax
- jne 12f
-
- addl $1, total_seq(%ebx)
- adcl $0, total_seq+4(%ebx)
- addl $1, cond_futex(%ebx)
-
-#define FRAME_SIZE 16
- subl $FRAME_SIZE, %esp
-.Lsubl:
-
- /* Get and store current wakeup_seq value. */
- movl wakeup_seq(%ebx), %edi
- movl wakeup_seq+4(%ebx), %edx
- movl broadcast_seq(%ebx), %eax
- movl %edi, 4(%esp)
- movl %edx, 8(%esp)
- movl %eax, 12(%esp)
-
-8: movl cond_futex(%ebx), %edi
-
- /* Unlock. */
- LOCK
-#if cond_lock == 0
- subl $1, (%ebx)
-#else
- subl $1, cond_lock(%ebx)
-#endif
- jne 3f
-
-.LcleanupSTART:
-4: call __pthread_enable_asynccancel
- movl %eax, (%esp)
-
- movl %esi, %ecx /* movl $FUTEX_WAIT, %ecx */
- movl %edi, %edx
- addl $cond_futex, %ebx
-.Ladd_cond_futex:
- movl $SYS_futex, %eax
- ENTER_KERNEL
- subl $cond_futex, %ebx
-.Lsub_cond_futex:
-
- movl (%esp), %eax
- call __pthread_disable_asynccancel
-.LcleanupEND:
-
- /* Lock. */
- movl $1, %edx
- xorl %eax, %eax
- LOCK
-#if cond_lock == 0
- cmpxchgl %edx, (%ebx)
-#else
- cmpxchgl %edx, cond_lock(%ebx)
-#endif
- jnz 5f
-
-6: movl broadcast_seq(%ebx), %eax
- cmpl 12(%esp), %eax
- jne 16f
-
- movl woken_seq(%ebx), %eax
- movl woken_seq+4(%ebx), %ecx
-
- movl wakeup_seq(%ebx), %edi
- movl wakeup_seq+4(%ebx), %edx
-
- cmpl 8(%esp), %edx
- jne 7f
- cmpl 4(%esp), %edi
- je 8b
-
-7: cmpl %ecx, %edx
- jne 9f
- cmp %eax, %edi
- je 8b
-
-9: addl $1, woken_seq(%ebx)
- adcl $0, woken_seq+4(%ebx)
-
- /* Unlock */
-16: LOCK
-#if cond_lock == 0
- subl $1, (%ebx)
-#else
- subl $1, cond_lock(%ebx)
-#endif
- jne 10f
-
-11: movl 20+FRAME_SIZE(%esp), %eax
- call __pthread_mutex_cond_lock
- addl $FRAME_SIZE, %esp
-.Laddl:
-
-14: popl %ebx
-.Lpop_ebx:
- popl %esi
-.Lpop_esi:
- popl %edi
-.Lpop_edi:
-
- /* We return the result of the mutex_lock operation. */
- ret
-
- /* Initial locking failed. */
-1:
-.LSbl1:
-#if cond_lock == 0
- movl %ebx, %ecx
-#else
- leal cond_lock(%ebx), %ecx
-#endif
- call __lll_mutex_lock_wait
- jmp 2b
-
- /* Unlock in loop requires waekup. */
-3:
-.LSbl2:
-#if cond_lock == 0
- movl %ebx, %eax
-#else
- leal cond_lock(%ebx), %eax
-#endif
- call __lll_mutex_unlock_wake
- jmp 4b
-
- /* Locking in loop failed. */
-5:
-#if cond_lock == 0
- movl %ebx, %ecx
-#else
- leal cond_lock(%ebx), %ecx
-#endif
- call __lll_mutex_lock_wait
- jmp 6b
-
- /* Unlock after loop requires wakeup. */
-10:
-#if cond_lock == 0
- movl %ebx, %eax
-#else
- leal cond_lock(%ebx), %eax
-#endif
- call __lll_mutex_unlock_wake
- jmp 11b
-
- /* The initial unlocking of the mutex failed. */
-12:
-.LSbl3:
- LOCK
-#if cond_lock == 0
- subl $1, (%ebx)
-#else
- subl $1, cond_lock(%ebx)
-#endif
- jne 14b
-
- movl %eax, %esi
-#if cond_lock == 0
- movl %ebx, %eax
-#else
- leal cond_lock(%ebx), %eax
-#endif
- call __lll_mutex_unlock_wake
-
- movl %esi, %eax
- jmp 14b
- .size __pthread_cond_wait, .-__pthread_cond_wait
-versioned_symbol (libpthread, __pthread_cond_wait, pthread_cond_wait,
- GLIBC_2_3_2)
-
-
- .type __condvar_w_cleanup2, @function
-__condvar_w_cleanup2:
- subl $cond_futex, %ebx
- .size __condvar_w_cleanup2, .-__condvar_w_cleanup2
-.LSbl4:
- .type __condvar_w_cleanup, @function
-__condvar_w_cleanup:
- movl %eax, %esi
-
- /* Get internal lock. */
- movl $1, %edx
- xorl %eax, %eax
- LOCK
-#if cond_lock == 0
- cmpxchgl %edx, (%ebx)
-#else
- cmpxchgl %edx, cond_lock(%ebx)
-#endif
- jz 1f
-
-#if cond_lock == 0
- movl %ebx, %ecx
-#else
- leal cond_lock(%ebx), %ecx
-#endif
- call __lll_mutex_lock_wait
-
-1: movl broadcast_seq(%ebx), %eax
- cmpl 12(%esp), %eax
- jne 3f
-
- addl $1, wakeup_seq(%ebx)
- adcl $0, wakeup_seq+4(%ebx)
-
- addl $1, cond_futex(%ebx)
-
- addl $1, woken_seq(%ebx)
- adcl $0, woken_seq+4(%ebx)
-
-3: LOCK
-#if cond_lock == 0
- subl $1, (%ebx)
-#else
- subl $1, cond_lock(%ebx)
-#endif
- je 2f
-
-#if cond_lock == 0
- movl %ebx, %eax
-#else
- leal cond_lock(%ebx), %eax
-#endif
- call __lll_mutex_unlock_wake
-
- /* Wake up all waiters to make sure no signal gets lost. */
-2: addl $cond_futex, %ebx
- movl $FUTEX_WAKE, %ecx
- movl $SYS_futex, %eax
- movl $0x7fffffff, %edx
- ENTER_KERNEL
-
- movl 20+FRAME_SIZE(%esp), %eax
- call __pthread_mutex_cond_lock
-
- movl %esi, (%esp)
-.LcallUR:
- call _Unwind_Resume
- hlt
-.LENDCODE:
- .size __condvar_w_cleanup, .-__condvar_w_cleanup
-
-
- .section .gcc_except_table,"a",@progbits
-.LexceptSTART:
- .byte 0xff # @LPStart format (omit)
- .byte 0xff # @TType format (omit)
- .byte 0x0b # call-site format
- # DW_EH_PE_sdata4
- .uleb128 .Lcstend-.Lcstbegin
-.Lcstbegin:
- .long .LcleanupSTART-.LSTARTCODE
- .long .Ladd_cond_futex-.LcleanupSTART
- .long __condvar_w_cleanup-.LSTARTCODE
- .uleb128 0
- .long .Ladd_cond_futex-.LSTARTCODE
- .long .Lsub_cond_futex-.Ladd_cond_futex
- .long __condvar_w_cleanup2-.LSTARTCODE
- .uleb128 0
- .long .Lsub_cond_futex-.LSTARTCODE
- .long .LcleanupEND-.Lsub_cond_futex
- .long __condvar_w_cleanup-.LSTARTCODE
- .uleb128 0
- .long .LcallUR-.LSTARTCODE
- .long .LENDCODE-.LcallUR
- .long 0
- .uleb128 0
-.Lcstend:
-
- .section .eh_frame,"a",@progbits
-.LSTARTFRAME:
- .long L(ENDCIE)-L(STARTCIE) # Length of the CIE.
-.LSTARTCIE:
- .long 0 # CIE ID.
- .byte 1 # Version number.
-#ifdef SHARED
- .string "zPLR" # NUL-terminated
augmentation
- # string.
-#else
- .string "zPL" # NUL-terminated
augmentation
- # string.
-#endif
- .uleb128 1 # Code alignment factor.
- .sleb128 -4 # Data alignment factor.
- .byte 8 # Return address
register
- # column.
-#ifdef SHARED
- .uleb128 7 # Augmentation value
length.
- .byte 0x9b # Personality:
DW_EH_PE_pcrel
- # + DW_EH_PE_sdata4
- # + DW_EH_PE_indirect
- .long DW.ref.__gcc_personality_v0-.
- .byte 0x1b # LSDA Encoding:
DW_EH_PE_pcrel
- # + DW_EH_PE_sdata4.
- .byte 0x1b # FDE Encoding:
DW_EH_PE_pcrel
- # + DW_EH_PE_sdata4.
-#else
- .uleb128 6 # Augmentation value
length.
- .byte 0x0 # Personality: absolute
- .long __gcc_personality_v0
- .byte 0x0 # LSDA Encoding:
absolute
-#endif
- .byte 0x0c # DW_CFA_def_cfa
- .uleb128 4
- .uleb128 4
- .byte 0x88 # DW_CFA_offset, column
0x8
- .uleb128 1
- .align 4
-.LENDCIE:
-
- .long .LENDFDE-.LSTARTFDE # Length of the FDE.
-.LSTARTFDE:
- .long .LSTARTFDE-.LSTARTFRAME # CIE pointer.
-#ifdef SHARED
- .long .LSTARTCODE-. # PC-relative start
address
- # of the code.
-#else
- .long .LSTARTCODE # Start address of the
code.
-#endif
- .long .LENDCODE-.LSTARTCODE # Length of the code.
- .uleb128 4 # Augmentation size
-#ifdef SHARED
- .long .LexceptSTART-.
-#else
- .long .LexceptSTART
-#endif
- .byte 0x40+.Lpush_edi-.LSTARTCODE # DW_CFA_advance_loc+N
- .byte 14 # DW_CFA_def_cfa_offset
- .uleb128 8
- .byte 0x87 # DW_CFA_offset %edi
- .uleb128 2
- .byte 0x40+.Lpush_esi-.Lpush_edi # DW_CFA_advance_loc+N
- .byte 14 # DW_CFA_def_cfa_offset
- .uleb128 12
- .byte 0x86 # DW_CFA_offset %esi
- .uleb128 3
- .byte 0x40+.Lpush_ebx-.Lpush_esi # DW_CFA_advance_loc+N
- .byte 14 # DW_CFA_def_cfa_offset
- .uleb128 16
- .byte 0x83 # DW_CFA_offset %ebx
- .uleb128 4
- .byte 2 # DW_CFA_advance_loc1
- .byte .Lsubl-.Lpush_ebx
- .byte 14 # DW_CFA_def_cfa_offset
- .uleb128 16+FRAME_SIZE
- .byte 2 # DW_CFA_advance_loc1
- .byte .Laddl-.Lsubl
- .byte 14 # DW_CFA_def_cfa_offset
- .uleb128 16
- .byte 0x40+ .Lpop_ebx-.Laddl # DW_CFA_advance_loc+N
- .byte 14 # DW_CFA_def_cfa_offset
- .uleb128 12
- .byte 0xc3 # DW_CFA_restore %ebx
- .byte 0x40+.Lpop_esi-.Lpop_ebx # DW_CFA_advance_loc+N
- .byte 14 # DW_CFA_def_cfa_offset
- .uleb128 8
- .byte 0xc6 # DW_CFA_restore %esi
- .byte 0x40+.Lpop_edi-.Lpop_esi # DW_CFA_advance_loc+N
- .byte 14 # DW_CFA_def_cfa_offset
- .uleb128 4
- .byte 0xc7 # DW_CFA_restore %edi
- .byte 0x40+.LSbl1-.Lpop_edi # DW_CFA_advance_loc+N
- .byte 14 # DW_CFA_def_cfa_offset
- .uleb128 16
- .byte 0x87 # DW_CFA_offset %edi
- .uleb128 2
- .byte 0x86 # DW_CFA_offset %esi
- .uleb128 3
- .byte 0x83 # DW_CFA_offset %ebx
- .uleb128 4
- .byte 0x40+.LSbl2-.LSbl1 # DW_CFA_advance_loc+N
- .byte 14 # DW_CFA_def_cfa_offset
- .uleb128 16+FRAME_SIZE
- .byte 0x40+.LSbl3-.LSbl2 # DW_CFA_advance_loc+N
- .byte 14 # DW_CFA_def_cfa_offset
- .uleb128 16
- .byte 0x40+.LSbl4-.LSbl3 # DW_CFA_advance_loc+N
- .byte 14 # DW_CFA_def_cfa_offset
- .uleb128 16+FRAME_SIZE
- .align 4
-.LENDFDE:
-
-
-#ifdef PIC
- .section .gnu.linkonce.t.__i686.get_pc_thunk.cx,"ax",@progbits
- .globl __i686.get_pc_thunk.cx
- .hidden __i686.get_pc_thunk.cx
- .type __i686.get_pc_thunk.cx,@function
-__i686.get_pc_thunk.cx:
- movl (%esp), %ecx;
- ret
- .size __i686.get_pc_thunk.cx,.-__i686.get_pc_thunk.cx
-#endif
-
-#ifdef SHARED
- .hidden DW.ref.__gcc_personality_v0
- .weak DW.ref.__gcc_personality_v0
- .section
.gnu.linkonce.d.DW.ref.__gcc_personality_v0,"aw",@progbits
- .align 4
- .type DW.ref.__gcc_personality_v0, @object
- .size DW.ref.__gcc_personality_v0, 4
-DW.ref.__gcc_personality_v0:
- .long __gcc_personality_v0
-#endif
---
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_
cond_broadcast.S:1.1.1.1 Thu Oct 9 06:54:44 2003
+++
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_
cond_broadcast.S Fri Jul 23 03:18:18 2004
@@ -1,20 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
-
-#include "../i486/pthread_cond_broadcast.S"
---
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_
cond_signal.S:1.1.1.1 Thu Oct 9 06:54:44 2003
+++
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_
cond_signal.S Fri Jul 23 03:18:18 2004
@@ -1,20 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
-
-#include "../i486/pthread_cond_signal.S"
---
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_
cond_timedwait.S:1.1.1.1 Thu Oct 9 06:54:44 2003
+++
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_
cond_timedwait.S Fri Jul 23 03:18:18 2004
@@ -1,20 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
-
-#include "../i486/pthread_cond_timedwait.S"
---
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_
cond_wait.S:1.1.1.1 Thu Oct 9 06:54:44 2003
+++
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_
cond_wait.S Fri Jul 23 03:18:18 2004
@@ -1,20 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
-
-#include "../i486/pthread_cond_wait.S"
---
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_
cond_broadcast.S:1.1.1.1 Thu Oct 9 06:54:44 2003
+++
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_
cond_broadcast.S Fri Jul 23 03:18:18 2004
@@ -1,20 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
-
-#include "../i486/pthread_cond_broadcast.S"
---
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_
cond_signal.S:1.1.1.1 Thu Oct 9 06:54:44 2003
+++
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_
cond_signal.S Fri Jul 23 03:18:18 2004
@@ -1,20 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
-
-#include "../i486/pthread_cond_signal.S"
---
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_
cond_timedwait.S:1.1.1.1 Thu Oct 9 06:54:44 2003
+++
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_
cond_timedwait.S Fri Jul 23 03:18:18 2004
@@ -1,21 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
-
-#define HAVE_CMOV 1
-#include "../i486/pthread_cond_timedwait.S"
---
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_
cond_wait.S:1.1.1.1 Thu Oct 9 06:54:44 2003
+++
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_
cond_wait.S Fri Jul 23 03:18:18 2004
@@ -1,20 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307 USA. */
-
-#include "../i486/pthread_cond_wait.S"
---
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/ia64/lowlevellock.
h:1.1.1.1.2.3 Fri Jun 4 14:21:46 2004
+++
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/ia64/lowlevellock.
h Sat Jun 5 02:51:52 2004
@@ -2,6 +2,10 @@
This file is part of the GNU C Library.
Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
+ Redirect lowlevellock to use Fast User SYNchronization(fusyn).
+ Based on implementation for i386 by Boris Hu (Intel).
+ Dave Howell <david.p.howell@intel.com>, 2003
+
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
@@ -122,6 +126,7 @@
#define lll_mutex_unlock(futex) \
__lll_mutex_unlock(&(futex))
+//#warning FIXME: requeue feature will be added when the fusyn is
ready.
#define __lll_mutex_unlock_force(futex) \
((void) ({ \
@@ -200,5 +205,22 @@
__lll_cond_wake (cond)
#define lll_cond_broadcast(cond) \
__lll_cond_broadcast (cond)
+
+// USE_FUSYN_ROBUST_MUTEX macro to enable/disable the RM features.
+#define USE_FUSYN_ROBUST_MUTEX 1
+
+#ifdef USE_FUSYN_ROBUST_MUTEX
+
+#include <linux/fulock.h>
+#include <sysdep.h>
+#include <errno.h>
+#include <pthread.h>
+#include <internaltypes.h>
+
+#ifndef __set_errno
+#define __set_errno(e) (errno = (e))
+#endif
+
+#include <lowlevelrtlock.h>
#endif /* lowlevellock.h */
--- /dev/null Fri Jul 23 03:18:18 2004
+++
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/ia64/pthread_cond_
broadcast.c Fri May 21 11:11:25 2004
@@ -0,0 +1,20 @@
+/* Copyright (C) 2003 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David Howell <david.p.howell@intel.com>, 2003.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include "../i386/pthread_cond_broadcast.c"
--- /dev/null Fri Jul 23 03:18:18 2004
+++
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/ia64/pthread_cond_
signal.c Fri May 21 11:11:25 2004
@@ -0,0 +1,20 @@
+/* Copyright (C) 2003 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David Howell <david.p.howell@intel.com>, 2003.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include "../i386/pthread_cond_signal.c"
--- /dev/null Fri Jul 23 03:18:18 2004
+++
robustmutexes/rtnptl/src/nptl/sysdeps/unix/sysv/linux/ia64/pthread_cond_
timedwait.c Fri May 21 11:11:25 2004
@@ -0,0 +1,20 @@
+/* Copyright (C) 2003 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David Howell <david.p.howell@intel.com>, 2003.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include "../i386/pthread_cond_timedwait.c"s
Boris Hu (Hu Jiangtao)
Intel China Software Center
86-021-5257-4545#1277
iNET: 8-752-1277
************************************
There are my thoughts, not my employer's.
************************************
"gpg --recv-keys --keyserver wwwkeys.pgp.net 0FD7685F"
{0FD7685F:CFD6 6F5C A2CB 7881 725B CEA0 956F 9F14 0FD7 685F}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: rtnptl-2.3.patch-5
Type: application/octet-stream
Size: 62099 bytes
Desc: rtnptl-2.3.patch-5
URL: <http://sourceware.org/pipermail/libc-alpha/attachments/20040724/325ebe99/attachment.obj>
More information about the Libc-alpha
mailing list