1
0
mirror of https://github.com/golang/go synced 2024-11-17 03:04:44 -07:00

runtime: call cgocallbackg indirectly on PPC64

This is CL 312669, for PPC64.

cgocallback calls cgocallbackg after switching the stack. Call it
indirectly to bypass the linker's nosplit check. The nosplit check
fails after CL 351271, which removes ABI aliases. It would have
been failing before but the linker's nosplit check didn't resolve
ABI alias (it should) so it didn't catch that. Removing the ABI
aliases exposes it. For this partuclar case it is benign as there
is actually a stack switch in between.

Should fix PPC64 build.

Change-Id: I49617aea55270663a9ee4692c54c070c5ab85470
Reviewed-on: https://go-review.googlesource.com/c/go/+/351469
Trust: Cherry Mui <cherryyz@google.com>
Run-TryBot: Cherry Mui <cherryyz@google.com>
Reviewed-by: Than McIntosh <thanm@google.com>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
This commit is contained in:
Cherry Mui 2021-09-22 10:16:06 -04:00
parent dc5b1d31c8
commit 91c2318e67

View File

@ -688,7 +688,10 @@ havem:
MOVD R5, FIXED_FRAME+0(R1)
MOVD R6, FIXED_FRAME+8(R1)
MOVD R7, FIXED_FRAME+16(R1)
BL runtime·cgocallbackg(SB)
MOVD $runtime·cgocallbackg(SB), R12
MOVD R12, CTR
CALL (CTR) // indirect call to bypass nosplit check. We're on a different stack now.
// Restore g->sched (== m->curg->sched) from saved values.
MOVD 0(R1), R5