diff options
| author | Austin Clements <austin@google.com> | 2017-12-01 16:13:08 -0500 |
|---|---|---|
| committer | Austin Clements <austin@google.com> | 2018-05-07 21:38:40 +0000 |
| commit | 44286b17c5ca6673648ba57b4a9d49ab8dffedf6 (patch) | |
| tree | 19e9be51dced2da66cd7b6fb8cdd67aed045a39d /src/cmd | |
| parent | a8a050819bd4693ea7c6fdc1744038f172c2a439 (diff) | |
| download | go-44286b17c5ca6673648ba57b4a9d49ab8dffedf6.tar.xz | |
runtime: replace system goroutine whitelist with symbol test
Currently isSystemGoroutine has a hard-coded list of known entry
points into system goroutines. This list is annoying to maintain. For
example, it's missing the ensureSigM goroutine.
Replace it with a check that simply looks for any goroutine with
runtime function as its entry point, with a few exceptions. This also
matches the definition recently added to the trace viewer (CL 81315).
Change-Id: Iaed723d4a6e8c2ffb7c0c48fbac1688b00b30f01
Reviewed-on: https://go-review.googlesource.com/81655
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
Diffstat (limited to 'src/cmd')
| -rw-r--r-- | src/cmd/internal/objabi/funcid.go | 4 | ||||
| -rw-r--r-- | src/cmd/link/internal/ld/pcln.go | 8 | ||||
| -rw-r--r-- | src/cmd/trace/trace.go | 8 |
3 files changed, 10 insertions, 10 deletions
diff --git a/src/cmd/internal/objabi/funcid.go b/src/cmd/internal/objabi/funcid.go index 55f1328ba8..ff75d3d571 100644 --- a/src/cmd/internal/objabi/funcid.go +++ b/src/cmd/internal/objabi/funcid.go @@ -13,6 +13,7 @@ type FuncID uint32 const ( FuncID_normal FuncID = iota // not a special function + FuncID_runtime_main FuncID_goexit FuncID_jmpdefer FuncID_mcall @@ -22,9 +23,6 @@ const ( FuncID_asmcgocall FuncID_sigpanic FuncID_runfinq - FuncID_bgsweep - FuncID_forcegchelper - FuncID_timerproc FuncID_gcBgMarkWorker FuncID_systemstack_switch FuncID_systemstack diff --git a/src/cmd/link/internal/ld/pcln.go b/src/cmd/link/internal/ld/pcln.go index 446f64bdbc..1bd4d1d762 100644 --- a/src/cmd/link/internal/ld/pcln.go +++ b/src/cmd/link/internal/ld/pcln.go @@ -312,6 +312,8 @@ func (ctxt *Link) pclntab() { // funcID uint32 funcID := objabi.FuncID_normal switch s.Name { + case "runtime.main": + funcID = objabi.FuncID_runtime_main case "runtime.goexit": funcID = objabi.FuncID_goexit case "runtime.jmpdefer": @@ -330,12 +332,6 @@ func (ctxt *Link) pclntab() { funcID = objabi.FuncID_sigpanic case "runtime.runfinq": funcID = objabi.FuncID_runfinq - case "runtime.bgsweep": - funcID = objabi.FuncID_bgsweep - case "runtime.forcegchelper": - funcID = objabi.FuncID_forcegchelper - case "runtime.timerproc": - funcID = objabi.FuncID_timerproc case "runtime.gcBgMarkWorker": funcID = objabi.FuncID_gcBgMarkWorker case "runtime.systemstack_switch": diff --git a/src/cmd/trace/trace.go b/src/cmd/trace/trace.go index 7a61d5b412..fcba0cbc3f 100644 --- a/src/cmd/trace/trace.go +++ b/src/cmd/trace/trace.go @@ -576,7 +576,7 @@ func generateTrace(params *traceParams, consumer traceConsumer) error { fname := stk[0].Fn info.name = fmt.Sprintf("G%v %s", newG, fname) - info.isSystemG = strings.HasPrefix(fname, "runtime.") && fname != "runtime.main" + info.isSystemG = isSystemGoroutine(fname) ctx.gcount++ setGState(ev, newG, gDead, gRunnable) @@ -1125,6 +1125,12 @@ func (ctx *traceContext) buildBranch(parent frameNode, stk []*trace.Frame) int { return ctx.buildBranch(node, stk) } +func isSystemGoroutine(entryFn string) bool { + // This mimics runtime.isSystemGoroutine as closely as + // possible. + return entryFn != "runtime.main" && strings.HasPrefix(entryFn, "runtime.") +} + // firstTimestamp returns the timestamp of the first event record. func firstTimestamp() int64 { res, _ := parseTrace() |
