mirror of
https://github.com/golang/go
synced 2024-09-28 21:34:30 -06:00
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 does not clobber R0 through R17 (except special registers),
|
||||
// but may clobber any other register, *including* R31.
|
||||
TEXT gcWriteBarrier<>(SB),NOSPLIT,$112
|
||||
TEXT gcWriteBarrier<>(SB),NOSPLIT,$120
|
||||
// The standard prologue clobbers R31.
|
||||
// We use R18, R19, and R31 as scratch registers.
|
||||
retry:
|
||||
@ -987,6 +987,7 @@ flush:
|
||||
MOVD R15, (FIXED_FRAME+88)(R1)
|
||||
MOVD R16, (FIXED_FRAME+96)(R1)
|
||||
MOVD R17, (FIXED_FRAME+104)(R1)
|
||||
MOVD R29, (FIXED_FRAME+112)(R1)
|
||||
|
||||
CALL runtime·wbBufFlush(SB)
|
||||
|
||||
@ -1004,6 +1005,7 @@ flush:
|
||||
MOVD (FIXED_FRAME+88)(R1), R15
|
||||
MOVD (FIXED_FRAME+96)(R1), R16
|
||||
MOVD (FIXED_FRAME+104)(R1), R17
|
||||
MOVD (FIXED_FRAME+112)(R1), R29
|
||||
JMP retry
|
||||
|
||||
TEXT runtime·gcWriteBarrier1<ABIInternal>(SB),NOSPLIT,$0
|
||||
|
Loading…
Reference in New Issue
Block a user