From 10c8b2374f413ef6225555893cad5d2a530f77d5 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Wed, 25 May 2016 17:24:11 -0400 Subject: [PATCH] runtime: align C library startup calls on amd64 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 --- src/runtime/rt0_darwin_amd64.s | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/runtime/rt0_darwin_amd64.s b/src/runtime/rt0_darwin_amd64.s index ad46fd406d..655e77a86b 100644 --- a/src/runtime/rt0_darwin_amd64.s +++ b/src/runtime/rt0_darwin_amd64.s @@ -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 -- 2.50.0