runtime: setg after sigFetchG
In the normal case, sigFetchG just returns the G register. But in
the case that sigFetchG fetches the G from somewhere else, the G
register still holding an invalid value. Setg here to make sure
they match.
This is particularly useful because setGsignalStack, called by
adjustSignalStack from sigtrampgo before setg to gsignal,
accesses the G register.
Should fix #35249.
Change-Id: I64c85143cb05cdb2ecca7f9936dbd8bfec186c2d
Reviewed-on: https://go-review.googlesource.com/c/go/+/204441
Reviewed-by: Ian Lance Taylor <iant@golang.org>
diff --git a/src/runtime/signal_unix.go b/src/runtime/signal_unix.go
index 5e4361e..6563186 100644
--- a/src/runtime/signal_unix.go
+++ b/src/runtime/signal_unix.go
@@ -394,6 +394,7 @@
}
c := &sigctxt{info, ctx}
g := sigFetchG(c)
+ setg(g)
if g == nil {
if sig == _SIGPROF {
sigprofNonGoPC(c.sigpc())