Commit 48754592 authored by Ian Lance Taylor's avatar Ian Lance Taylor

runtime: align stack in 386 lib startup before calling C function

Fixes Darwin 386 build. It turns out that the Darwin pthread_create
function saves the SSE registers, and therefore requires an aligned stack.
This worked before https://golang.org/cl/70530 because the stack sizes
were chosen to leave the stack aligned.

Change-Id: I911a9e8dcde4e41e595d5ef9b9a1ca733e154de6
Reviewed-on: https://go-review.googlesource.com/71432Reviewed-by: 's avatarRobert Griesemer <gri@golang.org>
Reviewed-by: 's avatarAustin Clements <austin@google.com>
parent 4c8e8fc3
......@@ -45,14 +45,20 @@ TEXT _rt0_386_lib(SB),NOSPLIT,$0
MOVL _cgo_sys_thread_create(SB), AX
TESTL AX, AX
JZ nocgo
// Align stack to call C function.
// We moved SP to BP above, but BP was clobbered by the libpreinit call.
MOVL SP, BP
ANDL $~15, SP
MOVL $_rt0_386_lib_go(SB), BX
MOVL BX, 0(SP)
MOVL $0, 4(SP)
// TODO: We are calling a C function here so we should be
// aligning the stack.
CALL AX
MOVL BP, SP
JMP restore
nocgo:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment