]> Cypherpunks repositories - gostls13.git/commit
runtime: avoid repeated findmoduledatap calls
authorAustin Clements <austin@google.com>
Tue, 21 Feb 2017 03:37:07 +0000 (22:37 -0500)
committerAustin Clements <austin@google.com>
Mon, 6 Mar 2017 19:17:24 +0000 (19:17 +0000)
commit0efc8b21881ab35fdb45547088b1935fc8ebf263
tree290a47b98c68dd5e571e4dfee037c6b379aebb68
parent6533cc1ce899fa3c7fac1a85ad724e333fb9710f
runtime: avoid repeated findmoduledatap calls

Currently almost every function that deals with a *_func has to first
look up the *moduledata for the module containing the function's entry
point. This means we almost always do at least two identical module
lookups whenever we deal with a *_func (one to get the *_func and
another to get something from its module data) and sometimes several
more.

Fix this by making findfunc return a new funcInfo type that embeds
*_func, but also includes the *moduledata, and making all of the
functions that currently take a *_func instead take a funcInfo and use
the already-found *moduledata.

This transformation is trivial for the most part, since the *_func
type is usually inferred. The annoying part is that we can no longer
use nil to indicate failure, so this introduces a funcInfo.valid()
method and replaces nil checks with calls to valid.

Change-Id: I9b8075ef1c31185c1943596d96dec45c7ab5100f
Reviewed-on: https://go-review.googlesource.com/37331
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Michael Hudson-Doyle <michael.hudson@canonical.com>
20 files changed:
src/runtime/extern.go
src/runtime/heapdump.go
src/runtime/mbitmap.go
src/runtime/os3_plan9.go
src/runtime/plugin.go
src/runtime/proc.go
src/runtime/race.go
src/runtime/runtime2.go
src/runtime/signal_386.go
src/runtime/signal_amd64x.go
src/runtime/signal_arm.go
src/runtime/signal_arm64.go
src/runtime/signal_linux_s390x.go
src/runtime/signal_mips64x.go
src/runtime/signal_mipsx.go
src/runtime/signal_ppc64x.go
src/runtime/stack.go
src/runtime/symtab.go
src/runtime/trace.go
src/runtime/traceback.go