diff options
author | Ulrich Drepper <drepper@redhat.com> | 2003-03-10 22:27:01 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2003-03-10 22:27:01 +0000 |
commit | fad48d9e2d96a20b27163fab6b893cf0c6aa0e2b (patch) | |
tree | 73939b19825d69f4d684ddd5ecc4466361038d63 /nptl | |
parent | 9356d063dff7b46f10afe440da2a63b2e130c3fa (diff) | |
download | glibc-fad48d9e2d96a20b27163fab6b893cf0c6aa0e2b.tar glibc-fad48d9e2d96a20b27163fab6b893cf0c6aa0e2b.tar.gz glibc-fad48d9e2d96a20b27163fab6b893cf0c6aa0e2b.tar.bz2 glibc-fad48d9e2d96a20b27163fab6b893cf0c6aa0e2b.zip |
Update.
* sysdeps/unix/sysv/linux/i386/i486/lowlevelmutex.S: Don't define
LOCK is already defined. Don't define __lll_mutex_timedlock_wait
for libc.so.
* sysdeps/unix/sysv/linux/i386/i486/libc-lowlevelmutex.S: Only
define LOCK here (if UP is not defined). The actual code is in
lowlevelmutex.S.
Diffstat (limited to 'nptl')
-rw-r--r-- | nptl/ChangeLog | 7 | ||||
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevelmutex.S | 75 | ||||
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelmutex.S | 12 |
3 files changed, 22 insertions, 72 deletions
diff --git a/nptl/ChangeLog b/nptl/ChangeLog index 6e77b95037..746f96d0e5 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,5 +1,12 @@ 2003-03-10 Ulrich Drepper <drepper@redhat.com> + * sysdeps/unix/sysv/linux/i386/i486/lowlevelmutex.S: Don't define + LOCK is already defined. Don't define __lll_mutex_timedlock_wait + for libc.so. + * sysdeps/unix/sysv/linux/i386/i486/libc-lowlevelmutex.S: Only + define LOCK here (if UP is not defined). The actual code is in + lowlevelmutex.S. + * sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S: Don't define LOCK is already defined. Don't define lll_unlock_wake_cb and __lll_timedwait_tid for libc.so. diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevelmutex.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevelmutex.S index d17d078374..8b6bff4761 100644 --- a/nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevelmutex.S +++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevelmutex.S @@ -17,75 +17,14 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#include <sysdep.h> - - .text - -#define SYS_gettimeofday __NR_gettimeofday -#define SYS_futex 240 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 - -#define EWOULDBLOCK 11 -#define EINVAL 22 -#define ETIMEDOUT 110 - - - .globl __lll_mutex_lock_wait - .type __lll_mutex_lock_wait,@function - .hidden __lll_mutex_lock_wait - .align 16 -__lll_mutex_lock_wait: - pushl %esi - pushl %ebx - pushl %edx - - movl %ecx, %ebx - xorl %esi, %esi /* No timeout. */ - xorl %ecx, %ecx /* movl $FUTEX_WAIT, %ecx */ -1: - leal 1(%eax), %edx /* account for the preceeded xadd. */ - movl $SYS_futex, %eax - ENTER_KERNEL - - movl $1, %eax +/* In libc.so we do not unconditionally use the lock prefix. Only if + the application is using threads. */ #ifndef UP - cmpl $0, %gs:MULTIPLE_THREADS_OFFSET - je,pt 0f - lock +# define LOCK \ + cmpl $0, %gs:MULTIPLE_THREADS_OFFSET; \ + je,pt 0f; \ + lock; \ 0: #endif - xaddl %eax, (%ebx) - testl %eax, %eax - jne 1b - - movl $2, (%ebx) - - popl %edx - popl %ebx - popl %esi - ret - .size __lll_mutex_lock_wait,.-__lll_mutex_lock_wait - - - .globl __lll_mutex_unlock_wake - .type __lll_mutex_unlock_wake,@function - .hidden __lll_mutex_unlock_wake - .align 16 -__lll_mutex_unlock_wake: - pushl %ebx - pushl %ecx - pushl %edx - - movl %eax, %ebx - movl $FUTEX_WAKE, %ecx - movl $1, %edx /* Wake one thread. */ - movl $SYS_futex, %eax - movl $0, (%ebx) - ENTER_KERNEL - popl %edx - popl %ecx - popl %ebx - ret - .size __lll_mutex_unlock_wake,.-__lll_mutex_unlock_wake +#include "lowlevelmutex.S" diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelmutex.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelmutex.S index be488a7c05..f5aa5a48e3 100644 --- a/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelmutex.S +++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelmutex.S @@ -21,10 +21,12 @@ .text -#ifdef UP -# define LOCK -#else -# define LOCK lock +#ifndef LOCK +# ifdef UP +# define LOCK +# else +# define LOCK lock +# endif #endif #define SYS_gettimeofday __NR_gettimeofday @@ -69,6 +71,7 @@ __lll_mutex_lock_wait: .size __lll_mutex_lock_wait,.-__lll_mutex_lock_wait +#ifdef NOT_IN_libc .globl __lll_mutex_timedlock_wait .type __lll_mutex_timedlock_wait,@function .hidden __lll_mutex_timedlock_wait @@ -148,6 +151,7 @@ __lll_mutex_timedlock_wait: 5: movl $ETIMEDOUT, %eax jmp 6b .size __lll_mutex_timedlock_wait,.-__lll_mutex_timedlock_wait +#endif .globl __lll_mutex_unlock_wake |