aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCherry Zhang <cherryyz@google.com>2021-02-02 18:25:39 -0500
committerCherry Zhang <cherryyz@google.com>2021-02-05 17:34:54 +0000
commit946351d5a27d7dc5550f579ddfec926790903fc5 (patch)
tree3b3a4f26a5b76cce8daf7b5a66099285ceee3633
parent397a46a10a2cc8557e965af269915909cb5c0a80 (diff)
downloadgo-946351d5a27d7dc5550f579ddfec926790903fc5.tar.gz
go-946351d5a27d7dc5550f579ddfec926790903fc5.zip
[dev.regabi] runtime: zero X15 in racecall
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>
-rw-r--r--src/runtime/race_amd64.s3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/runtime/race_amd64.s b/src/runtime/race_amd64.s
index cf0a51462f..fd41b5690a 100644
--- a/src/runtime/race_amd64.s
+++ b/src/runtime/race_amd64.s
@@ -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.