]> Cypherpunks repositories - gostls13.git/commit
cmd/internal/obj/s390x: mark unsafe points
authorCherry Zhang <cherryyz@google.com>
Wed, 30 Oct 2019 00:40:26 +0000 (20:40 -0400)
committerCherry Zhang <cherryyz@google.com>
Thu, 7 Nov 2019 20:34:27 +0000 (20:34 +0000)
commit4751db93ef23c87c0fa2f06433555b7084f339bd
treeeeaae78bd24959bc80c65fe006c40292ee208452
parent689f6f77f0d54b597ebc82e9bc4a8e1a59bce04d
cmd/internal/obj/s390x: mark unsafe points

For async preemption, we will be using REGTMP as a temporary
register in injected call on S390X, which will clobber it. So any
code that uses REGTMP is not safe for async preemption.

In the assembler backend, we expand a Prog to multiple machine
instructions and use REGTMP as a temporary register if necessary.
These need to be marked unsafe. Unlike ARM64 and MIPS,
instructions on S390X are variable length so we don't use the
length as a condition. Instead, we set a bit on the Prog whenever
REGTMP is used.

Change-Id: Ie5d14068a950f4c7cea51dff2c4a8bdc19ec9348
Reviewed-on: https://go-review.googlesource.com/c/go/+/204105
Run-TryBot: Cherry Zhang <cherryyz@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
src/cmd/internal/obj/s390x/a.out.go
src/cmd/internal/obj/s390x/asmz.go
src/cmd/internal/obj/s390x/objz.go