From b2a9079e54dc4e1e97551b8c60f2077888a544dc Mon Sep 17 00:00:00 2001 From: Shenghou Ma Date: Thu, 15 Mar 2012 02:24:49 +0800 Subject: [PATCH] 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 --- src/pkg/runtime/sys_windows_amd64.s | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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 -- 2.50.0