mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
[dev.link] cmd/internal: convert basic types to builtin symbols
The Go compiler includes special treatment for a small set of very commonly used type symbols (26 to be exact); for these types it doesn't bother to emit type descriptors for "normal" compilations, and instead only generates them for the runtime package, so as to reduce object file bloat. This patch moves the set of type symbols in question from the PkgIdxNone index space (in the object file) to the PkgIdxBuiltin space, which saves some work in the compiler and loader (reduces each package's index space slightly). Change-Id: I039c805e05c1aef26f035e52760fd0a0af40f7a5 Reviewed-on: https://go-review.googlesource.com/c/go/+/239658 Run-TryBot: Than McIntosh <thanm@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com> Reviewed-by: Jeremy Faller <jeremy@golang.org>
This commit is contained in:
parent
be38746eb4
commit
cbfced7415
3 changed files with 73 additions and 5 deletions
|
|
@ -1980,6 +1980,7 @@ func (l *Loader) preloadSyms(r *oReader, kind int) {
|
|||
}
|
||||
l.growAttrBitmaps(len(l.objSyms) + int(end-start))
|
||||
needNameExpansion := r.NeedNameExpansion()
|
||||
loadingRuntimePkg := r.unit.Lib.Pkg == "runtime"
|
||||
for i := start; i < end; i++ {
|
||||
osym := r.Sym(i)
|
||||
name := osym.Name(r.Reader)
|
||||
|
|
@ -2005,7 +2006,8 @@ func (l *Loader) preloadSyms(r *oReader, kind int) {
|
|||
if strings.HasPrefix(name, "go.itablink.") {
|
||||
l.itablink[gi] = struct{}{}
|
||||
}
|
||||
if strings.HasPrefix(name, "runtime.") {
|
||||
if strings.HasPrefix(name, "runtime.") ||
|
||||
(loadingRuntimePkg && strings.HasPrefix(name, "type.")) {
|
||||
if bi := goobj2.BuiltinIdx(name, v); bi != -1 {
|
||||
// This is a definition of a builtin symbol. Record where it is.
|
||||
l.builtinSyms[bi] = gi
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue