mirror of https://github.com/golang/go.git
runtime: preserve R29 in the write barrier flush path on ppc64
Surprisingly, it usually survived the call to flush a write barrier. Usually. Fixes #60368 Change-Id: I4792a57738e5829c79baebae4d13b62abe9526b6 Reviewed-on: https://go-review.googlesource.com/c/go/+/499679 Run-TryBot: Cherry Mui <cherryyz@google.com> Reviewed-by: Cherry Mui <cherryyz@google.com> Reviewed-by: Keith Randall <khr@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org>
This commit is contained in:
parent
9552a1122f
commit
7ecd2212e1
|
|
@ -946,7 +946,7 @@ TEXT ·checkASM(SB),NOSPLIT,$0-1
|
||||||
// It clobbers condition codes.
|
// It clobbers condition codes.
|
||||||
// It does not clobber R0 through R17 (except special registers),
|
// It does not clobber R0 through R17 (except special registers),
|
||||||
// but may clobber any other register, *including* R31.
|
// but may clobber any other register, *including* R31.
|
||||||
TEXT gcWriteBarrier<>(SB),NOSPLIT,$112
|
TEXT gcWriteBarrier<>(SB),NOSPLIT,$120
|
||||||
// The standard prologue clobbers R31.
|
// The standard prologue clobbers R31.
|
||||||
// We use R18, R19, and R31 as scratch registers.
|
// We use R18, R19, and R31 as scratch registers.
|
||||||
retry:
|
retry:
|
||||||
|
|
@ -987,6 +987,7 @@ flush:
|
||||||
MOVD R15, (FIXED_FRAME+88)(R1)
|
MOVD R15, (FIXED_FRAME+88)(R1)
|
||||||
MOVD R16, (FIXED_FRAME+96)(R1)
|
MOVD R16, (FIXED_FRAME+96)(R1)
|
||||||
MOVD R17, (FIXED_FRAME+104)(R1)
|
MOVD R17, (FIXED_FRAME+104)(R1)
|
||||||
|
MOVD R29, (FIXED_FRAME+112)(R1)
|
||||||
|
|
||||||
CALL runtime·wbBufFlush(SB)
|
CALL runtime·wbBufFlush(SB)
|
||||||
|
|
||||||
|
|
@ -1004,6 +1005,7 @@ flush:
|
||||||
MOVD (FIXED_FRAME+88)(R1), R15
|
MOVD (FIXED_FRAME+88)(R1), R15
|
||||||
MOVD (FIXED_FRAME+96)(R1), R16
|
MOVD (FIXED_FRAME+96)(R1), R16
|
||||||
MOVD (FIXED_FRAME+104)(R1), R17
|
MOVD (FIXED_FRAME+104)(R1), R17
|
||||||
|
MOVD (FIXED_FRAME+112)(R1), R29
|
||||||
JMP retry
|
JMP retry
|
||||||
|
|
||||||
TEXT runtime·gcWriteBarrier1<ABIInternal>(SB),NOSPLIT,$0
|
TEXT runtime·gcWriteBarrier1<ABIInternal>(SB),NOSPLIT,$0
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue