From 84570aa9a18fa46dba1402004a54cedc7cf5e043 Mon Sep 17 00:00:00 2001 From: Shenghou Ma Date: Fri, 7 Mar 2014 15:11:16 -0500 Subject: runtime: round stack size to power of 2. Fixes build on windows/386 and plan9/386. Fixes #7487. LGTM=mattn.jp, dvyukov, rsc R=golang-codereviews, mattn.jp, dvyukov, 0intro, rsc CC=golang-codereviews https://golang.org/cl/72360043 --- src/pkg/runtime/stack.h | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'src/pkg/runtime/stack.h') diff --git a/src/pkg/runtime/stack.h b/src/pkg/runtime/stack.h index f2e4e43198..a3a5d83a64 100644 --- a/src/pkg/runtime/stack.h +++ b/src/pkg/runtime/stack.h @@ -57,15 +57,13 @@ enum { // to each stack below the usual guard area for OS-specific // purposes like signal handling. Used on Windows and on // Plan 9 because they do not use a separate stack. - // The new stack code requires stacks to be a power of two, - // and the default start size is 4k, so make StackSystem also 4k - // to keep the sum a power of two. StackSystem used to be - // 512*sizeof(uintptr) on Windows and 512 bytes on Plan 9. #ifdef GOOS_windows - StackSystem = 4096, + StackSystem = 512 * sizeof(uintptr), #else #ifdef GOOS_plan9 - StackSystem = 4096, + // The size of the note handler frame varies among architectures, + // but 512 bytes should be enough for every implementation. + StackSystem = 512, #else StackSystem = 0, #endif // Plan 9 @@ -79,7 +77,8 @@ enum { // If the amount needed for the splitting frame + StackExtra // is less than this number, the stack will have this size instead. StackMin = 4096, - FixedStack = StackMin + StackSystem, + StackSystemRounded = StackSystem + (-StackSystem & (StackMin-1)), + FixedStack = StackMin + StackSystemRounded, // Functions that need frames bigger than this use an extra // instruction to do the stack split check, to avoid overflow -- cgit v1.3