]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.regabi] runtime: zero X15 in racecall
authorCherry Zhang <cherryyz@google.com>
Tue, 2 Feb 2021 23:25:39 +0000 (18:25 -0500)
committerCherry Zhang <cherryyz@google.com>
Fri, 5 Feb 2021 17:34:54 +0000 (17:34 +0000)
racecall can be called in ABIInternal context (e.g. raceread
calling racecalladdr calling racecall) without wrapper. racecall
calls C code, which doesn't preserve our special registers. Set
them explicitly in racecall upon returning from C.

Change-Id: Ic990479c1fca6bb8a3b151325c7a89be8331a530
Reviewed-on: https://go-review.googlesource.com/c/go/+/289709
Trust: Cherry Zhang <cherryyz@google.com>
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Reviewed-by: Jeremy Faller <jeremy@golang.org>
src/runtime/race_amd64.s

index cf0a51462fd550cba0ee7edf0fc52a39e8cac09e..fd41b5690a64c514993611a3813515488f134070 100644 (file)
@@ -412,6 +412,9 @@ call:
        ANDQ    $~15, SP        // alignment for gcc ABI
        CALL    AX
        MOVQ    R12, SP
+       // Back to Go world, set special registers.
+       // The g register (R14) is preserved in C.
+       XORPS   X15, X15
        RET
 
 // C->Go callback thunk that allows to call runtime·racesymbolize from C code.