aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/asm_arm64.s
diff options
context:
space:
mode:
authorCherry Mui <cherryyz@google.com>2021-06-02 19:43:28 -0400
committerCherry Mui <cherryyz@google.com>2021-06-03 16:28:28 +0000
commit3de49868526d5bfae2f9bda8be1a60c022cf3363 (patch)
tree2477a00c33247014d54d9f0ae03843ca2843956a /src/runtime/asm_arm64.s
parent5a40fab19fd615aa879e8f499a63e31d98257886 (diff)
downloadgo-3de49868526d5bfae2f9bda8be1a60c022cf3363.tar.xz
[dev.typeparams] runtime: call cgocallbackg indirectly on ARM64
This is CL 312669, for ARM64. cgocallback calls cgocallbackg after switching the stack. Call it indirectly to bypass the linker's nosplit check. In particular, this avoids a nosplit stack overflow on Windows when register ABI is enabled. Change-Id: I7054a750fb0ec2579d46004f94b46b6f7b9e3a21 Reviewed-on: https://go-review.googlesource.com/c/go/+/324734 Trust: Cherry Mui <cherryyz@google.com> Run-TryBot: Cherry Mui <cherryyz@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Michael Knyszek <mknyszek@google.com>
Diffstat (limited to 'src/runtime/asm_arm64.s')
-rw-r--r--src/runtime/asm_arm64.s3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/runtime/asm_arm64.s b/src/runtime/asm_arm64.s
index 4babcc7fcb..be4313d35d 100644
--- a/src/runtime/asm_arm64.s
+++ b/src/runtime/asm_arm64.s
@@ -1196,7 +1196,8 @@ havem:
MOVD R1, 8(RSP)
MOVD R2, 16(RSP)
MOVD R3, 24(RSP)
- BL runtime·cgocallbackg(SB)
+ MOVD $runtime·cgocallbackg(SB), R0
+ CALL (R0) // indirect call to bypass nosplit check. We're on a different stack now.
// Restore g->sched (== m->curg->sched) from saved values.
MOVD 0(RSP), R5