|  | // Copyright 2023 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 abi | 
|  |  | 
|  | const ( | 
|  | // StackNosplitBase is the base maximum number of bytes that a chain of | 
|  | // NOSPLIT functions can use. | 
|  | // | 
|  | // This value must be multiplied by the stack guard multiplier, so do not | 
|  | // use it directly. See runtime/stack.go:stackNosplit and | 
|  | // cmd/internal/objabi/stack.go:StackNosplit. | 
|  | StackNosplitBase = 800 | 
|  |  | 
|  | // We have three different sequences for stack bounds checks, depending on | 
|  | // whether the stack frame of a function is small, big, or huge. | 
|  |  | 
|  | // After a stack split check the SP is allowed to be StackSmall bytes below | 
|  | // the stack guard. | 
|  | // | 
|  | // Functions that need frames <= StackSmall can perform the stack check | 
|  | // using a single comparison directly between the stack guard and the SP | 
|  | // because we ensure that StackSmall bytes of stack space are available | 
|  | // beyond the stack guard. | 
|  | StackSmall = 128 | 
|  |  | 
|  | // Functions that need frames <= StackBig can assume that neither | 
|  | // SP-framesize nor stackGuard-StackSmall will underflow, and thus use a | 
|  | // more efficient check. In order to ensure this, StackBig must be <= the | 
|  | // size of the unmapped space at zero. | 
|  | StackBig = 4096 | 
|  | ) |