(lll_futex_wait): Return status.
authordrepper <drepper>
Fri, 20 Jan 2006 16:48:38 +0000 (16:48 +0000)
committerdrepper <drepper>
Fri, 20 Jan 2006 16:48:38 +0000 (16:48 +0000)
(lll_futex_timed_wait): Define.

nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.h

index d9376d4..e3e3777 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -181,19 +181,37 @@ typedef int lll_lock_t;
 # endif
 
 #define lll_futex_wait(futex, val) \
-  do {                                                                       \
-    int __ignore;                                                            \
+  ({                                                                         \
+    int __status;                                                            \
     register unsigned long __r3 asm ("r3") = SYS_futex;                              \
     register unsigned long __r4 asm ("r4") = (unsigned long) (futex);        \
     register unsigned long __r5 asm ("r5") = FUTEX_WAIT;                     \
     register unsigned long __r6 asm ("r6") = (unsigned long) (val);          \
     register unsigned long __r7 asm ("r7") = 0;                                      \
     __asm __volatile (SYSCALL_WITH_INST_PAD                                  \
-                     : "=z" (__ignore)                                       \
+                     : "=z" (__status)                                       \
                      : "r" (__r3), "r" (__r4), "r" (__r5),                   \
                        "r" (__r6), "r" (__r7)                                \
                      : "memory", "t");                                       \
-  } while (0)
+    __status;                                                                \
+  })
+
+
+#define lll_futex_timed_wait(futex, val, timeout) \
+  ({                                                                         \
+    int __status;                                                            \
+    register unsigned long __r3 asm ("r3") = SYS_futex;                              \
+    register unsigned long __r4 asm ("r4") = (unsigned long) (futex);        \
+    register unsigned long __r5 asm ("r5") = FUTEX_WAIT;                     \
+    register unsigned long __r6 asm ("r6") = (unsigned long) (val);          \
+    register unsigned long __r7 asm ("r7") = (timeout);                              \
+    __asm __volatile (SYSCALL_WITH_INST_PAD                                  \
+                     : "=z" (__status)                                       \
+                     : "r" (__r3), "r" (__r4), "r" (__r5),                   \
+                       "r" (__r6), "r" (__r7)                                \
+                     : "memory", "t");                                       \
+    __status;                                                                \
+  })
 
 
 #define lll_futex_wake(futex, nr) \