diff options
author | Ulrich Drepper <drepper@redhat.com> | 2009-07-23 08:02:07 -0700 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2009-07-23 08:02:07 -0700 |
commit | 9b6bf8a30292288c9536efb72d80020f189bf9a6 (patch) | |
tree | 76d44e46e2ac8bc14a39776444b21f6296eff3fd | |
parent | c15b1d20cd31d9c1498a1863a0a65ecfec4f2513 (diff) | |
download | glibc-9b6bf8a30292288c9536efb72d80020f189bf9a6.zip glibc-9b6bf8a30292288c9536efb72d80020f189bf9a6.tar.gz glibc-9b6bf8a30292288c9536efb72d80020f189bf9a6.tar.bz2 |
Preserve stack alignment in i386 makecontext.
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/i386/makecontext.S | 10 |
2 files changed, 7 insertions, 6 deletions
@@ -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 ad23405..5b98e64 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 |