]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: align C library startup calls on amd64
authorRuss Cox <rsc@golang.org>
Wed, 25 May 2016 21:24:11 +0000 (17:24 -0400)
committerRuss Cox <rsc@golang.org>
Wed, 25 May 2016 23:16:46 +0000 (23:16 +0000)
This makes GOEXPERIMENT=framepointer, GOOS=darwin, and buildmode=carchive coexist.

Change-Id: I9f6fb2f0f06f27df683e5b51f2fa55cd21872453
Reviewed-on: https://go-review.googlesource.com/23454
Reviewed-by: Austin Clements <austin@google.com>
src/runtime/rt0_darwin_amd64.s

index ad46fd406dc208f9522c1eb39ded4072162a7892..655e77a86bde7269ae3d0ba583e2e130bc5a57b2 100644 (file)
@@ -12,7 +12,14 @@ TEXT _rt0_amd64_darwin(SB),NOSPLIT,$-8
 
 // When linking with -shared, this symbol is called when the shared library
 // is loaded.
-TEXT _rt0_amd64_darwin_lib(SB),NOSPLIT,$0x48
+TEXT _rt0_amd64_darwin_lib(SB),NOSPLIT,$0x58
+       // Align stack. We don't know whether Go is adding a frame pointer here or not.
+       MOVQ    SP, R8
+       SUBQ    $16, R8
+       ANDQ    $~15, R8
+       XCHGQ   SP, R8
+
+       MOVQ    R8, 0x48(SP)
        MOVQ    BX, 0x18(SP)
        MOVQ    BP, 0x20(SP)
        MOVQ    R12, 0x28(SP)
@@ -51,6 +58,9 @@ restore:
        MOVQ    0x30(SP), R13
        MOVQ    0x38(SP), R14
        MOVQ    0x40(SP), R15
+       
+       MOVQ    0x48(SP), R8
+       MOVQ    R8, SP
        RET
 
 TEXT _rt0_amd64_darwin_lib_go(SB),NOSPLIT,$0