mirror of
https://github.com/golang/go.git
synced 2025-05-17 13:24:38 +00:00
[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:
parent
59a702aa6a
commit
0434d40934
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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 (
|
||||
|
Loading…
x
Reference in New Issue
Block a user