aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThan McIntosh <thanm@google.com>2020-04-28 15:25:54 -0400
committerThan McIntosh <thanm@google.com>2020-04-29 15:05:14 +0000
commit9a3bf7d542b73307f455d714d97cc28f78a9b0eb (patch)
treea5ec8657beda3d892150f7e05f1f7315ca404cad /src
parent8493b645270bde36c5c76b5baf903fe0fb44f0d4 (diff)
downloadgo-9a3bf7d542b73307f455d714d97cc28f78a9b0eb.tar.xz
[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>
Diffstat (limited to 'src')
-rw-r--r--src/cmd/link/internal/ld/elf.go2
-rw-r--r--src/cmd/link/internal/ld/lib.go9
-rw-r--r--src/cmd/link/internal/loader/loader.go5
-rw-r--r--src/cmd/link/internal/sym/sizeof_test.go2
-rw-r--r--src/cmd/link/internal/sym/symbol.go1
5 files changed, 11 insertions, 8 deletions
diff --git a/src/cmd/link/internal/ld/elf.go b/src/cmd/link/internal/ld/elf.go
index 3be3f99171..83f100c12b 100644
--- a/src/cmd/link/internal/ld/elf.go
+++ b/src/cmd/link/internal/ld/elf.go
@@ -2026,7 +2026,7 @@ func Asmbelf(ctxt *Link, symo int64) {
// sh.info is the index of first non-local symbol (number of local symbols)
s := ctxt.Syms.Lookup(".dynsym", 0)
i := uint32(0)
- for sub := s; sub != nil; sub = sub.Sub {
+ for sub := s; sub != nil; sub = symSub(ctxt, sub) {
i++
if !sub.Attr.Local() {
break
diff --git a/src/cmd/link/internal/ld/lib.go b/src/cmd/link/internal/ld/lib.go
index 51d81eb28d..baccb8baae 100644
--- a/src/cmd/link/internal/ld/lib.go
+++ b/src/cmd/link/internal/ld/lib.go
@@ -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() {
for _, s := range ctxt.loader.Syms {
if s == nil {
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 {
fmt.Println("\t", s.R[i].Type, s.R[i].Sym)
}
diff --git a/src/cmd/link/internal/loader/loader.go b/src/cmd/link/internal/loader/loader.go
index 2abd0e60e1..4fcdc1a661 100644
--- a/src/cmd/link/internal/loader/loader.go
+++ b/src/cmd/link/internal/loader/loader.go
@@ -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.AttrReadOnly, l.AttrReadOnly(src))
- // Convert outer/sub relationships
+ // Convert outer relationship
if outer, ok := l.outer[src]; ok {
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
// method for more on this, there is some tricky stuff here.
diff --git a/src/cmd/link/internal/sym/sizeof_test.go b/src/cmd/link/internal/sym/sizeof_test.go
index 4cfca3b5a3..f358ccee66 100644
--- a/src/cmd/link/internal/sym/sizeof_test.go
+++ b/src/cmd/link/internal/sym/sizeof_test.go
@@ -21,7 +21,7 @@ func TestSizeof(t *testing.T) {
_32bit uintptr // size on 32bit platforms
_64bit uintptr // size on 64bit platforms
}{
- {Symbol{}, 84, 136},
+ {Symbol{}, 80, 128},
}
for _, tt := range tests {
diff --git a/src/cmd/link/internal/sym/symbol.go b/src/cmd/link/internal/sym/symbol.go
index 546798fdf4..3c3717ff31 100644
--- a/src/cmd/link/internal/sym/symbol.go
+++ b/src/cmd/link/internal/sym/symbol.go
@@ -23,7 +23,6 @@ type Symbol struct {
Align int32
Value int64
Size int64
- Sub *Symbol
Outer *Symbol
SymIdx LoaderSym
auxinfo *AuxSymbol