runtime: stack split at bad time in os/signal with Go 1.25.4 windows 386
Go version
go version go1.25.4 windows/386
Output of go env in your module/workspace:
set AR=ar
set CC=gcc
set CGO_CFLAGS=-O2 -g
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-O2 -g
set CGO_ENABLED=0
set CGO_FFLAGS=-O2 -g
set CGO_LDFLAGS=-O2 -g
set CXX=g++
set GCCGO=gccgo
set GO111MODULE=
set GO386=sse2
set GOARCH=386
set GOAUTH=netrc
set GOBIN=
set GOCACHE=C:\Users\27576\AppData\Local\go-build
set GOCACHEPROG=
set GODEBUG=
set GOENV=C:\Users\27576\AppData\Roaming\go\env
set GOEXE=.exe
set GOEXPERIMENT=
set GOFIPS140=off
set GOFLAGS=
set GOGCCFLAGS=-m32 -fno-caret-diagnostics -Qunused-arguments -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=C:\Users\27576\AppData\Local\Temp\go-build692432680=/tmp/go-build -gno-record-gcc-switches
set GOHOSTARCH=386
set GOHOSTOS=windows
set GOINSECURE=
set GOMOD=NUL
set GOMODCACHE=C:\Users\27576\go\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=C:\Users\27576\go
set GOPRIVATE=
set GOPROXY=https://proxy.golang.org,direct
set GOROOT=C:\go1.25.4.windows-386\go
set GOSUMDB=sum.golang.org
set GOTELEMETRY=local
set GOTELEMETRYDIR=C:\Users\27576\AppData\Roaming\go\telemetry
set GOTMPDIR=
set GOTOOLCHAIN=auto
set GOTOOLDIR=C:\go1.25.4.windows-386\go\pkg\tool\windows_386
set GOVCS=
set GOVERSION=go1.25.4
set GOWORK=
set PKG_CONFIG=pkg-config
What did you do?
main.go
package main
import (
"fmt"
"os"
"os/signal"
"syscall"
)
func main() {
if len(os.Args) < 2 {
fmt.Println("Usage:")
fmt.Println(" " + os.Args[0] + " 1 - Run test1 (memory allocation)")
fmt.Println(" " + os.Args[0] + " 2 - Run test2 (signal handling)")
os.Exit(1)
}
command := os.Args[1]
switch command {
case "1":
fmt.Println("Running test1: Memory Allocation Test")
test1()
case "2":
fmt.Println("Running test2: Signal Handling Test")
test2()
default:
fmt.Printf("Unknown command: %s\n", command)
fmt.Println("Use 1 or 2 to select a test")
os.Exit(1)
}
}
func test1() {
fmt.Println("Allocating 10000 blocks of 1KB each...")
var blocks [][]byte
for i := 0; i < 10000; i++ {
blocks = append(blocks, make([]byte, 1024))
}
fmt.Printf("Allocated %d blocks successfully\n", len(blocks))
blocks = nil
fmt.Println("Test1 completed")
}
func test2() {
fmt.Println("Waiting for signal (Ctrl+C to exit)...")
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
<-c
fmt.Println("\nSignal received, test2 completed")
}
compile and run
go build "-gcflags=all=-N -l" -o debug.exe main.go
What did you see happen?
I'm most concerned about test2, and its error message is as follows:
C:\>debug.exe 2
Running test2: Signal Handling Test
Waiting for signal (Ctrl+C to exit)...
runtime: newstack at runtime.getfp+0x1e sp=0x183ff54 stack=[0x183e000, 0x1840000]
morebuf={pc:0xd6a268 sp:0x183ff58 lr:0x0}
sched={pc:0xd709de sp:0x183ff54 lr:0x0 ctxt:0x0}
runtime.getcallerfp()
C:/go1.25.4.windows-386/go/src/runtime/runtime2.go:1322 +0x8 fp=0x183ff60 sp=0x183ff58 pc=0xd6a268
runtime.entersyscallblock()
C:/go1.25.4.windows-386/go/src/runtime/proc.go:4736 +0x67 fp=0x183ffa0 sp=0x183ff60 pc=0xd88a97
runtime.notetsleepg(0xea3ca0, 0xffffffffffffffff)
C:/go1.25.4.windows-386/go/src/runtime/lock_sema.go:175 +0x36 fp=0x183ffc4 sp=0x183ffa0 pc=0xd25446
os/signal.signal_recv()
C:/go1.25.4.windows-386/go/src/runtime/sigqueue.go:152 +0x39 fp=0x183ffdc sp=0x183ffc4 pc=0xd897f9
os/signal.loop()
C:/go1.25.4.windows-386/go/src/os/signal/signal_unix.go:23 +0x1c fp=0x183fff0 sp=0x183ffdc pc=0xdd0eac
runtime.goexit({})
C:/go1.25.4.windows-386/go/src/runtime/asm_386.s:1386 +0x1 fp=0x183fff4 sp=0x183fff0 pc=0xd8d801
created by os/signal.Notify.func1.1 in goroutine 1
C:/go1.25.4.windows-386/go/src/os/signal/signal.go:152 +0x2d
fatal error: runtime: stack split at bad time
runtime stack:
runtime.throw({0xdf838f, 0x20})
C:/go1.25.4.windows-386/go/src/runtime/panic.go:1094 +0x35 fp=0xcdfdd8 sp=0xcdfdc4 pc=0xd88715
runtime.newstack()
C:/go1.25.4.windows-386/go/src/runtime/stack.go:1048 +0xae3 fp=0xcdfe70 sp=0xcdfdd8 pc=0xd6ea03
runtime.morestack()
C:/go1.25.4.windows-386/go/src/runtime/asm_386.s:481 +0x6c fp=0xcdfe74 sp=0xcdfe70 pc=0xd8c45c
goroutine 7 gp=0x180cd88 m=0 mp=0xe84500 [running]:
runtime.getcallerfp()
C:/go1.25.4.windows-386/go/src/runtime/runtime2.go:1322 +0x8 fp=0x183ff60 sp=0x183ff58 pc=0xd6a268
runtime.entersyscallblock()
C:/go1.25.4.windows-386/go/src/runtime/proc.go:4736 +0x67 fp=0x183ffa0 sp=0x183ff60 pc=0xd88a97
runtime.notetsleepg(0xea3ca0, 0xffffffffffffffff)
C:/go1.25.4.windows-386/go/src/runtime/lock_sema.go:175 +0x36 fp=0x183ffc4 sp=0x183ffa0 pc=0xd25446
os/signal.signal_recv()
C:/go1.25.4.windows-386/go/src/runtime/sigqueue.go:152 +0x39 fp=0x183ffdc sp=0x183ffc4 pc=0xd897f9
os/signal.loop()
C:/go1.25.4.windows-386/go/src/os/signal/signal_unix.go:23 +0x1c fp=0x183fff0 sp=0x183ffdc pc=0xdd0eac
runtime.goexit({})
C:/go1.25.4.windows-386/go/src/runtime/asm_386.s:1386 +0x1 fp=0x183fff4 sp=0x183fff0 pc=0xd8d801
created by os/signal.Notify.func1.1 in goroutine 1
C:/go1.25.4.windows-386/go/src/os/signal/signal.go:152 +0x2d
goroutine 1 gp=0x180c128 m=nil [chan receive]:
runtime.gopark(0xdfcaac, 0x18440b8, 0xe, 0x7, 0x2)
C:/go1.25.4.windows-386/go/src/runtime/proc.go:460 +0xd8 fp=0x1837e24 sp=0x1837e10 pc=0xd88828
runtime.chanrecv(0x1844080, 0x0, 0x1)
C:/go1.25.4.windows-386/go/src/runtime/chan.go:667 +0x32e fp=0x1837e64 sp=0x1837e24 pc=0xd2016e
runtime.chanrecv1(0x1844080, 0x0)
C:/go1.25.4.windows-386/go/src/runtime/chan.go:509 +0x1c fp=0x1837e78 sp=0x1837e64 pc=0xd1fe3c
main.test2()
C:/main.go:49 +0x12f fp=0x1837ee0 sp=0x1837e78 pc=0xdd1a5f
main.main()
C:/main.go:26 +0x449 fp=0x1837fc0 sp=0x1837ee0 pc=0xdd14d9
runtime.main()
C:/go1.25.4.windows-386/go/src/runtime/proc.go:285 +0x248 fp=0x1837ff0 sp=0x1837fc0 pc=0xd58318
runtime.goexit({})
C:/go1.25.4.windows-386/go/src/runtime/asm_386.s:1386 +0x1 fp=0x1837ff4 sp=0x1837ff0 pc=0xd8d801
goroutine 2 gp=0x180c5a8 m=nil [force gc (idle)]:
runtime.gopark(0xdfcc34, 0xe83b20, 0x11, 0xa, 0x1)
C:/go1.25.4.windows-386/go/src/runtime/proc.go:460 +0xd8 fp=0x1833fc8 sp=0x1833fb4 pc=0xd88828
runtime.goparkunlock(0xe83b20, 0x11, 0xa, 0x1)
C:/go1.25.4.windows-386/go/src/runtime/proc.go:466 +0x43 fp=0x1833fdc sp=0x1833fc8 pc=0xd58773
runtime.forcegchelper()
C:/go1.25.4.windows-386/go/src/runtime/proc.go:373 +0xd7 fp=0x1833ff0 sp=0x1833fdc pc=0xd58647
runtime.goexit({})
C:/go1.25.4.windows-386/go/src/runtime/asm_386.s:1386 +0x1 fp=0x1833ff4 sp=0x1833ff0 pc=0xd8d801
created by runtime.init.6 in goroutine 1
C:/go1.25.4.windows-386/go/src/runtime/proc.go:361 +0x21
goroutine 3 gp=0x180c7e8 m=nil [GC sweep wait]:
runtime.gopark(0xdfcc34, 0xe83be0, 0xc, 0x9, 0x1)
C:/go1.25.4.windows-386/go/src/runtime/proc.go:460 +0xd8 fp=0x1835fbc sp=0x1835fa8 pc=0xd88828
runtime.goparkunlock(0xe83be0, 0xc, 0x9, 0x1)
C:/go1.25.4.windows-386/go/src/runtime/proc.go:466 +0x43 fp=0x1835fd0 sp=0x1835fbc pc=0xd58773
runtime.bgsweep(0x18180a0)
C:/go1.25.4.windows-386/go/src/runtime/mgcsweep.go:279 +0xa0 fp=0x1835fe8 sp=0x1835fd0 pc=0xd40a90
runtime.gcenable.gowrap1()
C:/go1.25.4.windows-386/go/src/runtime/mgc.go:212 +0x25 fp=0x1835ff0 sp=0x1835fe8 pc=0xd31ce5
runtime.goexit({})
C:/go1.25.4.windows-386/go/src/runtime/asm_386.s:1386 +0x1 fp=0x1835ff4 sp=0x1835ff0 pc=0xd8d801
created by runtime.gcenable in goroutine 1
C:/go1.25.4.windows-386/go/src/runtime/mgc.go:212 +0x75
goroutine 4 gp=0x180c908 m=nil [GC scavenge wait]:
runtime.gopark(0xdfcc34, 0xe83ce0, 0xd, 0xa, 0x2)
C:/go1.25.4.windows-386/go/src/runtime/proc.go:460 +0xd8 fp=0x1841fa8 sp=0x1841f94 pc=0xd88828
runtime.goparkunlock(0xe83ce0, 0xd, 0xa, 0x2)
C:/go1.25.4.windows-386/go/src/runtime/proc.go:466 +0x43 fp=0x1841fbc sp=0x1841fa8 pc=0xd58773
runtime.(*scavengerState).park(0xe83ce0)
C:/go1.25.4.windows-386/go/src/runtime/mgcscavenge.go:425 +0x50 fp=0x1841fcc sp=0x1841fbc pc=0xd3dda0
runtime.bgscavenge(0x18180a0)
C:/go1.25.4.windows-386/go/src/runtime/mgcscavenge.go:653 +0x49 fp=0x1841fe8 sp=0x1841fcc pc=0xd3e409
runtime.gcenable.gowrap2()
C:/go1.25.4.windows-386/go/src/runtime/mgc.go:213 +0x25 fp=0x1841ff0 sp=0x1841fe8 pc=0xd31ca5
runtime.goexit({})
C:/go1.25.4.windows-386/go/src/runtime/asm_386.s:1386 +0x1 fp=0x1841ff4 sp=0x1841ff0 pc=0xd8d801
created by runtime.gcenable in goroutine 1
C:/go1.25.4.windows-386/go/src/runtime/mgc.go:213 +0xb5
goroutine 5 gp=0x180cb48 m=nil [GOMAXPROCS updater (idle)]:
runtime.gopark(0xdfcc34, 0xe83bb0, 0x12, 0xa, 0x1)
C:/go1.25.4.windows-386/go/src/runtime/proc.go:460 +0xd8 fp=0x1843f98 sp=0x1843f84 pc=0xd88828
runtime.goparkunlock(0xe83bb0, 0x12, 0xa, 0x1)
C:/go1.25.4.windows-386/go/src/runtime/proc.go:466 +0x43 fp=0x1843fac sp=0x1843f98 pc=0xd58773
runtime.updateMaxProcsGoroutine()
C:/go1.25.4.windows-386/go/src/runtime/proc.go:6720 +0xf3 fp=0x1843ff0 sp=0x1843fac pc=0xd65903
runtime.goexit({})
C:/go1.25.4.windows-386/go/src/runtime/asm_386.s:1386 +0x1 fp=0x1843ff4 sp=0x1843ff0 pc=0xd8d801
created by runtime.defaultGOMAXPROCSUpdateEnable in goroutine 1
C:/go1.25.4.windows-386/go/src/runtime/proc.go:6708 +0x3d
goroutine 6 gp=0x180cc68 m=nil [finalizer wait]:
runtime.gopark(0xdfcad4, 0xea3934, 0x10, 0xa, 0x1)
C:/go1.25.4.windows-386/go/src/runtime/proc.go:460 +0xd8 fp=0x183df90 sp=0x183df7c pc=0xd88828
runtime.runFinalizers()
C:/go1.25.4.windows-386/go/src/runtime/mfinal.go:210 +0xf2 fp=0x183dff0 sp=0x183df90 pc=0xd30c62
runtime.goexit({})
C:/go1.25.4.windows-386/go/src/runtime/asm_386.s:1386 +0x1 fp=0x183dff4 sp=0x183dff0 pc=0xd8d801
created by runtime.createfing in goroutine 1
C:/go1.25.4.windows-386/go/src/runtime/mfinal.go:172 +0x5e
C:\>
about test1:
C:\>debug.exe 1
Running test1: Memory Allocation Test
Allocating 10000 blocks of 1KB each...
fatal error: slice bounds out of range
runtime stack:
runtime.throw({0xdf6661, 0x19})
C:/go1.25.4.windows-386/go/src/runtime/panic.go:1094 +0x35 fp=0x59fbf0 sp=0x59fbdc pc=0xd88715
runtime.panicCheck1(0xd503dd, {0xdf6661, 0x19})
C:/go1.25.4.windows-386/go/src/runtime/panic.go:59 +0xaf fp=0x59fc08 sp=0x59fbf0 pc=0xd5426f
runtime.goPanicSliceAlenU(0x3d1, 0x200)
C:/go1.25.4.windows-386/go/src/runtime/panic.go:134 +0x31 fp=0x59fc28 sp=0x59fc08 pc=0xd544b1
runtime.wbBufFlush1(0x102b508)
C:/go1.25.4.windows-386/go/src/runtime/mwbbuf.go:199 +0x2dd fp=0x59fc6c sp=0x59fc28 pc=0xd503dd
runtime.wbBufFlush.func1()
C:/go1.25.4.windows-386/go/src/runtime/mwbbuf.go:181 +0x38 fp=0x59fc78 sp=0x59fc6c pc=0xd84b68
runtime.wbBufFlush()
C:/go1.25.4.windows-386/go/src/runtime/mwbbuf.go:180 +0x48 fp=0x59fc84 sp=0x59fc78 pc=0xd500f8
runtime.gcDrain(0x102be74, 0x2)
C:/go1.25.4.windows-386/go/src/runtime/mgcmark.go:1250 +0x21f fp=0x59fcd8 sp=0x59fc84 pc=0xd38e1f
runtime.gcDrainMarkWorkerDedicated(0x102be74, 0x0)
C:/go1.25.4.windows-386/go/src/runtime/mgcmark.go:1130 +0x38 fp=0x59fce4 sp=0x59fcd8 pc=0xd38ba8
runtime.gcBgMarkWorker.func2()
C:/go1.25.4.windows-386/go/src/runtime/mgc.go:1556 +0x10f fp=0x59fd10 sp=0x59fce4 pc=0xd3452f
runtime.systemstack(0x59fd18)
C:/go1.25.4.windows-386/go/src/runtime/asm_386.s:372 +0x3d fp=0x59fd14 sp=0x59fd10 pc=0xd8c3bd
goroutine 22 gp=0x10865a8 m=0 mp=0xe84500 [GC worker (active)]:
runtime.systemstack_switch()
C:/go1.25.4.windows-386/go/src/runtime/asm_386.s:339 fp=0x1423f88 sp=0x1423f84 pc=0xd8c370
runtime.gcBgMarkWorker(0x1088080)
C:/go1.25.4.windows-386/go/src/runtime/mgc.go:1523 +0x1e8 fp=0x1423fe8 sp=0x1423f88 pc=0xd34138
runtime.gcBgMarkStartWorkers.gowrap1()
C:/go1.25.4.windows-386/go/src/runtime/mgc.go:1373 +0x25 fp=0x1423ff0 sp=0x1423fe8 pc=0xd33f05
runtime.goexit({})
C:/go1.25.4.windows-386/go/src/runtime/asm_386.s:1386 +0x1 fp=0x1423ff4 sp=0x1423ff0 pc=0xd8d801
created by runtime.gcBgMarkStartWorkers in goroutine 1
C:/go1.25.4.windows-386/go/src/runtime/mgc.go:1373 +0x6c
goroutine 1 gp=0x100c128 m=nil [GC assist wait]:
runtime.gopark(0xdfcc34, 0xe84414, 0xb, 0x8, 0x2)
C:/go1.25.4.windows-386/go/src/runtime/proc.go:460 +0xd8 fp=0x1037d64 sp=0x1037d50 pc=0xd88828
runtime.goparkunlock(0xe84414, 0xb, 0x8, 0x2)
C:/go1.25.4.windows-386/go/src/runtime/proc.go:466 +0x43 fp=0x1037d78 sp=0x1037d64 pc=0xd58773
runtime.gcParkAssist()
C:/go1.25.4.windows-386/go/src/runtime/mgcmark.go:774 +0x11c fp=0x1037d94 sp=0x1037d78 pc=0xd37f2c
runtime.gcAssistAlloc(0x100c128)
C:/go1.25.4.windows-386/go/src/runtime/mgcmark.go:614 +0x422 fp=0x1037e10 sp=0x1037d94 pc=0xd37712
runtime.deductAssistCredit(0x400)
C:/go1.25.4.windows-386/go/src/runtime/malloc.go:1712 +0x57 fp=0x1037e18 sp=0x1037e10 pc=0xd28467
runtime.mallocgc(0x400, 0xdde380, 0x1)
C:/go1.25.4.windows-386/go/src/runtime/malloc.go:1048 +0x69 fp=0x1037e34 sp=0x1037e18 pc=0xd87269
runtime.makeslice(0xdde380, 0x400, 0x400)
C:/go1.25.4.windows-386/go/src/runtime/slice.go:116 +0x6e fp=0x1037e4c sp=0x1037e34 pc=0xd89a6e
main.test1()
C:/main.go:38 +0xc7 fp=0x1037ee0 sp=0x1037e4c pc=0xdd1717
main.main()
C:/main.go:23 +0x3a7 fp=0x1037fc0 sp=0x1037ee0 pc=0xdd1437
runtime.main()
C:/go1.25.4.windows-386/go/src/runtime/proc.go:285 +0x248 fp=0x1037ff0 sp=0x1037fc0 pc=0xd58318
runtime.goexit({})
C:/go1.25.4.windows-386/go/src/runtime/asm_386.s:1386 +0x1 fp=0x1037ff4 sp=0x1037ff0 pc=0xd8d801
goroutine 2 gp=0x100c5a8 m=nil [force gc (idle)]:
runtime.gopark(0xdfcc34, 0xe83b20, 0x11, 0xa, 0x1)
C:/go1.25.4.windows-386/go/src/runtime/proc.go:460 +0xd8 fp=0x1033fc8 sp=0x1033fb4 pc=0xd88828
runtime.goparkunlock(0xe83b20, 0x11, 0xa, 0x1)
C:/go1.25.4.windows-386/go/src/runtime/proc.go:466 +0x43 fp=0x1033fdc sp=0x1033fc8 pc=0xd58773
runtime.forcegchelper()
C:/go1.25.4.windows-386/go/src/runtime/proc.go:373 +0xd7 fp=0x1033ff0 sp=0x1033fdc pc=0xd58647
runtime.goexit({})
C:/go1.25.4.windows-386/go/src/runtime/asm_386.s:1386 +0x1 fp=0x1033ff4 sp=0x1033ff0 pc=0xd8d801
created by runtime.init.6 in goroutine 1
C:/go1.25.4.windows-386/go/src/runtime/proc.go:361 +0x21
goroutine 3 gp=0x100c7e8 m=nil [GC sweep wait]:
runtime.gopark(0xdfcc34, 0xe83be0, 0xc, 0x9, 0x1)
C:/go1.25.4.windows-386/go/src/runtime/proc.go:460 +0xd8 fp=0x1035fbc sp=0x1035fa8 pc=0xd88828
runtime.goparkunlock(0xe83be0, 0xc, 0x9, 0x1)
C:/go1.25.4.windows-386/go/src/runtime/proc.go:466 +0x43 fp=0x1035fd0 sp=0x1035fbc pc=0xd58773
runtime.bgsweep(0x10180a0)
C:/go1.25.4.windows-386/go/src/runtime/mgcsweep.go:279 +0xa0 fp=0x1035fe8 sp=0x1035fd0 pc=0xd40a90
runtime.gcenable.gowrap1()
C:/go1.25.4.windows-386/go/src/runtime/mgc.go:212 +0x25 fp=0x1035ff0 sp=0x1035fe8 pc=0xd31ce5
runtime.goexit({})
C:/go1.25.4.windows-386/go/src/runtime/asm_386.s:1386 +0x1 fp=0x1035ff4 sp=0x1035ff0 pc=0xd8d801
created by runtime.gcenable in goroutine 1
C:/go1.25.4.windows-386/go/src/runtime/mgc.go:212 +0x75
goroutine 4 gp=0x100c908 m=nil [GC scavenge wait]:
runtime.gopark(0xdfcc34, 0xe83ce0, 0xd, 0xa, 0x2)
C:/go1.25.4.windows-386/go/src/runtime/proc.go:460 +0xd8 fp=0x1041fa8 sp=0x1041f94 pc=0xd88828
runtime.goparkunlock(0xe83ce0, 0xd, 0xa, 0x2)
C:/go1.25.4.windows-386/go/src/runtime/proc.go:466 +0x43 fp=0x1041fbc sp=0x1041fa8 pc=0xd58773
runtime.(*scavengerState).park(0xe83ce0)
C:/go1.25.4.windows-386/go/src/runtime/mgcscavenge.go:425 +0x50 fp=0x1041fcc sp=0x1041fbc pc=0xd3dda0
runtime.bgscavenge(0x10180a0)
C:/go1.25.4.windows-386/go/src/runtime/mgcscavenge.go:658 +0x6d fp=0x1041fe8 sp=0x1041fcc pc=0xd3e42d
runtime.gcenable.gowrap2()
C:/go1.25.4.windows-386/go/src/runtime/mgc.go:213 +0x25 fp=0x1041ff0 sp=0x1041fe8 pc=0xd31ca5
runtime.goexit({})
C:/go1.25.4.windows-386/go/src/runtime/asm_386.s:1386 +0x1 fp=0x1041ff4 sp=0x1041ff0 pc=0xd8d801
created by runtime.gcenable in goroutine 1
C:/go1.25.4.windows-386/go/src/runtime/mgc.go:213 +0xb5
goroutine 18 gp=0x1086128 m=nil [GOMAXPROCS updater (idle)]:
runtime.gopark(0xdfcc34, 0xe83bb0, 0x12, 0xa, 0x1)
C:/go1.25.4.windows-386/go/src/runtime/proc.go:460 +0xd8 fp=0x103df98 sp=0x103df84 pc=0xd88828
runtime.goparkunlock(0xe83bb0, 0x12, 0xa, 0x1)
C:/go1.25.4.windows-386/go/src/runtime/proc.go:466 +0x43 fp=0x103dfac sp=0x103df98 pc=0xd58773
runtime.updateMaxProcsGoroutine()
C:/go1.25.4.windows-386/go/src/runtime/proc.go:6720 +0xf3 fp=0x103dff0 sp=0x103dfac pc=0xd65903
runtime.goexit({})
C:/go1.25.4.windows-386/go/src/runtime/asm_386.s:1386 +0x1 fp=0x103dff4 sp=0x103dff0 pc=0xd8d801
created by runtime.defaultGOMAXPROCSUpdateEnable in goroutine 1
C:/go1.25.4.windows-386/go/src/runtime/proc.go:6708 +0x3d
goroutine 19 gp=0x1086248 m=nil [finalizer wait]:
runtime.gopark(0xdfcad4, 0xea3934, 0x10, 0xa, 0x1)
C:/go1.25.4.windows-386/go/src/runtime/proc.go:460 +0xd8 fp=0x103ff90 sp=0x103ff7c pc=0xd88828
runtime.runFinalizers()
C:/go1.25.4.windows-386/go/src/runtime/mfinal.go:210 +0xf2 fp=0x103fff0 sp=0x103ff90 pc=0xd30c62
runtime.goexit({})
C:/go1.25.4.windows-386/go/src/runtime/asm_386.s:1386 +0x1 fp=0x103fff4 sp=0x103fff0 pc=0xd8d801
created by runtime.createfing in goroutine 1
C:/go1.25.4.windows-386/go/src/runtime/mfinal.go:172 +0x5e
goroutine 20 gp=0x1086368 m=nil [GC worker (idle)]:
runtime.gopark(0xdfcae4, 0x142a000, 0x1c, 0xa, 0x0)
C:/go1.25.4.windows-386/go/src/runtime/proc.go:460 +0xd8 fp=0x1427f88 sp=0x1427f74 pc=0xd88828
runtime.gcBgMarkWorker(0x1088080)
C:/go1.25.4.windows-386/go/src/runtime/mgc.go:1463 +0xf5 fp=0x1427fe8 sp=0x1427f88 pc=0xd34045
runtime.gcBgMarkStartWorkers.gowrap1()
C:/go1.25.4.windows-386/go/src/runtime/mgc.go:1373 +0x25 fp=0x1427ff0 sp=0x1427fe8 pc=0xd33f05
runtime.goexit({})
C:/go1.25.4.windows-386/go/src/runtime/asm_386.s:1386 +0x1 fp=0x1427ff4 sp=0x1427ff0 pc=0xd8d801
created by runtime.gcBgMarkStartWorkers in goroutine 1
C:/go1.25.4.windows-386/go/src/runtime/mgc.go:1373 +0x6c
goroutine 21 gp=0x1086488 m=nil [GC worker (idle)]:
runtime.gopark(0xdfcae4, 0x142a200, 0x1c, 0xa, 0x0)
C:/go1.25.4.windows-386/go/src/runtime/proc.go:460 +0xd8 fp=0x1429f88 sp=0x1429f74 pc=0xd88828
runtime.gcBgMarkWorker(0x1088080)
C:/go1.25.4.windows-386/go/src/runtime/mgc.go:1463 +0xf5 fp=0x1429fe8 sp=0x1429f88 pc=0xd34045
runtime.gcBgMarkStartWorkers.gowrap1()
C:/go1.25.4.windows-386/go/src/runtime/mgc.go:1373 +0x25 fp=0x1429ff0 sp=0x1429fe8 pc=0xd33f05
runtime.goexit({})
C:/go1.25.4.windows-386/go/src/runtime/asm_386.s:1386 +0x1 fp=0x1429ff4 sp=0x1429ff0 pc=0xd8d801
created by runtime.gcBgMarkStartWorkers in goroutine 1
C:/go1.25.4.windows-386/go/src/runtime/mgc.go:1373 +0x6c
goroutine 23 gp=0x10866c8 m=nil [GC worker (idle)]:
runtime.gopark(0xdfcae4, 0x142a600, 0x1c, 0xa, 0x0)
C:/go1.25.4.windows-386/go/src/runtime/proc.go:460 +0xd8 fp=0x1425f88 sp=0x1425f74 pc=0xd88828
runtime.gcBgMarkWorker(0x1088080)
C:/go1.25.4.windows-386/go/src/runtime/mgc.go:1463 +0xf5 fp=0x1425fe8 sp=0x1425f88 pc=0xd34045
runtime.gcBgMarkStartWorkers.gowrap1()
C:/go1.25.4.windows-386/go/src/runtime/mgc.go:1373 +0x25 fp=0x1425ff0 sp=0x1425fe8 pc=0xd33f05
runtime.goexit({})
C:/go1.25.4.windows-386/go/src/runtime/asm_386.s:1386 +0x1 fp=0x1425ff4 sp=0x1425ff0 pc=0xd8d801
created by runtime.gcBgMarkStartWorkers in goroutine 1
C:/go1.25.4.windows-386/go/src/runtime/mgc.go:1373 +0x6c
C:\>
What did you expect to see?
Normal operation without errors
Related Issues
- runtime: windows server 2025 app crashes with various errors #76614 (closed)
- runtime: access violation in gentraceback on windows/386 #50144
- misc/cgo/test: 'signal arrived during external code execution' with updated windows/386 builder #53540 (closed)
- runtime: sigaction calls from libraries result in segfault #75253 (closed)
- runtime: stack split at bad time when disable inlining #20510 (closed)
- os/signal: test failure on win7 x64 #13151 (closed)
- runtime: fatal error: unexpected signal during runtime execution #24861 (closed)
- runtime: copystack: no locals info for runtime.sigtramp #8668 (closed)
- os/signal: TestStress failing on netbsd-amd64 #10656 (closed)
- runtime: simple programs crash on linux/386 with go1.21 when build with -gcflags='all=-N -l' #61975 (closed)
(Emoji vote if this was helpful or unhelpful; more detailed feedback welcome in this discussion.)
CC @golang/windows.
It looks similar to https://github.com/golang/go/issues/68525
Environment: Windows 10 x64, official Go 1.25.4, build with:
set GOARCH=386
go1.25.4 build -gcflags "all=-N -l" .
panic no longer occurs after add //go:nosplit for function getfp at runtime/stubs_386.go
I notice some functions in go runtime with //go:nosplit anno call other functions without that anno, is this allowed? I couldn't find any official document explicitly addressing this.
HACKING.md only mentions the reverse case (splittable functions calling nosplit functions):
Splittable functions ensure there's some amount of space on the stack for nosplit functions to run in and the linker checks that any static chain of nosplit function calls cannot exceed this bound.
panic no longer occurs after add
//go:nosplitfor functiongetfpatruntime/stubs_386.go
I was able to run it successfully.
Change https://go.dev/cl/728060 mentions this issue: runtime: mark getfp as nosplit
@gopherbot please open backport issues.
Backport issue(s) opened: #76760 (for 1.24), #76761 (for 1.25).
Remember to create the cherry-pick CL(s) as soon as the patch is submitted to master, according to https://go.dev/wiki/MinorReleases.