diff options
author | Benny Siegert <bsiegert@gmail.com> | 2020-09-26 19:40:17 +0000 |
---|---|---|
committer | Benny Siegert <bsiegert@gmail.com> | 2020-09-28 06:01:37 +0000 |
commit | 8ab020adb27089fa207d015f2f69600ef3d1d307 (patch) | |
tree | 15f89d2d7a3a34fac87273eb767a5f857616ec0f /src/runtime/sys_netbsd_arm64.s | |
parent | 72a9dec156408a87548deb920a67b8bf787062db (diff) | |
download | go-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.s | 11 |
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) |