From df901bce5ed71132f5837b513663fec889d82731 Mon Sep 17 00:00:00 2001 From: Ben Shi Date: Mon, 24 Jun 2019 02:17:40 +0000 Subject: [PATCH] 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 TryBot-Result: Gobot Gobot Reviewed-by: Ian Lance Taylor --- src/runtime/sys_darwin_arm.s | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/runtime/sys_darwin_arm.s b/src/runtime/sys_darwin_arm.s index 82470bc4df..b1c22b3242 100644 --- a/src/runtime/sys_darwin_arm.s +++ b/src/runtime/sys_darwin_arm.s @@ -160,14 +160,14 @@ TEXT runtime·sigfwd(SB),NOSPLIT,$0-16 TEXT runtime·sigtramp(SB),NOSPLIT,$0 // Reserve space for callee-save registers and arguments. - SUB $36, R13 + SUB $40, R13 - MOVW R4, 12(R13) - MOVW R5, 16(R13) - MOVW R6, 20(R13) - MOVW R7, 24(R13) - MOVW R8, 28(R13) - MOVW R11, 32(R13) + MOVW R4, 16(R13) + MOVW R5, 20(R13) + MOVW R6, 24(R13) + MOVW R7, 28(R13) + MOVW R8, 32(R13) + MOVW R11, 36(R13) // Save arguments. MOVW R0, 4(R13) // sig @@ -216,14 +216,14 @@ nog: MOVW R5, R13 // Restore callee-save registers. - MOVW 12(R13), R4 - MOVW 16(R13), R5 - MOVW 20(R13), R6 - MOVW 24(R13), R7 - MOVW 28(R13), R8 - MOVW 32(R13), R11 - - ADD $36, R13 + MOVW 16(R13), R4 + MOVW 20(R13), R5 + MOVW 24(R13), R6 + MOVW 28(R13), R7 + MOVW 32(R13), R8 + MOVW 36(R13), R11 + + ADD $40, R13 RET -- 2.50.0