* sysdeps/unix/sysv/linux/i386/i486/sem_post.S: Add private futex
authorUlrich Drepper <drepper@redhat.com>
Sat, 26 May 2007 04:49:06 +0000 (04:49 +0000)
committerUlrich Drepper <drepper@redhat.com>
Sat, 26 May 2007 04:49:06 +0000 (04:49 +0000)
support.
* sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S: Likewise.
* sysdeps/unix/sysv/linux/i386/i486/sem_wait.S: Likewise.
* sysdeps/unix/sysv/linux/x86_64/sem_post.S: Likewise.
* sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S: Likewise.
* sysdeps/unix/sysv/linux/x86_64/sem_wait.S: Likewise.

nptl/ChangeLog
nptl/sysdeps/unix/sysv/linux/i386/i486/sem_post.S
nptl/sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S
nptl/sysdeps/unix/sysv/linux/i386/i486/sem_wait.S
nptl/sysdeps/unix/sysv/linux/x86_64/sem_post.S
nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S
nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S

index 4778511..08626b4 100644 (file)
@@ -1,5 +1,13 @@
 2007-05-25  Ulrich Drepper  <drepper@redhat.com>
 
+       * sysdeps/unix/sysv/linux/i386/i486/sem_post.S: Add private futex
+       support.
+       * sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S: Likewise.
+       * sysdeps/unix/sysv/linux/i386/i486/sem_wait.S: Likewise.
+       * sysdeps/unix/sysv/linux/x86_64/sem_post.S: Likewise.
+       * sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S: Likewise.
+       * sysdeps/unix/sysv/linux/x86_64/sem_wait.S: Likewise.
+
        * semaphoreP.h: Declare __old_sem_init and __old_sem_wait.
        * sem_init.c (__new_sem_init): Rewrite to initialize all three
        fields in the structure.
index e66db14..280dc2f 100644 (file)
@@ -52,9 +52,10 @@ __new_sem_post:
        cmpl    $0, NWAITERS(%ebx)
        je      2f
 
-       movl    $SYS_futex, %eax
        movl    $FUTEX_WAKE, %ecx
+       orl     PRIVATE(%ebx), %ecx
        movl    $1, %edx
+       movl    $SYS_futex, %eax
        ENTER_KERNEL
 
        testl   %eax, %eax
index 3677ab3..57b5b58 100644 (file)
@@ -30,7 +30,7 @@
 
 #define SYS_gettimeofday       __NR_gettimeofday
 #define SYS_futex              240
-#define FUTEX_WAKE             1
+#define FUTEX_WAIT             0
 
 
 #if VALUE != 0
@@ -108,10 +108,15 @@ sem_timedwait:
        movl    %eax, 8(%esp)
 
        movl    28(%esp), %ebx  /* Load semaphore address.  */
-       xorl    %ecx, %ecx
+#if FUTEX_WAIT == 0
+       movl    PRIVATE(%ebx), %ecx
+#else
+       movl    $FUTEX_WAIT, %ecx
+       orl     PRIVATE(%ebx), %ecx
+#endif
        movl    %esp, %esi
-       movl    $SYS_futex, %eax
        xorl    %edx, %edx
+       movl    $SYS_futex, %eax
        ENTER_KERNEL
        movl    %eax, %esi
 
index bb4d644..d0eef75 100644 (file)
@@ -29,7 +29,7 @@
 #endif
 
 #define SYS_futex              240
-#define FUTEX_WAKE             1
+#define FUTEX_WAIT             0
 
 
 #if VALUE != 0
@@ -76,10 +76,15 @@ __new_sem_wait:
 6:     call    __pthread_enable_asynccancel
        movl    %eax, (%esp)
 
+#if FUTEX_WAIT == 0
+       movl    PRIVATE(%ebx), %ecx
+#else
+       movl    $FUTEX_WAIT, %ecx
+       orl     PRIVATE(%ebx), %ecx
+#endif
        xorl    %esi, %esi
+       xorl    %edx, %edx
        movl    $SYS_futex, %eax
-       movl    %esi, %ecx
-       movl    %esi, %edx
        ENTER_KERNEL
        movl    %eax, %esi
 
index 1f5d0bb..4919c11 100644 (file)
@@ -50,6 +50,7 @@ sem_post:
 
        movl    $SYS_futex, %eax
        movl    $FUTEX_WAKE, %esi
+       orl     PRIVATE(%rdi), %esi
        movl    $1, %edx
        syscall
 
index 1bb74c0..4068a1b 100644 (file)
@@ -116,7 +116,12 @@ sem_timedwait:
 #else
        leaq    VALUE(%r12), %rdi
 #endif
+#if FUTEX_WAIT == 0
+       movl    PRIVATE(%rdi), %esi
+#else
        movl    $FUTEX_WAIT, %esi
+       orl     PRIVATE(%rdi), %esi
+#endif
        movl    $SYS_futex, %eax
        xorl    %edx, %edx
        syscall
index e958d63..e099ede 100644 (file)
@@ -82,7 +82,12 @@ sem_wait:
        xorq    %r10, %r10
        movl    $SYS_futex, %eax
        movq    %r13, %rdi
+#if FUTEX_WAIT == 0
+       movl    PRIVATE(%rdi), %esi
+#else
        movl    $FUTEX_WAIT, %esi
+       orl     PRIVATE(%rdi), %esi
+#endif
        xorl    %edx, %edx
        syscall
        movq    %rax, %r12