mirror of
https://github.com/golang/go
synced 2024-11-12 01:50:22 -07:00
runtime: enable async preemption on darwin/arm64
The problem should be fixed by the previous CL. Reenable async preemption on darwin/arm64. Updates #35439. Change-Id: I93e8c4702b4d8fe6abaa6fc9c27def5c8aed1b59 Reviewed-on: https://go-review.googlesource.com/c/go/+/206419 Reviewed-by: Keith Randall <khr@golang.org>
This commit is contained in:
parent
13fb147e60
commit
995ade86e3
@ -342,6 +342,12 @@ func genARM64() {
|
||||
p("MOVD R29, -8(RSP)") // save frame pointer (only used on Linux)
|
||||
p("SUB $8, RSP, R29") // set up new frame pointer
|
||||
p("#endif")
|
||||
// On darwin, save the LR again after decrementing SP. We run the
|
||||
// signal handler on the G stack (as it doesn't support SA_ONSTACK),
|
||||
// so any writes below SP may be clobbered.
|
||||
p("#ifdef GOOS_darwin")
|
||||
p("MOVD R30, (RSP)")
|
||||
p("#endif")
|
||||
|
||||
l.save()
|
||||
p("CALL ·asyncPreempt2(SB)")
|
||||
|
@ -10,6 +10,9 @@ TEXT ·asyncPreempt(SB),NOSPLIT|NOFRAME,$0-0
|
||||
MOVD R29, -8(RSP)
|
||||
SUB $8, RSP, R29
|
||||
#endif
|
||||
#ifdef GOOS_darwin
|
||||
MOVD R30, (RSP)
|
||||
#endif
|
||||
MOVD R0, 8(RSP)
|
||||
MOVD R1, 16(RSP)
|
||||
MOVD R2, 24(RSP)
|
||||
|
@ -79,9 +79,7 @@ func (c *sigctxt) preparePanic(sig uint32, gp *g) {
|
||||
c.set_pc(uint64(funcPC(sigpanic)))
|
||||
}
|
||||
|
||||
// TODO(issue 35439): enabling async preemption causes failures on darwin/arm64.
|
||||
// Disable for now.
|
||||
const pushCallSupported = GOOS != "darwin"
|
||||
const pushCallSupported = true
|
||||
|
||||
func (c *sigctxt) pushCall(targetPC uintptr) {
|
||||
// Push the LR to stack, as we'll clobber it in order to
|
||||
|
Loading…
Reference in New Issue
Block a user