mirror of
https://github.com/golang/go
synced 2024-11-18 13:44:48 -07:00
[dev.link] cmd/link: remove Sub field from sym.Symbol
Remove 'Sub' field from sym.Symbol, replacing uses (those downstream of loadlibfull) with loader method calls. NB: removing the Outer field will have to wait for now; it is accessed in archreloc methods that don't have access to link ctxt or loader currently. Change-Id: I2abe5906fc169c64b2ab7d5ad213619bea5a17c7 Reviewed-on: https://go-review.googlesource.com/c/go/+/230617 Run-TryBot: Than McIntosh <thanm@google.com> Reviewed-by: Cherry Zhang <cherryyz@google.com> Reviewed-by: Jeremy Faller <jeremy@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
8493b64527
commit
9a3bf7d542
@ -2026,7 +2026,7 @@ func Asmbelf(ctxt *Link, symo int64) {
|
|||||||
// sh.info is the index of first non-local symbol (number of local symbols)
|
// sh.info is the index of first non-local symbol (number of local symbols)
|
||||||
s := ctxt.Syms.Lookup(".dynsym", 0)
|
s := ctxt.Syms.Lookup(".dynsym", 0)
|
||||||
i := uint32(0)
|
i := uint32(0)
|
||||||
for sub := s; sub != nil; sub = sub.Sub {
|
for sub := s; sub != nil; sub = symSub(ctxt, sub) {
|
||||||
i++
|
i++
|
||||||
if !sub.Attr.Local() {
|
if !sub.Attr.Local() {
|
||||||
break
|
break
|
||||||
|
@ -2929,12 +2929,19 @@ func ElfSymForReloc(ctxt *Link, s *sym.Symbol) int32 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func symSub(ctxt *Link, s *sym.Symbol) *sym.Symbol {
|
||||||
|
if lsub := ctxt.loader.SubSym(loader.Sym(s.SymIdx)); lsub != 0 {
|
||||||
|
return ctxt.loader.Syms[lsub]
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (ctxt *Link) dumpsyms() {
|
func (ctxt *Link) dumpsyms() {
|
||||||
for _, s := range ctxt.loader.Syms {
|
for _, s := range ctxt.loader.Syms {
|
||||||
if s == nil {
|
if s == nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
fmt.Printf("%s %s reachable=%v onlist=%v outer=%v sub=%v\n", s, s.Type, s.Attr.Reachable(), s.Attr.OnList(), s.Outer, s.Sub)
|
fmt.Printf("%s %s reachable=%v onlist=%v outer=%v sub=%v\n", s, s.Type, s.Attr.Reachable(), s.Attr.OnList(), s.Outer, symSub(ctxt, s))
|
||||||
for i := range s.R {
|
for i := range s.R {
|
||||||
fmt.Println("\t", s.R[i].Type, s.R[i].Sym)
|
fmt.Println("\t", s.R[i].Type, s.R[i].Sym)
|
||||||
}
|
}
|
||||||
|
@ -2544,13 +2544,10 @@ func (l *Loader) migrateAttributes(src Sym, dst *sym.Symbol) {
|
|||||||
dst.Attr.Set(sym.AttrCgoExportStatic, l.AttrCgoExportStatic(src))
|
dst.Attr.Set(sym.AttrCgoExportStatic, l.AttrCgoExportStatic(src))
|
||||||
dst.Attr.Set(sym.AttrReadOnly, l.AttrReadOnly(src))
|
dst.Attr.Set(sym.AttrReadOnly, l.AttrReadOnly(src))
|
||||||
|
|
||||||
// Convert outer/sub relationships
|
// Convert outer relationship
|
||||||
if outer, ok := l.outer[src]; ok {
|
if outer, ok := l.outer[src]; ok {
|
||||||
dst.Outer = l.Syms[outer]
|
dst.Outer = l.Syms[outer]
|
||||||
}
|
}
|
||||||
if sub, ok := l.sub[src]; ok {
|
|
||||||
dst.Sub = l.Syms[sub]
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set sub-symbol attribute. See the comment on the AttrSubSymbol
|
// Set sub-symbol attribute. See the comment on the AttrSubSymbol
|
||||||
// method for more on this, there is some tricky stuff here.
|
// method for more on this, there is some tricky stuff here.
|
||||||
|
@ -21,7 +21,7 @@ func TestSizeof(t *testing.T) {
|
|||||||
_32bit uintptr // size on 32bit platforms
|
_32bit uintptr // size on 32bit platforms
|
||||||
_64bit uintptr // size on 64bit platforms
|
_64bit uintptr // size on 64bit platforms
|
||||||
}{
|
}{
|
||||||
{Symbol{}, 84, 136},
|
{Symbol{}, 80, 128},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
|
@ -23,7 +23,6 @@ type Symbol struct {
|
|||||||
Align int32
|
Align int32
|
||||||
Value int64
|
Value int64
|
||||||
Size int64
|
Size int64
|
||||||
Sub *Symbol
|
|
||||||
Outer *Symbol
|
Outer *Symbol
|
||||||
SymIdx LoaderSym
|
SymIdx LoaderSym
|
||||||
auxinfo *AuxSymbol
|
auxinfo *AuxSymbol
|
||||||
|
Loading…
Reference in New Issue
Block a user