aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/sys_netbsd_arm.s
diff options
context:
space:
mode:
authorBen Shi <powerman1st@163.com>2019-06-25 10:38:21 +0000
committerBen Shi <powerman1st@163.com>2019-10-26 04:00:03 +0000
commit65a1e242094fe39c1349c7b7b19d64413b696a8c (patch)
tree59247a8407164e585207a9ae7f3ce67bbf7f8821 /src/runtime/sys_netbsd_arm.s
parent8dc1a158e460d7fdaca3c9317405e7c0dca6e443 (diff)
downloadgo-65a1e242094fe39c1349c7b7b19d64413b696a8c.tar.gz
go-65a1e242094fe39c1349c7b7b19d64413b696a8c.zip
runtime: save/restore callee-save registers in arm's sigtramp
ARM's R4-R8 & R10-R11 are callee-save registers, and R9 may be callee-save or not. This CL saves them at the beginning of sigtramp and restores them in the end. fixes #32738 Change-Id: Ib7eb80836bc074e2e6a46ae4602ba8a3b96c5456 Reviewed-on: https://go-review.googlesource.com/c/go/+/183777 Reviewed-by: Cherry Zhang <cherryyz@google.com>
Diffstat (limited to 'src/runtime/sys_netbsd_arm.s')
-rw-r--r--src/runtime/sys_netbsd_arm.s11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/runtime/sys_netbsd_arm.s b/src/runtime/sys_netbsd_arm.s
index 64428bee4d..678dea57c6 100644
--- a/src/runtime/sys_netbsd_arm.s
+++ b/src/runtime/sys_netbsd_arm.s
@@ -300,7 +300,11 @@ TEXT runtime·sigfwd(SB),NOSPLIT,$0-16
MOVW R4, R13
RET
-TEXT runtime·sigtramp(SB),NOSPLIT,$12
+TEXT runtime·sigtramp(SB),NOSPLIT,$0
+ // Reserve space for callee-save registers and arguments.
+ MOVM.DB.W [R4-R11], (R13)
+ SUB $16, R13
+
// this might be called in external code context,
// where g is not set.
// first save R0, because runtime·load_g will clobber it
@@ -312,6 +316,11 @@ TEXT runtime·sigtramp(SB),NOSPLIT,$12
MOVW R1, 8(R13)
MOVW R2, 12(R13)
BL runtime·sigtrampgo(SB)
+
+ // Restore callee-save registers.
+ ADD $16, R13
+ MOVM.IA.W (R13), [R4-R11]
+
RET
TEXT runtime·mmap(SB),NOSPLIT,$12