1// Copyright 2011 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package objabi
6
7import (
8	"internal/abi"
9	"internal/buildcfg"
10)
11
12func StackNosplit(race bool) int {
13	// This arithmetic must match that in runtime/stack.go:stackNosplit.
14	return abi.StackNosplitBase * stackGuardMultiplier(race)
15}
16
17// stackGuardMultiplier returns a multiplier to apply to the default
18// stack guard size. Larger multipliers are used for non-optimized
19// builds that have larger stack frames or for specific targets.
20func stackGuardMultiplier(race bool) int {
21	// This arithmetic must match that in runtime/internal/sys/consts.go:StackGuardMultiplier.
22	n := 1
23	// On AIX, a larger stack is needed for syscalls.
24	if buildcfg.GOOS == "aix" {
25		n += 1
26	}
27	// The race build also needs more stack.
28	if race {
29		n += 1
30	}
31	return n
32}
33