about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--nptl/ChangeLog17
-rw-r--r--nptl/sysdeps/i386/tls.h1
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S8
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevelmutex.S8
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelcond.S10
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S8
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelmutex.S8
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelrwlock.S14
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelsem.S8
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S4
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h21
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/lowlevelsem.h23
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/pthread_once.S6
-rw-r--r--sysdeps/unix/sysv/linux/i386/_exit.S4
-rw-r--r--sysdeps/unix/sysv/linux/i386/getcontext.S4
-rw-r--r--sysdeps/unix/sysv/linux/i386/setcontext.S4
-rw-r--r--sysdeps/unix/sysv/linux/i386/swapcontext.S4
17 files changed, 100 insertions, 52 deletions
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index c71c44b301..4e1ecf659d 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,5 +1,22 @@
 2002-12-19  Ulrich Drepper  <drepper@redhat.com>
 
+	* sysdeps/unix/sysv/linux/i386/pthread_once.S: Use ENTER_KERNEL instead
+	of int $0x80.
+	* sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S: Likewise.
+	* sysdeps/unix/sysv/linux/i386/i486/libc-lowlevelmutex.S: Likewise.
+	* sysdeps/unix/sysv/linux/i386/i486/lowlevelcond.S: Likewise.
+	* sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S: Likewise.
+	* sysdeps/unix/sysv/linux/i386/i486/lowlevelmutex.S: Likewise.
+	* sysdeps/unix/sysv/linux/i386/i486/lowlevelrwlock.S: Likewise.
+	* sysdeps/unix/sysv/linux/i386/i486/lowlevelsem.S: Likewise.
+	* sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S: Likewise.
+
+	* sysdeps/unix/sysv/linux/i386/lowlevellock.h: Add support for using
+	sysenter.
+	* sysdeps/unix/sysv/linux/i386/lowlevelsem.h: Likewise.
+
+	* sysdeps/i386/tls.h: Unconditionally include <dl-sysdep.h>.
+
 	* allocatestack.c (allocate_stack) [NEED_DL_SYSINFO]: Set sysinfo
 	in new TCB.
 	* sysdeps/unix/sysv/linux/i386/createthread.c (create_thread): Check
diff --git a/nptl/sysdeps/i386/tls.h b/nptl/sysdeps/i386/tls.h
index 3d535be083..984094c00e 100644
--- a/nptl/sysdeps/i386/tls.h
+++ b/nptl/sysdeps/i386/tls.h
@@ -20,6 +20,7 @@
 #ifndef _TLS_H
 #define _TLS_H	1
 
+#include <dl-sysdep.h>
 #ifndef __ASSEMBLER__
 # include <stddef.h>
 # include <stdint.h>
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 334866db6b..4d5f8fd62d 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S
@@ -45,7 +45,7 @@ __lll_lock_wait:
 1:
 	leal	-1(%eax), %edx	/* account for the preceeded xadd.  */
 	movl	$SYS_futex, %eax
-	int	$0x80
+	ENTER_KERNEL
 
 	orl	$-1, %eax	/* Load -1.  */
 #ifndef UP
@@ -109,7 +109,7 @@ __lll_unlock_wake:
 	xorl	%esi, %esi
 	movl	%edx, (%ebx)	/* Stores '$1'.  */
 	movl	$SYS_futex, %eax
-	int	$0x80
+	ENTER_KERNEL
 
 	popl	%edx
 	popl	%ecx
@@ -136,7 +136,7 @@ __lll_timedwait_tid:
 2:	movl	%esp, %ebx
 	xorl	%ecx, %ecx
 	movl	$SYS_gettimeofday, %eax
-	int	$0x80
+	ENTER_KERNEL
 
 	/* Compute relative timeout.  */
 	movl	4(%esp), %eax
@@ -163,7 +163,7 @@ __lll_timedwait_tid:
 	xorl	%ecx, %ecx	/* movl $FUTEX_WAIT, %ecx */
 	movl	%ebp, %ebx
 	movl	$SYS_futex, %eax
-	int	$0x80
+	ENTER_KERNEL
 
 	movl	%eax, %edx
 
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 dac8f4a884..ccae01b84a 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevelmutex.S
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevelmutex.S
@@ -46,7 +46,7 @@ __lll_mutex_lock_wait:
 1:
 	leal	1(%eax), %edx	/* account for the preceeded xadd.  */
 	movl	$SYS_futex, %eax
