stack.go 881 B

123456789101112131415161718192021222324252627282930313233
  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. package objabi
  5. // For the linkers. Must match Go definitions.
  6. const (
  7. STACKSYSTEM = 0
  8. StackSystem = STACKSYSTEM
  9. StackBig = 4096
  10. StackSmall = 128
  11. )
  12. const (
  13. StackPreempt = -1314 // 0xfff...fade
  14. )
  15. // Initialize StackGuard and StackLimit according to target system.
  16. var StackGuard = 928*stackGuardMultiplier() + StackSystem
  17. var StackLimit = StackGuard - StackSystem - StackSmall
  18. // stackGuardMultiplier returns a multiplier to apply to the default
  19. // stack guard size. Larger multipliers are used for non-optimized
  20. // builds that have larger stack frames or for specific targets.
  21. func stackGuardMultiplier() int {
  22. // On AIX, a larger stack is needed for syscalls.
  23. if GOOS == "aix" {
  24. return 2
  25. }
  26. return 1
  27. }