From 8ab020adb27089fa207d015f2f69600ef3d1d307 Mon Sep 17 00:00:00 2001 From: Benny Siegert Date: Sat, 26 Sep 2020 19:40:17 +0000 Subject: [PATCH] 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 Trust: Benny Siegert --- src/runtime/cgo/gcc_netbsd_arm64.c | 2 ++ src/runtime/sys_netbsd_arm64.s | 11 +++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/runtime/cgo/gcc_netbsd_arm64.c b/src/runtime/cgo/gcc_netbsd_arm64.c index b29fab0f8c..694116ce70 100644 --- a/src/runtime/cgo/gcc_netbsd_arm64.c +++ b/src/runtime/cgo/gcc_netbsd_arm64.c @@ -53,6 +53,8 @@ _cgo_sys_thread_start(ThreadStart *ts) } } +extern void crosscall1(void (*fn)(void), void (*setg_gcc)(void*), void *g); + static void* threadentry(void *v) { 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)