-	int	$0x80
+	ENTER_KERNEL
 
 	movl	$1, %eax
 #ifndef UP
@@ -94,7 +94,7 @@ __lll_mutex_timedlock_wait:
 	movl	%esp, %ebx
 	xorl	%ecx, %ecx
 	movl	$SYS_gettimeofday, %eax
-	int	$0x80
+	ENTER_KERNEL
 
 	/* Compute relative timeout.  */
 	movl	4(%esp), %eax
@@ -118,7 +118,7 @@ __lll_mutex_timedlock_wait:
 	xorl	%ecx, %ecx	/* movl $FUTEX_WAIT, %ecx */
 	movl	%ebp, %ebx
 	movl	$SYS_futex, %eax
-	int	$0x80
+	ENTER_KERNEL
 
 	movl	$1, %esi
 #ifndef UP
@@ -170,7 +170,7 @@ __lll_mutex_unlock_wake:
 	movl	$0, (%ebx)
 	movl	$1, %edx	/* Wake one thread.  */
 	movl	$SYS_futex, %eax
-	int	$0x80
+	ENTER_KERNEL
 
 	popl	%edx
 	popl	%ecx
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelcond.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelcond.S
index 9e2b9fec8d..e8c8d5d200 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelcond.S
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelcond.S
@@ -63,7 +63,7 @@ __lll_cond_wait:
 
 3:	xorl	%ecx, %ecx
 	movl	$SYS_futex, %eax
-	int	$0x80
+	ENTER_KERNEL
 
 	movl	$1, %eax
 	LOCK
@@ -121,7 +121,7 @@ __lll_cond_timedwait:
 7:	movl	%esp, %ebx
 	xorl	%ecx, %ecx
 	movl	$SYS_gettimeofday, %eax
-	int	$0x80
+	ENTER_KERNEL
 
 	/* Compute relative timeout.  */
 	movl	4(%esp), %eax
@@ -144,7 +144,7 @@ __lll_cond_timedwait:
 	xorl	%ecx, %ecx	/* movl $FUTEX_WAIT, %ecx */
 	movl	%ebp, %ebx
 	movl	$SYS_futex, %eax
-	int	$0x80
+	ENTER_KERNEL
 
 	movl	%eax, %edx
 
@@ -212,7 +212,7 @@ __lll_cond_wake:
 	xorl	%esi, %esi
 	movl	%ecx, %edx	/* movl $1, %edx */
 	movl	$SYS_futex, %eax
-	int	$0x80
+	ENTER_KERNEL
 
 3:	LOCK
 	decl	cond_lock-cond_nr_wakers(%ebx)
@@ -260,7 +260,7 @@ __lll_cond_broadcast:
 6:	movl	$FUTEX_WAKE, %ecx
 	xorl	%esi, %esi
 	movl	$SYS_futex, %eax
-	int	$0x80
+	ENTER_KERNEL
 
 3:	LOCK
 	decl	cond_lock-cond_nr_wakers(%ebx)
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S
index 400413d7c2..e79e65b21e 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S
@@ -50,7 +50,7 @@ __lll_lock_wait:
 1:
 	leal	-1(%eax), %edx	/* account for the preceeded xadd.  */
 	movl	$SYS_futex, %eax
-	int	$0x80
+	ENTER_KERNEL
 
 	orl	$-1, %eax	/* Load -1.  */
 	LOCK
@@ -104,7 +104,7 @@ __lll_unlock_wake:
 	xorl	%esi, %esi
 	movl	%edx, (%ebx)	/* Stores '$1'.  */
 	movl	$SYS_futex, %eax
-	int	$0x80
+	ENTER_KERNEL
 
 	popl	%edx
 	popl	%ecx
@@ -131,7 +131,7 @@ __lll_timedwait_tid:
 2:	movl	%esp, %ebx
 	xorl	%ecx, %ecx
 	movl	$SYS_gettimeofday, %eax
-	int	$0x80
+	ENTER_KERNEL
 
 	/* Compute relative timeout.  */
 	movl	4(%esp), %eax
@@ -158,7 +158,7 @@ __lll_timedwait_tid:
 	xorl	%ecx, %ecx	/* movl $FUTEX_WAIT, %ecx */
 	movl	%ebp, %ebx
 	movl	$SYS_futex, %eax
-	int	$0x80
+	ENTER_KERNEL
 
 	movl	%eax, %edx
 
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelmutex.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelmutex.S
index a48cd88fa8..e369c65592 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelmutex.S
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelmutex.S
@@ -52,7 +52,7 @@ __lll_mutex_lock_wait:
 1:
 	leal	1(%eax), %edx	/* account for the preceeded xadd.  */
 	movl	$SYS_futex, %eax
-	int	$0x80
+	ENTER_KERNEL
 
 	movl	$1, %eax
 	LOCK
@@ -95,7 +95,7 @@ __lll_mutex_timedlock_wait:
 	movl	%esp, %ebx
 	xorl	%ecx, %ecx
 	movl	$SYS_gettimeofday, %eax
-	int	$0x80
+	ENTER_KERNEL
 
 	/* Compute relative timeout.  */
 	movl	4(%esp), %eax
@@ -119,7 +119,7 @@ __lll_mutex_timedlock_wait:
 	xorl	%ecx, %ecx	/* movl $FUTEX_WAIT, %ecx */
 	movl	%ebp, %ebx
 	movl	$SYS_futex, %eax
-	int	$0x80
+	ENTER_KERNEL
 
 	movl	$1, %esi
 	LOCK
@@ -166,7 +166,7 @@ __lll_mutex_unlock_wake:
 	movl	$0, (%ebx)
 	movl	$1, %edx	/* Wake one thread.  */
 	movl	$SYS_futex, %eax
-	int	$0x80
+	ENTER_KERNEL
 
 	popl	%edx
 	popl	%ecx
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelrwlock.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelrwlock.S
index 8d682d94c0..4e021dca29 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelrwlock.S
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelrwlock.S
@@ -83,7 +83,7 @@ __pthread_rwlock_rdlock:
 11:	addl	$READERS_WAKEUP-MUTEX, %ebx
 	movl	%esi, %ecx	/* movl $FUTEX_WAIT, %ecx */
 	movl	$SYS_futex, %eax
-	int	$0x80
+	ENTER_KERNEL
 
 	subl	$READERS_WAKEUP-MUTEX, %ebx
 
@@ -188,7 +188,7 @@ pthread_rwlock_timedrdlock:
 	movl	%esp, %ebx
 	xorl	%ecx, %ecx
 	movl	$SYS_gettimeofday, %eax
-	int	$0x80
+	ENTER_KERNEL
 
 	/* Compute relative timeout.  */
 	movl	4(%esp), %eax
@@ -212,7 +212,7 @@ pthread_rwlock_timedrdlock:
 	movl	%ecx, %edx
 	leal	READERS_WAKEUP(%ebp), %ebx
 	movl	$SYS_futex, %eax
-	int	$0x80
+	ENTER_KERNEL
 	movl	%eax, %edx
 17:
 
@@ -320,7 +320,7 @@ __pthread_rwlock_wrlock:
 11:	addl	$WRITERS_WAKEUP-MUTEX, %ebx
 	movl	%esi, %ecx	/* movl $FUTEX_WAIT, %ecx */
 	movl	$SYS_futex, %eax
-	int	$0x80
+	ENTER_KERNEL
 
 	subl	$WRITERS_WAKEUP-MUTEX, %ebx
 
@@ -415,7 +415,7 @@ pthread_rwlock_timedwrlock:
 	movl	%esp, %ebx
 	xorl	%ecx, %ecx
 	movl	$SYS_gettimeofday, %eax
-	int	$0x80
+	ENTER_KERNEL
 
 	/* Compute relative timeout.  */
 	movl	4(%esp), %eax
@@ -439,7 +439,7 @@ pthread_rwlock_timedwrlock:
 	movl	%ecx, %edx
 	leal	WRITERS_WAKEUP(%ebp), %ebx
 	movl	$SYS_futex, %eax
-	int	$0x80
+	ENTER_KERNEL
 	movl	%eax, %edx
 17:
 
@@ -547,7 +547,7 @@ __pthread_rwlock_unlock:
 0:
 #endif
 	movl	$SYS_futex, %eax
