Commit fb05264f authored by Cherry Zhang's avatar Cherry Zhang

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/+/204441Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
parent c3cef0bf
...@@ -394,6 +394,7 @@ func sigtrampgo(sig uint32, info *siginfo, ctx unsafe.Pointer) { ...@@ -394,6 +394,7 @@ func sigtrampgo(sig uint32, info *siginfo, ctx unsafe.Pointer) {
} }
c := &sigctxt{info, ctx} c := &sigctxt{info, ctx}
g := sigFetchG(c) g := sigFetchG(c)
setg(g)
if g == nil { if g == nil {
if sig == _SIGPROF { if sig == _SIGPROF {
sigprofNonGoPC(c.sigpc()) sigprofNonGoPC(c.sigpc())
......
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