diff options
author | Ben Shi <powerman1st@163.com> | 2019-06-25 10:38:21 +0000 |
---|---|---|
committer | Ben Shi <powerman1st@163.com> | 2019-10-26 04:00:03 +0000 |
commit | 65a1e242094fe39c1349c7b7b19d64413b696a8c (patch) | |
tree | 59247a8407164e585207a9ae7f3ce67bbf7f8821 /src/runtime/sys_netbsd_arm.s | |
parent | 8dc1a158e460d7fdaca3c9317405e7c0dca6e443 (diff) | |
download | go-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.s | 11 |
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 |