aboutsummaryrefslogtreecommitdiff
path: root/src/runtime
diff options
context:
space:
mode:
authorJoel Sing <joel@sing.id.au>2020-10-04 01:44:41 +1000
committerJoel Sing <joel@sing.id.au>2021-01-19 12:48:38 +0000
commit61debffd977889cd3f7f63b4f71d5a8ef1fc604e (patch)
treeda9bd7a21f2aa9e36c14a8b40921810c696bc663 /src/runtime
parent9fed39d2814073a9389a614342f603bab9963bff (diff)
downloadgo-61debffd977889cd3f7f63b4f71d5a8ef1fc604e.tar.gz
go-61debffd977889cd3f7f63b4f71d5a8ef1fc604e.zip
runtime: factor out usesLibcall
Rather than inline lists of GOOS values, factor out the code that checks if a runtime makes system calls via libcall. Change-Id: Ib19d7e63a2b4b8314f1841c0ff26e1b3a16b4b22 Reviewed-on: https://go-review.googlesource.com/c/go/+/259239 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>
Diffstat (limited to 'src/runtime')
-rw-r--r--src/runtime/proc.go12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/runtime/proc.go b/src/runtime/proc.go
index 477152d899..46aa3b04a5 100644
--- a/src/runtime/proc.go
+++ b/src/runtime/proc.go
@@ -1206,6 +1206,16 @@ func startTheWorldWithSema(emitTraceEvent bool) int64 {
return startTime
}
+// usesLibcall indicates whether this runtime performs system calls
+// via libcall.
+func usesLibcall() bool {
+ switch GOOS {
+ case "aix", "darwin", "illumos", "ios", "solaris", "windows":
+ return true
+ }
+ return false
+}
+
// mStackIsSystemAllocated indicates whether this runtime starts on a
// system-allocated stack.
func mStackIsSystemAllocated() bool {
@@ -4481,7 +4491,7 @@ func sigprof(pc, sp, lr uintptr, gp *g, mp *m) {
// Normal traceback is impossible or has failed.
// See if it falls into several common cases.
n = 0
- if (GOOS == "windows" || GOOS == "solaris" || GOOS == "illumos" || GOOS == "darwin" || GOOS == "ios" || GOOS == "aix") && mp.libcallg != 0 && mp.libcallpc != 0 && mp.libcallsp != 0 {
+ if usesLibcall() && mp.libcallg != 0 && mp.libcallpc != 0 && mp.libcallsp != 0 {
// Libcall, i.e. runtime syscall on windows.
// Collect Go stack that leads to the call.
n = gentraceback(mp.libcallpc, mp.libcallsp, 0, mp.libcallg.ptr(), 0, &stk[0], len(stk), nil, nil, 0)