diff options
Diffstat (limited to 'src/runtime')
| -rw-r--r-- | src/runtime/rt0_linux_amd64.s | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/runtime/rt0_linux_amd64.s b/src/runtime/rt0_linux_amd64.s index 564b51c0b3..ced471f5cb 100644 --- a/src/runtime/rt0_linux_amd64.s +++ b/src/runtime/rt0_linux_amd64.s @@ -12,13 +12,18 @@ TEXT _rt0_amd64_linux(SB),NOSPLIT,$-8 // When building with -buildmode=c-shared, this symbol is called when the shared // library is loaded. -TEXT _rt0_amd64_linux_lib(SB),NOSPLIT,$0x48 +// Note: This function calls external C code, which might required 16-byte stack +// alignment after cmd/internal/obj applies its transformations. +TEXT _rt0_amd64_linux_lib(SB),NOSPLIT,$0x50 + MOVQ SP, AX + ANDQ $-16, SP MOVQ BX, 0x10(SP) MOVQ BP, 0x18(SP) MOVQ R12, 0x20(SP) MOVQ R13, 0x28(SP) MOVQ R14, 0x30(SP) MOVQ R15, 0x38(SP) + MOVQ AX, 0x40(SP) MOVQ DI, _rt0_amd64_linux_lib_argc<>(SB) MOVQ SI, _rt0_amd64_linux_lib_argv<>(SB) @@ -50,6 +55,7 @@ restore: MOVQ 0x28(SP), R13 MOVQ 0x30(SP), R14 MOVQ 0x38(SP), R15 + MOVQ 0x40(SP), SP RET TEXT _rt0_amd64_linux_lib_go(SB),NOSPLIT,$0 |
