]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: save callee-saved regs in darwin-amd64 library init
authorIan Lance Taylor <iant@golang.org>
Fri, 8 Jan 2016 15:36:35 +0000 (07:36 -0800)
committerIan Lance Taylor <iant@golang.org>
Fri, 8 Jan 2016 17:27:28 +0000 (17:27 +0000)
We're only getting away with it today by luck.

Change-Id: I24d1cceee4d20c5181ca64fceda152e875f6ad81
Reviewed-on: https://go-review.googlesource.com/18440
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: David Crawshaw <crawshaw@golang.org>
src/runtime/rt0_darwin_amd64.s

index 8d50e96ee121e70dc575d0f6e0e2bdb5bdcc4cc8..c4ebc88522861770b6059fe3bb93e9a19d059744 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,$40
+TEXT _rt0_amd64_darwin_lib(SB),NOSPLIT,$0x48
+       MOVQ    BX, 0x18(SP)
+       MOVQ    BP, 0x20(SP)
+       MOVQ    R12, 0x28(SP)
+       MOVQ    R13, 0x30(SP)
+       MOVQ    R14, 0x38(SP)
+       MOVQ    R15, 0x40(SP)
+
        MOVQ    DI, _rt0_amd64_darwin_lib_argc<>(SB)
        MOVQ    SI, _rt0_amd64_darwin_lib_argv<>(SB)
 
@@ -23,7 +30,8 @@ TEXT _rt0_amd64_darwin_lib(SB),NOSPLIT,$40
        MOVQ    $_rt0_amd64_darwin_lib_go(SB), DI
        MOVQ    $0, SI
        CALL    AX
-       RET
+       JMP     restore
+
 nocgo:
        MOVQ    $8388608, 0(SP)                    // stacksize
        MOVQ    $_rt0_amd64_darwin_lib_go(SB), AX
@@ -31,6 +39,14 @@ nocgo:
        MOVQ    $0, 16(SP)                         // fnarg
        MOVQ    $runtime·newosproc0(SB), AX
        CALL    AX
+
+restore:
+       MOVQ    0x18(SP), BX
+       MOVQ    0x20(SP), BP
+       MOVQ    0x28(SP), R12
+       MOVQ    0x30(SP), R13
+       MOVQ    0x38(SP), R14
+       MOVQ    0x40(SP), R15
        RET
 
 TEXT _rt0_amd64_darwin_lib_go(SB),NOSPLIT,$0