]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: factor out mStackIsSystemAllocated
authorJoel Sing <joel@sing.id.au>
Mon, 24 Aug 2020 08:04:13 +0000 (18:04 +1000)
committerJoel Sing <joel@sing.id.au>
Tue, 19 Jan 2021 12:07:43 +0000 (12:07 +0000)
Rather than repeat long lists of GOOS values, factor out the code that checks
if a runtime starts on a system allocated stack. Note that this adds aix to
one case, which appears to have been previously missed.

Change-Id: I5cecb0bb47dd79cde8d723e5a42ba541e43cbfff
Reviewed-on: https://go-review.googlesource.com/c/go/+/250179
Trust: Joel Sing <joel@sing.id.au>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Run-TryBot: Joel Sing <joel@sing.id.au>
TryBot-Result: Go Bot <gobot@golang.org>

src/runtime/proc.go

index b776f889364d48b44e8f9bf08627e7445355157a..477152d899a1079b537efd13443c45a80fcaa8e9 100644 (file)
@@ -1206,6 +1206,16 @@ func startTheWorldWithSema(emitTraceEvent bool) int64 {
        return startTime
 }
 
+// mStackIsSystemAllocated indicates whether this runtime starts on a
+// system-allocated stack.
+func mStackIsSystemAllocated() bool {
+       switch GOOS {
+       case "aix", "darwin", "plan9", "illumos", "ios", "solaris", "windows":
+               return true
+       }
+       return false
+}
+
 // mstart is the entry-point for new Ms.
 //
 // This must not split the stack because we may not even have stack
@@ -1240,8 +1250,7 @@ func mstart() {
        mstart1()
 
        // Exit this thread.
-       switch GOOS {
-       case "windows", "solaris", "illumos", "plan9", "darwin", "ios", "aix":
+       if mStackIsSystemAllocated() {
                // Windows, Solaris, illumos, Darwin, AIX and Plan 9 always system-allocate
                // the stack, but put it in _g_.stack before mstart,
                // so the logic above hasn't set osStack yet.
@@ -1724,7 +1733,7 @@ func allocm(_p_ *p, fn func(), id int64) *m {
 
        // In case of cgo or Solaris or illumos or Darwin, pthread_create will make us a stack.
        // Windows and Plan 9 will layout sched stack on OS stack.
-       if iscgo || GOOS == "solaris" || GOOS == "illumos" || GOOS == "windows" || GOOS == "plan9" || GOOS == "darwin" || GOOS == "ios" {
+       if iscgo || mStackIsSystemAllocated() {
                mp.g0 = malg(-1)
        } else {
                mp.g0 = malg(8192 * sys.StackGuardMultiplier)