about summary refs log tree commit diff
path: root/nptl/sysdeps/unix/sysv/linux/i386
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2004-02-22 19:37:31 +0000
committerUlrich Drepper <drepper@redhat.com>2004-02-22 19:37:31 +0000
commita8fd5a02d94dcbe9a75252a66d2d73b41b9a2c83 (patch)
tree25310d8d27f7cd221a2d7450d0b4d0e23b2791e7 /nptl/sysdeps/unix/sysv/linux/i386
parentc91b8752c35d0d6b59419e3d39a7bd3dc1b45cc0 (diff)
downloadglibc-a8fd5a02d94dcbe9a75252a66d2d73b41b9a2c83.tar.gz
glibc-a8fd5a02d94dcbe9a75252a66d2d73b41b9a2c83.tar.xz
glibc-a8fd5a02d94dcbe9a75252a66d2d73b41b9a2c83.zip
Update.
2004-02-22  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/unix/sysv/linux/i386/posix_fadvise64.S: Pop register
	content also in case of an overflow in the parameter.
	Reported by Momchil Velikov <velco@fadata.bg>.
Diffstat (limited to 'nptl/sysdeps/unix/sysv/linux/i386')
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S21
1 files changed, 10 insertions, 11 deletions
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S
index c5ec154af2..600ba75874 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -50,26 +50,25 @@ __lll_mutex_lock_wait:
 	xorl	%esi, %esi	/* No timeout.  */
 	xorl	%ecx, %ecx	/* movl $FUTEX_WAIT, %ecx */
 
-1:	cmpl	%edx, %eax	/* NB:	 %edx == 2 */
-	je 3f
+	cmpl	%edx, %eax	/* NB:	 %edx == 2 */
+	je 1f
 
-	movl	$1, %eax
-	LOCK
-	cmpxchgl %edx, (%ebx)
+	movl	%edx, %eax
+	xchgl	%eax, (%ebx)	/* NB:	 lock is implied */
 
 	testl	%eax, %eax
 	je	2f
 
-3:	movl	$SYS_futex, %eax
+1:	movl	$SYS_futex, %eax
 	ENTER_KERNEL
 
-	xorl	%eax, %eax
-2:	LOCK
-	cmpxchgl %edx, (%ebx)
+	movl	%edx, %eax
+	xchgl	%eax, (%ebx)	/* NB:	 lock is implied */
 
+	testl	%eax, %eax
 	jnz,pn	1b
 
-	popl	%esi
+2:	popl	%esi
 	popl	%ebx
 	popl	%edx
 	ret