]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: tricky replacements of _g_ in signal_windows.go
authorMichael Pratt <mpratt@google.com>
Wed, 20 Jul 2022 15:38:29 +0000 (11:38 -0400)
committerMichael Pratt <mpratt@google.com>
Tue, 2 Aug 2022 18:51:32 +0000 (18:51 +0000)
winthrow is always called on g0.

Change-Id: Ia23276a5bd545993faf4d75368c171f6ea7a3034
Reviewed-on: https://go-review.googlesource.com/c/go/+/418581
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Michael Pratt <mpratt@google.com>
Reviewed-by: Austin Clements <austin@google.com>
src/runtime/signal_windows.go

index f732d1d5c0e08b4cbf5f146a41306efc2bdedcb8..b20cac8a8bec0c575537adc0ee2df98b7b4d9ff1 100644 (file)
@@ -199,9 +199,10 @@ func lastcontinuehandler(info *exceptionrecord, r *context, gp *g) int32 {
        return 0 // not reached
 }
 
+// Always called on g0. gp is the G where the exception occurred.
 //go:nosplit
 func winthrow(info *exceptionrecord, r *context, gp *g) {
-       _g_ := getg()
+       g0 := getg()
 
        if panicking != 0 { // traceback already printed
                exit(2)
@@ -211,23 +212,23 @@ func winthrow(info *exceptionrecord, r *context, gp *g) {
        // In case we're handling a g0 stack overflow, blow away the
        // g0 stack bounds so we have room to print the traceback. If
        // this somehow overflows the stack, the OS will trap it.
-       _g_.stack.lo = 0
-       _g_.stackguard0 = _g_.stack.lo + _StackGuard
-       _g_.stackguard1 = _g_.stackguard0
+       g0.stack.lo = 0
+       g0.stackguard0 = g0.stack.lo + _StackGuard
+       g0.stackguard1 = g0.stackguard0
 
        print("Exception ", hex(info.exceptioncode), " ", hex(info.exceptioninformation[0]), " ", hex(info.exceptioninformation[1]), " ", hex(r.ip()), "\n")
 
        print("PC=", hex(r.ip()), "\n")
-       if _g_.m.incgo && gp == _g_.m.g0 && _g_.m.curg != nil {
+       if g0.m.incgo && gp == g0.m.g0 && g0.m.curg != nil {
                if iscgo {
                        print("signal arrived during external code execution\n")
                }
-               gp = _g_.m.curg
+               gp = g0.m.curg
        }
        print("\n")
 
-       _g_.m.throwing = throwTypeRuntime
-       _g_.m.caughtsig.set(gp)
+       g0.m.throwing = throwTypeRuntime
+       g0.m.caughtsig.set(gp)
 
        level, _, docrash := gotraceback()
        if level > 0 {