From: Shenghou Ma Date: Wed, 14 Mar 2012 18:24:49 +0000 (+0800) Subject: runtime: manage stack by ourselves for badcallback on windows/amd64 X-Git-Tag: weekly.2012-03-22~95 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=b2a9079e54dc4e1e97551b8c60f2077888a544dc;p=gostls13.git runtime: manage stack by ourselves for badcallback on windows/amd64 This function uses 48-byte of precious non-split stack for every callback function, and without this CL, it can easily overflow the non-split stack. I encountered this when trying to enable misc/cgo/test on windows/amd64. R=rsc CC=golang-dev https://golang.org/cl/5784075 --- diff --git a/src/pkg/runtime/sys_windows_amd64.s b/src/pkg/runtime/sys_windows_amd64.s index 041383ee89..11909cda27 100644 --- a/src/pkg/runtime/sys_windows_amd64.s +++ b/src/pkg/runtime/sys_windows_amd64.s @@ -60,7 +60,11 @@ loadregs: RET -TEXT runtime·badcallback(SB),7,$48 +// This should be called on a system stack, +// so we don't need to concern about split stack. +TEXT runtime·badcallback(SB),7,$0 + SUBQ $48, SP + // stderr MOVQ $-12, CX // stderr MOVQ CX, 0(SP) @@ -80,6 +84,7 @@ TEXT runtime·badcallback(SB),7,$48 MOVQ runtime·WriteFile(SB), AX CALL AX + ADDQ $48, SP RET TEXT runtime·badsignal(SB),7,$48