From: Keith Randall Date: Thu, 17 Oct 2019 21:37:55 +0000 (-0700) Subject: runtime: save g register during arm64 race detector callbacks X-Git-Tag: go1.14beta1~705 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=ab81efa3dcac8bc9dca9a051ce3f665cfaeb6dc3;p=gostls13.git runtime: save g register during arm64 race detector callbacks The race detector C code expects the g register (aka R28) to be preserved per the C calling convention. Make sure we save/restore it. Once this is in we can revert the O3 -> O1 change to racebuild. Change-Id: Ia785b2717c136f565d45bed283e87b744e35c62d Reviewed-on: https://go-review.googlesource.com/c/go/+/201744 Reviewed-by: Brad Fitzpatrick --- diff --git a/src/runtime/race_arm64.s b/src/runtime/race_arm64.s index 48c719aa36..00a67e8602 100644 --- a/src/runtime/race_arm64.s +++ b/src/runtime/race_arm64.s @@ -434,13 +434,13 @@ TEXT runtime·racecallbackthunk(SB), NOSPLIT|NOFRAME, $0 rest: // Save callee-saved registers (Go code won't respect that). // 8(RSP) and 16(RSP) are for args passed through racecallback - SUB $96, RSP + SUB $112, RSP MOVD LR, 0(RSP) STP (R19, R20), 24(RSP) STP (R21, R22), 40(RSP) STP (R23, R24), 56(RSP) STP (R25, R26), 72(RSP) - MOVD R27, 88(RSP) + STP (R27, g), 88(RSP) // Set g = g0. // load_g will clobber R0, Save R0 MOVD R0, R13 @@ -463,8 +463,8 @@ rest: LDP 40(RSP), (R21, R22) LDP 56(RSP), (R23, R24) LDP 72(RSP), (R25, R26) - MOVD 88(RSP), R27 - ADD $96, RSP + LDP 88(RSP), (R27, g) + ADD $112, RSP JMP (LR) // tls_g, g value for each thread in TLS