]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: avoid getg in preinit on Android
authorElias Naur <mail@eliasnaur.com>
Tue, 16 Apr 2019 06:52:42 +0000 (08:52 +0200)
committerElias Naur <mail@eliasnaur.com>
Tue, 16 Apr 2019 15:09:25 +0000 (15:09 +0000)
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 <iant@golang.org>
src/runtime/cgo_sigaction.go

index 3ef6800cd98475f376c0bbd65ea372331bf2fcb5..bc5e0786d961be889632307440b8287bff377c6b 100644 (file)
@@ -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: