about summary refs log tree commit diff
path: root/sysdeps/unix/sysv/linux/i386
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2009-07-23 08:02:07 -0700
committerUlrich Drepper <drepper@redhat.com>2009-07-23 08:02:07 -0700
commit9b6bf8a30292288c9536efb72d80020f189bf9a6 (patch)
tree76d44e46e2ac8bc14a39776444b21f6296eff3fd /sysdeps/unix/sysv/linux/i386
parentc15b1d20cd31d9c1498a1863a0a65ecfec4f2513 (diff)
downloadglibc-9b6bf8a30292288c9536efb72d80020f189bf9a6.tar.gz
glibc-9b6bf8a30292288c9536efb72d80020f189bf9a6.tar.xz
glibc-9b6bf8a30292288c9536efb72d80020f189bf9a6.zip
Preserve stack alignment in i386 makecontext.
Diffstat (limited to 'sysdeps/unix/sysv/linux/i386')
-rw-r--r--sysdeps/unix/sysv/linux/i386/makecontext.S10
1 files changed, 4 insertions, 6 deletions
diff --git a/sysdeps/unix/sysv/linux/i386/makecontext.S b/sysdeps/unix/sysv/linux/i386/makecontext.S
index ad2340555a..5b98e64db2 100644
--- a/sysdeps/unix/sysv/linux/i386/makecontext.S
+++ b/sysdeps/unix/sysv/linux/i386/makecontext.S
@@ -1,5 +1,5 @@
 /* Create new context.
-   Copyright (C) 2001, 2002, 2005, 2007, 2008 Free Software Foundation, Inc.
+   Copyright (C) 2001,2002,2005,2007,2008,2009 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
 
@@ -105,17 +105,15 @@ L(exitcode):
 1:	popl	%ebx
 	addl	$_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx
 #endif
-	popl	%eax			/* This is the next context.  */
-	testl	%eax, %eax
+	cmpl	$0, (%esp)		/* Check the next context.  */
 	je	2f			/* If it is zero exit.  */
 
-	pushl	%eax
 	call	JUMPTARGET(__setcontext)
 	/* If this returns (which can happen if the syscall fails) we'll
 	   exit the program with the return error value (-1).  */
 
-2:	pushl	%eax
-	call	HIDDEN_JUMPTARGET(exit)
+	movl	%eax, (%esp)
+2:	call	HIDDEN_JUMPTARGET(exit)
 	/* The 'exit' call should never return.  In case it does cause
 	   the process to terminate.  */
 	hlt