-	int	$0x80
+	ENTER_KERNEL
 
 6:	LOCK
 	decl	MUTEX(%edi)
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelsem.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelsem.S
index 18fb16f6f6..bfec6fa155 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelsem.S
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelsem.S
@@ -66,7 +66,7 @@ __new_sem_wait:
 	movl	$SYS_futex, %eax
 	movl	%esi, %ecx
 	movl	%esi, %edx
-	int	$0x80
+	ENTER_KERNEL
 
 	testl	%eax, %eax
 	je	3b
@@ -171,7 +171,7 @@ sem_timedwait:
 	movl	%esp, %ebx
 	movl	%ecx, %edx
 	movl	$SYS_gettimeofday, %eax
-	int	$0x80
+	ENTER_KERNEL
 
 	/* Compute relative timeout.  */
 	movl	4(%esp), %eax
@@ -194,7 +194,7 @@ sem_timedwait:
 	xorl	%ecx, %ecx
 	movl	$SYS_futex, %eax
 	xorl	%edx, %edx
-	int	$0x80
+	ENTER_KERNEL
 
 	testl	%eax, %eax
 	je,pt	9f
@@ -255,7 +255,7 @@ __new_sem_post:
 	movl	$SYS_futex, %eax
 	movl	$FUTEX_WAKE, %ecx
 	incl	%edx
-	int	$0x80
+	ENTER_KERNEL
 
 	testl	%eax, %eax
 	js	1f
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S
index a385adc5f9..b77c342a99 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S
@@ -70,7 +70,7 @@ pthread_barrier_wait:
 	   if the CURR_EVENT memory has meanwhile been changed.  */
 7:	movl	%esi, %ecx		/* movl $FUTEX_WAIT, %ecx */
 8:	movl	$SYS_futex, %eax
-	int	$0x80
+	ENTER_KERNEL
 
 	/* Don't return on spurious wakeups.  The syscall does not change
 	   any register except %eax so there is no need to reload any of
@@ -95,7 +95,7 @@ pthread_barrier_wait:
 	movl	$0x7fffffff, %edx
 	movl	$FUTEX_WAKE, %ecx
 	movl	$SYS_futex, %eax
-	int	$0x80
+	ENTER_KERNEL
 
 	/* Release the mutex.  */
 	LOCK
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h b/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h
index 7c516ee36a..a96eb57c93 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h
+++ b/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h
@@ -257,6 +257,17 @@ extern int __libc_locking_needed attribute_hidden;
 # define LLL_TID_EBX_LOAD
 # define LLL_TID_EBX_REG	"b"
 #endif
+
+#ifdef I386_USE_SYSENTER
+# ifdef SHARED
+# define LLL_TID_ENTER_KERNEL	"call *%%gs:%P6\n\t"
+# else
+# define LLL_TID_ENTER_KERNEL	"call *_dl_sysinfo\n\t"
+# endif
+#else
+# define LLL_TID_ENTER_KERNEL	"int $0x80\n\t"
+#endif
+
 #define lll_wait_tid(tid) \
   do {									      \
     int __ignore;							      \
@@ -264,13 +275,14 @@ extern int __libc_locking_needed attribute_hidden;
     if (_tid != 0)							      \
       __asm __volatile (LLL_TID_EBX_LOAD				      \
 			"1:\tmovl %1, %%eax\n\t"			      \
-			"int $0x80\n\t"					      \
+			LLL_TID_ENTER_KERNEL				      \
 			"cmpl $0, (%%ebx)\n\t"				      \
 			"jne,pn 1b\n\t"					      \
 			LLL_TID_EBX_LOAD				      \
 			: "=&a" (__ignore)				      \
 			: "i" (SYS_futex), LLL_TID_EBX_REG (&tid), "S" (0),   \
-			  "c" (FUTEX_WAIT), "d" (_tid));		      \
+			  "c" (FUTEX_WAIT), "d" (_tid),			      \
+			  "i" (offsetof (tcbhead_t, sysinfo)));		      \
   } while (0)
 
 extern int __lll_timedwait_tid (int *tid, const struct timespec *abstime)
