• Austin Clements's avatar
    runtime: query thread stack size from OS on Windows · 99e9be80
    Austin Clements authored
    Currently, on Windows, the thread stack size is set or assumed in many
    different places. In non-cgo binaries, both the Go linker and the
    runtime have a copy of the stack size, the Go linker sets the size of
    the main thread stack, and the runtime sets the size of other thread
    stacks. In cgo binaries, the external linker sets the main thread
    stack size, the runtime assumes the size of the main thread stack will
    be the same as used by the Go linker, and the cgo entry code assumes
    the same.
    
    Furthermore, users can change the main thread stack size using
    editbin, so the runtime doesn't even really know what size it is, and
    user C code can create threads with unknown thread stack sizes, which
    we also assume have the same default stack size.
    
    This is all a mess.
    
    Fix the corner cases of this and the duplication of knowledge between
    the linker and the runtime by querying the OS for the stack bounds
    during thread setup. Furthermore, we unify all of this into just
    runtime.minit for both cgo and non-cgo binaries and for the main
    thread, other runtime-created threads, and C-created threads.
    
    Updates #20975.
    
    Change-Id: I45dbee2b5ea2ae721a85a27680737ff046f9d464
    Reviewed-on: https://go-review.googlesource.com/120336
    Run-TryBot: Austin Clements <austin@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarAlex Brainman <alex.brainman@gmail.com>
    Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
    99e9be80
defs_windows_386.go 3.49 KB