PR 68562 points out that the x86 stack is misaligned when
__stack_split_initialize calls __generic_morestack_set_initial_sp,
causing crashes with the trunk glibc.  This patch fixes the problem by
aligning the stack.  Bootstrapped and ran Go testsuite on
x86_64-pc-linux-gnu.  Committed to mainline and gcc 5 branch.

Ian

2016-02-10  Ian Lance Taylor  <i...@google.com>

PR go/68562
* config/i386/morestack.S (__stack_split_initialize): Align
stack.
Index: config/i386/morestack.S
===================================================================
--- config/i386/morestack.S     (revision 233268)
+++ config/i386/morestack.S     (working copy)
@@ -732,6 +732,7 @@ __stack_split_initialize:
 
        leal    -16000(%esp),%eax       # We should have at least 16K.
        movl    %eax,%gs:0x30
+       subl    $4,%esp                 # Align stack.
        pushl   $16000
        pushl   %esp
 #ifdef __PIC__
@@ -739,13 +740,14 @@ __stack_split_initialize:
 #else
        call    __generic_morestack_set_initial_sp
 #endif
-       addl    $8,%esp
+       addl    $12,%esp
        ret
 
 #else /* defined(__x86_64__) */
 
        leaq    -16000(%rsp),%rax       # We should have at least 16K.
        X86_64_SAVE_NEW_STACK_BOUNDARY (ax)
+       subq    $8,%rsp                 # Align stack.
        movq    %rsp,%rdi
        movq    $16000,%rsi
 #ifdef __PIC__
@@ -753,6 +755,7 @@ __stack_split_initialize:
 #else
        call    __generic_morestack_set_initial_sp
 #endif
+       addq    $8,%rsp
        ret
 
 #endif /* defined(__x86_64__) */

Reply via email to