From ae85ae5db2d3b6a3dfb75ade74e0f11234375594 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Tue, 16 Apr 2019 08:52:42 +0200 Subject: [PATCH] runtime: avoid getg in preinit on Android sigaction is called as part of library mode initializers (_rt0_*_lib). Sigaction in turn calls getg, but on Android the TLS offset for g has not been initialized and getg might return garbage. Add a check for initialization before calling getg. Fixes the golang.org/x/mobile/bind/java tests on amd64 and 386. Fixes #31476 Change-Id: Id2c41fdc983239eca039b49a54b8853c5669d127 Reviewed-on: https://go-review.googlesource.com/c/go/+/172158 Reviewed-by: Ian Lance Taylor --- src/runtime/cgo_sigaction.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/runtime/cgo_sigaction.go b/src/runtime/cgo_sigaction.go index 3ef6800cd9..bc5e0786d9 100644 --- a/src/runtime/cgo_sigaction.go +++ b/src/runtime/cgo_sigaction.go @@ -39,7 +39,10 @@ func sigaction(sig uint32, new, old *sigactiont) { var ret int32 - g := getg() + var g *g + if mainStarted { + g = getg() + } sp := uintptr(unsafe.Pointer(&sig)) switch { case g == nil: -- 2.51.0