From fad48d9e2d96a20b27163fab6b893cf0c6aa0e2b Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Mon, 10 Mar 2003 22:27:01 +0000 Subject: [PATCH] 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. --- nptl/ChangeLog | 7 ++ .../unix/sysv/linux/i386/i486/libc-lowlevelmutex.S | 75 ++-------------------- .../unix/sysv/linux/i386/i486/lowlevelmutex.S | 12 ++-- 3 files changed, 22 insertions(+), 72 deletions(-) diff --git a/nptl/ChangeLog b/nptl/ChangeLog index 6e77b95..746f96d 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,5 +1,12 @@ 2003-03-10 Ulrich Drepper + * 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 d17d078..8b6bff4 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 - - .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 be488a7..f5aa5a4 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 -- 2.7.4