Skip to content

Commit 26015b9

Browse files
committed
runtime: make stack 16-byte aligned for external code in _rt0_amd64_linux_lib
Fixes #16618. Change-Id: Iffada12e8672bbdbcf2e787782c497e2c45701b1 Reviewed-on: https://go-review.googlesource.com/25550 Run-TryBot: Minux Ma <[email protected]> Reviewed-by: Arjan Van De Ven <[email protected]> Reviewed-by: Ian Lance Taylor <[email protected]> TryBot-Result: Gobot Gobot <[email protected]>
1 parent 9fde86b commit 26015b9

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

src/runtime/rt0_linux_amd64.s

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,18 @@ TEXT _rt0_amd64_linux(SB),NOSPLIT,$-8
1212

1313
// When building with -buildmode=c-shared, this symbol is called when the shared
1414
// library is loaded.
15-
TEXT _rt0_amd64_linux_lib(SB),NOSPLIT,$0x48
15+
// Note: This function calls external C code, which might required 16-byte stack
16+
// alignment after cmd/internal/obj applies its transformations.
17+
TEXT _rt0_amd64_linux_lib(SB),NOSPLIT,$0x50
18+
MOVQ SP, AX
19+
ANDQ $-16, SP
1620
MOVQ BX, 0x10(SP)
1721
MOVQ BP, 0x18(SP)
1822
MOVQ R12, 0x20(SP)
1923
MOVQ R13, 0x28(SP)
2024
MOVQ R14, 0x30(SP)
2125
MOVQ R15, 0x38(SP)
26+
MOVQ AX, 0x40(SP)
2227

2328
MOVQ DI, _rt0_amd64_linux_lib_argc<>(SB)
2429
MOVQ SI, _rt0_amd64_linux_lib_argv<>(SB)
@@ -50,6 +55,7 @@ restore:
5055
MOVQ 0x28(SP), R13
5156
MOVQ 0x30(SP), R14
5257
MOVQ 0x38(SP), R15
58+
MOVQ 0x40(SP), SP
5359
RET
5460

5561
TEXT _rt0_amd64_linux_lib_go(SB),NOSPLIT,$0

0 commit comments

Comments
 (0)