Source file src/internal/abi/stack.go
1 // Copyright 2023 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 5 package abi 6 7 const ( 8 // StackNosplitBase is the base maximum number of bytes that a chain of 9 // NOSPLIT functions can use. 10 // 11 // This value must be multiplied by the stack guard multiplier, so do not 12 // use it directly. See runtime/stack.go:stackNosplit and 13 // cmd/internal/objabi/stack.go:StackNosplit. 14 StackNosplitBase = 800 15 16 // We have three different sequences for stack bounds checks, depending on 17 // whether the stack frame of a function is small, big, or huge. 18 19 // After a stack split check the SP is allowed to be StackSmall bytes below 20 // the stack guard. 21 // 22 // Functions that need frames <= StackSmall can perform the stack check 23 // using a single comparison directly between the stack guard and the SP 24 // because we ensure that StackSmall bytes of stack space are available 25 // beyond the stack guard. 26 StackSmall = 128 27 28 // Functions that need frames <= StackBig can assume that neither 29 // SP-framesize nor stackGuard-StackSmall will underflow, and thus use a 30 // more efficient check. In order to ensure this, StackBig must be <= the 31 // size of the unmapped space at zero. 32 StackBig = 4096 33 ) 34