@@ -293,11 +305,12 @@ extern int __lll_timedwait_tid (int *tid, const struct timespec *abstime)
     int __ignore;							      \
     (tid) = 0;								      \
     __asm __volatile (LLL_TID_EBX_LOAD					      \
-		      "\tint $0x80\n\t"					      \
+		      LLL_TID_ENTER_KERNEL				      \
 		      LLL_TID_EBX_LOAD					      \
 		      : "=a" (__ignore)					      \
 		      : "0" (SYS_futex), LLL_TID_EBX_REG (&(tid)), "S" (0),   \
-			"c" (FUTEX_WAKE), "d" (0x7fffffff));		      \
+			"c" (FUTEX_WAKE), "d" (0x7fffffff)		      \
+			"i" (offsetof (tcbhead_t, sysinfo)));		      \
   } while (0)
 
 
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/lowlevelsem.h b/nptl/sysdeps/unix/sysv/linux/i386/lowlevelsem.h
index bd5f96402b..59c1602ddb 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/lowlevelsem.h
+++ b/nptl/sysdeps/unix/sysv/linux/i386/lowlevelsem.h
@@ -20,6 +20,9 @@
 #ifndef _LOWLEVELSEM_H
 #define _LOWLEVELSEM_H	1
 
+#include <dl-sysdep.h>
+#include <tls.h>
+
 #ifndef LOCK
 # ifdef UP
 #  define LOCK	/* nothing */
@@ -31,6 +34,16 @@
 #define SYS_futex		240
 
 
+#ifdef I386_USE_SYSENTER
+# ifdef SHARED
+# define LLL_SEM_ENTER_KERNEL(arg)	"call *%%gs:%P" #arg "\n\t"
+# else
+# define LLL_SEM_ENTER_KERNEL(arg)	"call *_dl_sysinfo\n\t"
+# endif
+#else
+# define LLL_SEM_ENTER_KERNEL(arg)	"int $0x80\n\t"
+#endif
+
 #define lll_sem_wait(sem) \
   ({ int result, ignore1, ignore2;					      \
      __asm __volatile ("1:\tincl 8(%4)\n\t"				      \
@@ -46,7 +59,7 @@
 		       "movl %%esi, %%edx\n\t"				      \
 		       "leal 4(%4), %%ebx\n\t"				      \
 		       "movl %5, %%eax\n\t"				      \
-		       "int $0x80\n\t"					      \
+		       LLL_SEM_ENTER_KERNEL (9)				      \
 		       "movl %%eax, %%edx\n\t"				      \
 		       "popl %%ebx\n\t"					      \
 		       "orl $-1, %%eax\n\t"				      \
@@ -68,7 +81,8 @@
 		       : "=a" (result), "=c" (ignore1), "=d" (ignore2),	      \
 			 "=m" (*sem)					      \
 		       : "D" (sem), "i" (SYS_futex), "S" (0),		      \
-			 "i" (-EINTR), "i" (EINTR));			      \
+			 "i" (-EINTR), "i" (EINTR),			      \
+			 "i" (offsetof (tcbhead_t, sysinfo)));		      \
      result; })
 
 
@@ -91,11 +105,12 @@ extern int __lll_sem_timedwait (struct sem *sem, const struct timespec *ts)
 			      "movl %5, %%eax\n\t"			      \
 			      /* movl $FUTEX_WAKE, %ecx */		      \
 			      "movl $1, %%ecx\n\t"			      \
-			      "int $0x80\n\t"				      \
+			      LLL_SEM_ENTER_KERNEL (6)			      \
 			      "popl %%ebx\n\t"				      \
 			      "popl %%esi"				      \
 			      : "=&a" (ignore1), "=c" (ignore2),	      \
 				"=m" (*sem), "=d" (ignore3)		      \
-			      : "r" (sem), "i" (SYS_futex)); })
+			      : "r" (sem), "i" (SYS_futex),		      \
+				"i" (offsetof (tcbhead_t, sysinfo))); })
 
 #endif	/* lowlevelsem.h */
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/pthread_once.S b/nptl/sysdeps/unix/sysv/linux/i386/pthread_once.S
index 931e38bac3..f35ae27a33 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/pthread_once.S
+++ b/nptl/sysdeps/unix/sysv/linux/i386/pthread_once.S
@@ -86,7 +86,7 @@ __pthread_once:
 	/* Somebody else got here first.  Wait.  */
 	movl	%esi, %ecx		/* movl $FUTEX_WAIT, %ecx */
 	movl	$SYS_futex, %eax
