mirror of git://sourceware.org/git/glibc.git
* 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.
This commit is contained in:
parent
3d2dd6ca71
commit
42e6c66593
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -50,6 +50,7 @@ sem_post:
|
|||
|
||||
movl $SYS_futex, %eax
|
||||
movl $FUTEX_WAKE, %esi
|
||||
orl PRIVATE(%rdi), %esi
|
||||
movl $1, %edx
|
||||
syscall
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue