[dev.link] cmd/compile: mark stmp and stkobj symbols as static

Mark compiler-generated ".stmp_%d" and "<fn>.stkobj" symbols as
AttrStatic, so as to tell the linker that they do not need to be
inserted into its name lookup tables.

Change-Id: I59ffd11659b2c54c2d0ad41275d05c3f919e3b88
Reviewed-on: https://go-review.googlesource.com/c/go/+/240497
Run-TryBot: Than McIntosh <thanm@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
This commit is contained in:
Than McIntosh 2020-06-30 07:55:16 -04:00
parent 59a702aa6a
commit 0434d40934
4 changed files with 11 additions and 4 deletions

View File

@ -291,10 +291,8 @@ func addGCLocals() {
}
if x := s.Func.StackObjects; x != nil {
attr := int16(obj.RODATA)
if s.DuplicateOK() {
attr |= obj.DUPOK
}
ggloblsym(x, int32(len(x.P)), attr)
x.Set(obj.AttrStatic, true)
}
if x := s.Func.OpenCodedDeferInfo; x != nil {
ggloblsym(x, int32(len(x.P)), obj.RODATA|obj.DUPOK)

View File

@ -6,6 +6,7 @@ package gc
import (
"cmd/compile/internal/types"
"cmd/internal/obj"
"fmt"
)
@ -360,7 +361,7 @@ var statuniqgen int // name generator for static temps
// returned node for readonly nodes.
func staticname(t *types.Type) *Node {
// Don't use lookupN; it interns the resulting string, but these are all unique.
n := newname(lookup(fmt.Sprintf(".stmp_%d", statuniqgen)))
n := newname(lookup(fmt.Sprintf("%s%d", obj.StaticNamePref, statuniqgen)))
statuniqgen++
addvar(n, t, PEXTERN)
return n

View File

@ -170,6 +170,9 @@ func (ctxt *Link) Globl(s *LSym, size int64, flag int) {
} else if flag&TLSBSS != 0 {
s.Type = objabi.STLSBSS
}
if strings.HasPrefix(s.Name, "\"\"."+StaticNamePref) {
s.Set(AttrStatic, true)
}
}
// EmitEntryLiveness generates PCDATA Progs after p to switch to the

View File

@ -264,6 +264,11 @@ func isNonPkgSym(ctxt *Link, s *LSym) bool {
return false
}
// StaticNamePref is the prefix the front end applies to static temporary
// variables. When turned into LSyms, these can be tagged as static so
// as to avoid inserting them into the linker's name lookup tables.
const StaticNamePref = ".stmp_"
type traverseFlag uint32
const (