diff options
author | Cherry Zhang <cherryyz@google.com> | 2021-02-02 18:25:39 -0500 |
---|---|---|
committer | Cherry Zhang <cherryyz@google.com> | 2021-02-05 17:34:54 +0000 |
commit | 946351d5a27d7dc5550f579ddfec926790903fc5 (patch) | |
tree | 3b3a4f26a5b76cce8daf7b5a66099285ceee3633 | |
parent | 397a46a10a2cc8557e965af269915909cb5c0a80 (diff) | |
download | go-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.s | 3 |
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. |