Commit ae85ae5d authored by Elias Naur's avatar Elias Naur

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/+/172158Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
parent 460f9c60
...@@ -39,7 +39,10 @@ func sigaction(sig uint32, new, old *sigactiont) { ...@@ -39,7 +39,10 @@ func sigaction(sig uint32, new, old *sigactiont) {
var ret int32 var ret int32
g := getg() var g *g
if mainStarted {
g = getg()
}
sp := uintptr(unsafe.Pointer(&sig)) sp := uintptr(unsafe.Pointer(&sig))
switch { switch {
case g == nil: case g == nil:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment