From: Elias Naur Date: Tue, 16 Apr 2019 06:52:42 +0000 (+0200) Subject: runtime: avoid getg in preinit on Android X-Git-Tag: go1.13beta1~681 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=ae85ae5db2d3b6a3dfb75ade74e0f11234375594;p=gostls13.git 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 --- 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: