diff options
Diffstat (limited to '')
-rw-r--r-- | src/cmd/internal/objabi/stack.go | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/cmd/internal/objabi/stack.go b/src/cmd/internal/objabi/stack.go new file mode 100644 index 0000000..88b4990 --- /dev/null +++ b/src/cmd/internal/objabi/stack.go @@ -0,0 +1,40 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package objabi + +import "internal/buildcfg" + +// For the linkers. Must match Go definitions. + +const ( + STACKSYSTEM = 0 + StackSystem = STACKSYSTEM + StackBig = 4096 + StackSmall = 128 +) + +func StackLimit(race bool) int { + // This arithmetic must match that in runtime/stack.go:{_StackGuard,_StackLimit}. + stackGuard := 928*stackGuardMultiplier(race) + StackSystem + stackLimit := stackGuard - StackSystem - StackSmall + return stackLimit +} + +// stackGuardMultiplier returns a multiplier to apply to the default +// stack guard size. Larger multipliers are used for non-optimized +// builds that have larger stack frames or for specific targets. +func stackGuardMultiplier(race bool) int { + // This arithmetic must match that in runtime/internal/sys/consts.go:StackGuardMultiplier. + n := 1 + // On AIX, a larger stack is needed for syscalls. + if buildcfg.GOOS == "aix" { + n += 1 + } + // The race build also needs more stack. + if race { + n += 1 + } + return n +} |