aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/ld/pe.c
diff options
context:
space:
mode:
authorDmitriy Vyukov <dvyukov@google.com>2011-12-07 16:53:17 +0300
committerDmitriy Vyukov <dvyukov@google.com>2011-12-07 16:53:17 +0300
commit428062da4e5e35ce75178d993dd6d8ef5e3ecb5d (patch)
treeba42071e9fce2013704374474713b920249a2c23 /src/cmd/ld/pe.c
parent5e43527336e056b9c5a51bf0e23e790c86e3affa (diff)
downloadgo-428062da4e5e35ce75178d993dd6d8ef5e3ecb5d.tar.xz
ld: increase default stack size on Windows for cgo
Fixes #2437. R=rsc, hectorchu, mattn.jp, alex.brainman, jdpoirier, snaury, n13m3y3r CC=golang-dev https://golang.org/cl/5371049
Diffstat (limited to 'src/cmd/ld/pe.c')
-rw-r--r--src/cmd/ld/pe.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/cmd/ld/pe.c b/src/cmd/ld/pe.c
index 2e50490cec..1d70b4808b 100644
--- a/src/cmd/ld/pe.c
+++ b/src/cmd/ld/pe.c
@@ -650,8 +650,21 @@ asmbpe(void)
// Commit size must be strictly less than reserve
// size otherwise reserve will be rounded up to a
// larger size, as verified with VMMap.
- set(SizeOfStackReserve, 0x00010000);
- set(SizeOfStackCommit, 0x0000ffff);
+
+ // Go code would be OK with 64k stacks, but we need larger stacks for cgo.
+ // That default stack reserve size affects only the main thread,
+ // for other threads we specify stack size in runtime explicitly
+ // (runtime knows whether cgo is enabled or not).
+ // If you change stack reserve sizes here,
+ // change them in runtime/cgo/windows_386/amd64.c as well.
+ if(!iscgo) {
+ set(SizeOfStackReserve, 0x00010000);
+ set(SizeOfStackCommit, 0x0000ffff);
+ } else {
+ set(SizeOfStackReserve, pe64 ? 0x00200000 : 0x00100000);
+ // account for 2 guard pages
+ set(SizeOfStackCommit, (pe64 ? 0x00200000 : 0x00100000) - 0x2000);
+ }
set(SizeOfHeapReserve, 0x00100000);
set(SizeOfHeapCommit, 0x00001000);
set(NumberOfRvaAndSizes, 16);