Update.
authorUlrich Drepper <drepper@redhat.com>
Fri, 30 May 2003 03:20:29 +0000 (03:20 +0000)
committerUlrich Drepper <drepper@redhat.com>
Fri, 30 May 2003 03:20:29 +0000 (03:20 +0000)
2003-05-30  Jakub Jelinek  <jakub@redhat.com>

* sysdeps/powerpc/powerpc32/elf/start.S: Make code compilable with
SHARED.

ChangeLog
nptl/ChangeLog
nptl/sysdeps/unix/sysv/linux/s390/bits/pthreadtypes.h
nptl/sysdeps/unix/sysv/linux/s390/lowlevellock.h

index d3fc568..63a3668 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2003-05-30  Jakub Jelinek  <jakub@redhat.com>
+
+       * sysdeps/powerpc/powerpc32/elf/start.S: Make code compilable with
+       SHARED.
+
 2003-05-11  Andreas Schwab  <schwab@suse.de>
 
        * Makerules: Always use -MP together with -MD.
index 1515637..0d0573c 100644 (file)
@@ -3,6 +3,17 @@
        * sysdeps/unix/sysv/linux/ia64/lowlevellock.h (lll_futex_requeue):
        Find break parameter in correct asm argument.
 
+2003-05-27  Jakub Jelinek  <jakub@redhat.com>
+
+       * sysdeps/unix/sysv/linux/ia64/lowlevellock.h (lll_futex_clobbers):
+       Remove out4.
+       (lll_futex_requeue): Fix __o3 constraint, return negative errno if
+       error occured.
+       * sysdeps/unix/sysv/linux/s390/bits/pthreadtypes.h (pthread_cond_t):
+       Add __mutex.
+       * sysdeps/unix/sysv/linux/s390/lowlevellock.h (FUTEX_REQUEUE,
+       lll_futex_requeue, lll_mutex_unlock_force): Define.
+
 2003-05-30  Jakub Jelinek  <jakub@redhat.com>
 
        * sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h
index 3ebaeb9..855af4d 100644 (file)
@@ -92,6 +92,7 @@ typedef union
     unsigned long long int __total_seq;
     unsigned long long int __wakeup_seq;
     unsigned long long int __woken_seq;
+    void *__mutex;
   } __data;
   char __size[__SIZEOF_PTHREAD_COND_T];
   long long int __align;
index 0846503..62a06b5 100644 (file)
@@ -27,6 +27,7 @@
 #define SYS_futex              238
 #define FUTEX_WAIT             0
 #define FUTEX_WAKE             1
+#define FUTEX_REQUEUE          3
 
 /* Initializer for compatibility lock. */
 #define LLL_MUTEX_LOCK_INITIALIZER (0)
   })
 
 
+#define lll_futex_requeue(futex, nr_wake, nr_move, mutex) \
+  ({                                                                         \
+     register unsigned long int __r2 asm ("2") = (unsigned long int) (futex); \
+     register unsigned long int __r3 asm ("3") = FUTEX_REQUEUE;                      \
+     register unsigned long int __r4 asm ("4") = (long int) (nr_wake);       \
+     register unsigned long int __r5 asm ("5") = (long int) (nr_move);       \
+     register unsigned long int __r6 asm ("6") = (unsigned long int) (mutex); \
+     register unsigned long __result asm ("2");                                      \
+                                                                             \
+    __asm __volatile ("svc %b1"                                                      \
+                     : "=d" (__result)                                       \
+                     : "i" (SYS_futex), "0" (__r2), "d" (__r3),              \
+                       "d" (__r4), "d" (__r5), "d" (__r6)                    \
+                     : "cc", "memory" );                                     \
+    __result;                                                                \
+  })
+
+
 #define lll_compare_and_swap(futex, oldval, newval, operation) \
   do {                                                                       \
     __typeof (futex) __futex = (futex);                                              \
@@ -157,7 +176,11 @@ __lll_mutex_unlock (int *futex)
   if (oldval > 1)
     lll_futex_wake (futex, 1);
 }
-#define lll_mutex_unlock(futex) __lll_mutex_unlock(&(futex))
+#define lll_mutex_unlock(futex) \
+  __lll_mutex_unlock(&(futex))
+
+#define lll_mutex_unlock_force(futex) \
+  lll_futex_wake (&(futex), 1)
 
 #define lll_mutex_islocked(futex) \
   (futex != 0)