Skip to content

Commit df901bc

Browse files
committed
runtime: fix a register save/restore bug in sigtramp of arm-darwin
In sigtramp of sys_darwin_arm.s, the callee-save register R4 is saved to the stack, but later R2 is also saved to the save position. That CL fixes the unexpected lost of the value in R4. fixes #32744 Change-Id: Ifaeb99f11e4abf0c79bec9da67e0db97c358010c Reviewed-on: https://go-review.googlesource.com/c/go/+/183517 Run-TryBot: Ben Shi <[email protected]> TryBot-Result: Gobot Gobot <[email protected]> Reviewed-by: Ian Lance Taylor <[email protected]>
1 parent d1d9ad5 commit df901bc

File tree

1 file changed

+15
-15
lines changed

1 file changed

+15
-15
lines changed

src/runtime/sys_darwin_arm.s

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -160,14 +160,14 @@ TEXT runtime·sigfwd(SB),NOSPLIT,$0-16
160160

161161
TEXT runtime·sigtramp(SB),NOSPLIT,$0
162162
// Reserve space for callee-save registers and arguments.
163-
SUB $36, R13
163+
SUB $40, R13
164164

165-
MOVW R4, 12(R13)
166-
MOVW R5, 16(R13)
167-
MOVW R6, 20(R13)
168-
MOVW R7, 24(R13)
169-
MOVW R8, 28(R13)
170-
MOVW R11, 32(R13)
165+
MOVW R4, 16(R13)
166+
MOVW R5, 20(R13)
167+
MOVW R6, 24(R13)
168+
MOVW R7, 28(R13)
169+
MOVW R8, 32(R13)
170+
MOVW R11, 36(R13)
171171

172172
// Save arguments.
173173
MOVW R0, 4(R13) // sig
@@ -216,14 +216,14 @@ nog:
216216
MOVW R5, R13
217217

218218
// Restore callee-save registers.
219-
MOVW 12(R13), R4
220-
MOVW 16(R13), R5
221-
MOVW 20(R13), R6
222-
MOVW 24(R13), R7
223-
MOVW 28(R13), R8
224-
MOVW 32(R13), R11
225-
226-
ADD $36, R13
219+
MOVW 16(R13), R4
220+
MOVW 20(R13), R5
221+
MOVW 24(R13), R6
222+
MOVW 28(R13), R7
223+
MOVW 32(R13), R8
224+
MOVW 36(R13), R11
225+
226+
ADD $40, R13
227227

228228
RET
229229

0 commit comments

Comments
 (0)