]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: save g register during arm64 race detector callbacks
authorKeith Randall <khr@google.com>
Thu, 17 Oct 2019 21:37:55 +0000 (14:37 -0700)
committerKeith Randall <khr@golang.org>
Thu, 17 Oct 2019 21:58:45 +0000 (21:58 +0000)
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 <bradfitz@golang.org>
src/runtime/race_arm64.s

index 48c719aa36fdd05f104e1f2b34254007adf27bf1..00a67e86021b2ec2aa6f25b02bfcd03c85645991 100644 (file)
@@ -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