]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: use asmcgocall_no_g when calling sigprocmask on openbsd
authorJoel Sing <joel@sing.id.au>
Sun, 30 May 2021 14:18:54 +0000 (00:18 +1000)
committerJoel Sing <joel@sing.id.au>
Sun, 22 Aug 2021 13:54:24 +0000 (13:54 +0000)
sigprocmask is called from sigsave, which is called from needm. As such,
sigprocmask has to be able to run with no g. For some reason we do not
currently trip this on current libc platforms, but we do hit it on
openbsd/mips64 with external linking.

Updates #36435

Change-Id: I4dfae924245c5f68cc012755d6485939014898a3
Reviewed-on: https://go-review.googlesource.com/c/go/+/334879
Trust: Joel Sing <joel@sing.id.au>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/runtime/sys_openbsd2.go

index 190ee4716a6c5ab69d8050ce6183a1f14c759e49..23e0b195fd1c1150073ed7a8d438b9318e408b5f 100644 (file)
@@ -199,7 +199,9 @@ func sigaction_trampoline()
 //go:nosplit
 //go:cgo_unsafe_args
 func sigprocmask(how uint32, new *sigset, old *sigset) {
-       libcCall(unsafe.Pointer(abi.FuncPCABI0(sigprocmask_trampoline)), unsafe.Pointer(&how))
+       // sigprocmask is called from sigsave, which is called from needm.
+       // As such, we have to be able to run with no g here.
+       asmcgocall_no_g(unsafe.Pointer(abi.FuncPCABI0(sigprocmask_trampoline)), unsafe.Pointer(&how))
 }
 func sigprocmask_trampoline()