Preserve stack alignment in i386 makecontext.
authorUlrich Drepper <drepper@redhat.com>
Thu, 23 Jul 2009 15:02:07 +0000 (08:02 -0700)
committerUlrich Drepper <drepper@redhat.com>
Thu, 23 Jul 2009 15:02:07 +0000 (08:02 -0700)
ChangeLog
sysdeps/unix/sysv/linux/i386/makecontext.S

index 5dc5d41..31ff6a1 100644 (file)
--- 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.
 
index ad23405..5b98e64 100644 (file)
@@ -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