]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
[BZ #5435]
authorUlrich Drepper <drepper@redhat.com>
Mon, 3 Dec 2007 04:57:30 +0000 (04:57 +0000)
committerUlrich Drepper <drepper@redhat.com>
Mon, 3 Dec 2007 04:57:30 +0000 (04:57 +0000)
* sysdeps/unix/sysv/linux/i386/makecontext.S: Align stack.

ChangeLog
sysdeps/unix/sysv/linux/i386/makecontext.S

index 49f0179327bb717ffda973b4513d9bd62459a301..4f1b198a60c26d25631a77aecbcf51345f9935ee 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2007-12-03  Ulrich Drepper  <drepper@redhat.com>
 
+       [BZ #5435]
+       * sysdeps/unix/sysv/linux/i386/makecontext.S: Align stack.
+
        * stdlib/tst-setcontext.c: Catch the case where the links gets
        messed up and we do not reach main again.
 
index 12ba4e2d67e91c340516cd2954dfe0341118d5b1..89be1176f79854bddc44943902eb49fbc0a135a3 100644 (file)
@@ -35,11 +35,6 @@ ENTRY(__makecontext)
        movl    %ecx, oEIP(%eax)
        addl    oSS_SIZE(%eax), %edx
 
-       /* Put the next context on the new stack (from the uc_link
-          element).  */
-       movl    oLINK(%eax), %ecx
-       movl    %ecx, -4(%edx)
-
        /* Remember the number of parameters for the exit handler since
           it has to remove them.  We store the number in the EBX register
           which the function we will call must preserve.  */
@@ -50,9 +45,20 @@ ENTRY(__makecontext)
        negl    %ecx
        leal    -8(%edx,%ecx,4), %edx
        negl    %ecx
+
+       /* Align the stack.  */
+       addl    $16, %edx
+       andl    $0xfffffff0, %edx
+       subl    $4, %edx
+
        /* Store the future stack pointer.  */
        movl    %edx, oESP(%eax)
 
+       /* Put the next context on the new stack (from the uc_link
+          element).  */
+       movl    oLINK(%eax), %eax
+       movl    %eax, 4(%edx,%ecx,4)
+
        /* Copy all the parameters.  */
        jecxz   2f
 1:     movl    12(%esp,%ecx,4), %eax