aboutsummaryrefslogtreecommitdiff
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
parentc15b1d20cd31d9c1498a1863a0a65ecfec4f2513 (diff)
downloadglibc-9b6bf8a30292288c9536efb72d80020f189bf9a6.tar
glibc-9b6bf8a30292288c9536efb72d80020f189bf9a6.tar.gz
glibc-9b6bf8a30292288c9536efb72d80020f189bf9a6.tar.bz2
glibc-9b6bf8a30292288c9536efb72d80020f189bf9a6.zip
Preserve stack alignment in i386 makecontext.
-rw-r--r--ChangeLog3
-rw-r--r--sysdeps/unix/sysv/linux/i386/makecontext.S10
2 files changed, 7 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 5dc5d41433..31ff6a17d3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
2009-07-23 Ulrich Drepper <drepper@redhat.com>
+ * sysdeps/unix/sysv/linux/i386/makecontext.S: Ensure we preserve the
+ stack alignment in the exit code.
+
* elf/dl-lookup.c (dl_lookup_x): The hashval for unique symbol can
potentially be zero.
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