-	int	$0x80
+	ENTER_KERNEL
 	jmp	6b
 
 3:	/* Call the initializer function after setting up the
@@ -125,7 +125,7 @@ __pthread_once:
 	movl	$0x7fffffff, %edx
 	movl	$FUTEX_WAKE, %ecx
 	movl	$SYS_futex, %eax
-	int	$0x80
+	ENTER_KERNEL
 
 4:	popl	%esi
 	popl	%ebx
@@ -154,7 +154,7 @@ clear_once_control:
 	movl	$0x7fffffff, %edx
 	movl	$FUTEX_WAKE, %ecx
 	movl	$SYS_futex, %eax
-	int	$0x80
+	ENTER_KERNEL
 
 	popl	%ebx
 	popl	%esi
diff --git a/sysdeps/unix/sysv/linux/i386/_exit.S b/sysdeps/unix/sysv/linux/i386/_exit.S
index 5b4f8b1619..5c2e588409 100644
--- a/sysdeps/unix/sysv/linux/i386/_exit.S
+++ b/sysdeps/unix/sysv/linux/i386/_exit.S
@@ -27,11 +27,13 @@ _exit:
 	/* Try the new syscall first.  */
 #ifdef __NR_exit_group
 	movl	$__NR_exit_group, %eax
-	int	$0x80
+	ENTER_KERNEL
 #endif
 
 	/* Not available.  Now the old one.  */
 	movl	$__NR_exit, %eax
+	/* Don't bother using ENTER_KERNEL here.  If the exit_group
+	   syscall is not available AT_SYSINFO isn't either.  */
 	int	$0x80
 
 	/* This must not fail.  Be sure we don't return.  */
diff --git a/sysdeps/unix/sysv/linux/i386/getcontext.S b/sysdeps/unix/sysv/linux/i386/getcontext.S
index 600a886863..9db129f5a6 100644
--- a/sysdeps/unix/sysv/linux/i386/getcontext.S
+++ b/sysdeps/unix/sysv/linux/i386/getcontext.S
@@ -1,5 +1,5 @@
 /* Save current context.
-   Copyright (C) 2001 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2002 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
 
@@ -63,7 +63,7 @@ ENTRY(__getcontext)
 	xorl	%ecx, %ecx
 	movl	$SIG_BLOCK, %ebx
 	movl	$__NR_sigprocmask, %eax
-	int	$0x80
+	ENTER_KERNEL
 	popl	%ebx
 	cmpl	$-4095, %eax		/* Check %eax for error.  */
 	jae	SYSCALL_ERROR_LABEL	/* Jump to error handler if error.  */
diff --git a/sysdeps/unix/sysv/linux/i386/setcontext.S b/sysdeps/unix/sysv/linux/i386/setcontext.S
index 58a122fc28..cbe9f08ce5 100644
--- a/sysdeps/unix/sysv/linux/i386/setcontext.S
+++ b/sysdeps/unix/sysv/linux/i386/setcontext.S
@@ -1,5 +1,5 @@
 /* Install given context.
-   Copyright (C) 2001 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2002 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
 
@@ -35,7 +35,7 @@ ENTRY(__setcontext)
 	leal	oSIGMASK(%eax), %ecx
 	movl	$SIG_SETMASK, %ebx
 	movl	$__NR_sigprocmask, %eax
-	int	$0x80
+	ENTER_KERNEL
 	popl	%ebx
 	cmpl	$-4095, %eax		/* Check %eax for error.  */
 	jae	SYSCALL_ERROR_LABEL	/* Jump to error handler if error.  */
diff --git a/sysdeps/unix/sysv/linux/i386/swapcontext.S b/sysdeps/unix/sysv/linux/i386/swapcontext.S
index 0c249437a5..e44e9301b0 100644
--- a/sysdeps/unix/sysv/linux/i386/swapcontext.S
+++ b/sysdeps/unix/sysv/linux/i386/swapcontext.S
@@ -1,5 +1,5 @@
 /* Save current context and install the given one.
-   Copyright (C) 2001 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2002 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
 
@@ -65,7 +65,7 @@ ENTRY(__swapcontext)
 	leal	oSIGMASK(%ecx), %ecx
 	movl	$SIG_SETMASK, %ebx
 	movl	$__NR_sigprocmask, %eax
-	int	$0x80
+	ENTER_KERNEL
 	popl	%ebx
 	cmpl	$-4095, %eax		/* Check %eax for error.  */
 	jae	SYSCALL_ERROR_LABEL	/* Jump to error handler if error.  */