diff options
author | Ulrich Drepper <drepper@redhat.com> | 2003-03-10 22:11:26 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2003-03-10 22:11:26 +0000 |
commit | 9356d063dff7b46f10afe440da2a63b2e130c3fa (patch) | |
tree | cdc4cc2c208db6ae5f248cd4a68def9fb24f3dd2 /nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S | |
parent | 146fa1ee6885033406049a6d0f80d64b1c5bd99e (diff) |
Update.
* 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.
* sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S: Only
define LOCK here (if UP is not defined). The actual code is in
lowlevellock.S.
Diffstat (limited to 'nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S')
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S | 73 |
1 files changed, 7 insertions, 66 deletions
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S index de0df72d78..223b111083 100644 --- a/nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S +++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S @@ -17,73 +17,14 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#include <sysdep.h> -#include <tls.h> - - .text - -#define SYS_gettimeofday __NR_gettimeofday -#define SYS_futex 240 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 - -#define ETIMEDOUT 110 - - - .globl __lll_lock_wait - .type __lll_lock_wait,@function - .hidden __lll_lock_wait - .align 16 -__lll_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 - - orl $-1, %eax /* Load -1. */ +/* 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) - jne,pn 1b - - movl $-1, (%ebx) - - popl %edx - popl %ebx - popl %esi - ret - .size __lll_lock_wait,.-__lll_lock_wait - - - .globl __lll_unlock_wake - .type __lll_unlock_wake,@function - .hidden __lll_unlock_wake - .align 16 -__lll_unlock_wake: - pushl %ebx - pushl %ecx - pushl %edx - - movl %eax, %ebx -1: movl $FUTEX_WAKE, %ecx - movl $1, %edx /* Wake one thread. */ - movl $SYS_futex, %eax - movl %edx, (%ebx) /* Stores '$1'. */ - ENTER_KERNEL - popl %edx - popl %ecx - popl %ebx - ret - .size __lll_unlock_wake,.-__lll_unlock_wake +#include "lowlevellock.S" |