]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
* 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 47785111916c26f5c62fe2c7ee11c817a570afb3..08626b43052a581914c391bb950bedac86337162 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 e66db146ece940844382bd872ced07f9b8385cf3..280dc2fe27bd510c1875aea6c42333c704aa8bc4 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 3677ab3bf9fdd341c522635e2b80e2370ea84d36..57b5b58186a699245825cd7a70c69c517c02fb5d 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 bb4d6443e9bd8077ed454c44e9f72f34ea47b927..d0eef7514455b1b62c42a7295ff38ae57c938179 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 1f5d0bba346dd5c512a59c1f8ea9e7f090d77a84..4919c11fd2c302a94bb798d845f3e22bd3078498 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 1bb74c03681b440e623b8a6b68701a46442f782b..4068a1b6b87bd964defae4aa6c895993f8a1c722 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 e958d63f5583de66a117dfd45a14993139153366..e099ede029247e53967e9bb036c58d270766a958 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