aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/sys_netbsd_arm64.s
diff options
context:
space:
mode:
authorBenny Siegert <bsiegert@gmail.com>2020-09-26 19:40:17 +0000
committerBenny Siegert <bsiegert@gmail.com>2020-09-28 06:01:37 +0000
commit8ab020adb27089fa207d015f2f69600ef3d1d307 (patch)
tree15f89d2d7a3a34fac87273eb767a5f857616ec0f /src/runtime/sys_netbsd_arm64.s
parent72a9dec156408a87548deb920a67b8bf787062db (diff)
downloadgo-8ab020adb27089fa207d015f2f69600ef3d1d307.tar.gz
go-8ab020adb27089fa207d015f2f69600ef3d1d307.zip
runtime: netbsd-arm64 fixes
Add missing declaration of crosscall1. Fix stack alignment for pipe2 return value. Work around kernel clobbering of r28 on aarch64 by reloading from ucontext. https://nxr.netbsd.org/xref/src/sys/arch/aarch64/aarch64/sig_machdep.c#104 Update #30824 Change-Id: I7f9472939f4c02953f8c207308610118f5d3c54c Reviewed-on: https://go-review.googlesource.com/c/go/+/257645 Reviewed-by: Ian Lance Taylor <iant@golang.org> Trust: Benny Siegert <bsiegert@gmail.com>
Diffstat (limited to 'src/runtime/sys_netbsd_arm64.s')
-rw-r--r--src/runtime/sys_netbsd_arm64.s11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/runtime/sys_netbsd_arm64.s b/src/runtime/sys_netbsd_arm64.s
index e70be0fa74..f19a8b78f6 100644
--- a/src/runtime/sys_netbsd_arm64.s
+++ b/src/runtime/sys_netbsd_arm64.s
@@ -169,11 +169,12 @@ pipeok:
// func pipe2(flags int32) (r, w int32, errno int32)
TEXT runtimeĀ·pipe2(SB),NOSPLIT|NOFRAME,$0-20
- ADD $8, RSP, R0
+ ADD $16, RSP, R0
MOVW flags+0(FP), R1
SVC $SYS_pipe2
- BCC 2(PC)
+ BCC pipe2ok
NEG R0, R0
+pipe2ok:
MOVW R0, errno+16(FP)
RET
@@ -319,6 +320,12 @@ TEXT runtimeĀ·sigtramp(SB),NOSPLIT,$192
MOVD R26, 8*11(RSP)
MOVD R27, 8*12(RSP)
MOVD g, 8*13(RSP)
+ // Unclobber g for now (kernel uses it as ucontext ptr)
+ // See https://github.com/golang/go/issues/30824#issuecomment-492772426
+ // This is only correct in the non-cgo case.
+ // XXX should use lwp_getprivate as suggested.
+ // 8*36 is ucontext.uc_mcontext.__gregs[_REG_X28]
+ MOVD 8*36(g), g
MOVD R29, 8*14(RSP)
FMOVD F8, 8*15(RSP)
FMOVD F9, 8*16(RSP)