aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThan McIntosh <thanm@google.com>2020-03-30 10:06:54 -0400
committerThan McIntosh <thanm@google.com>2020-03-30 18:44:30 +0000
commit84111acd35a33eb02508e2b014f612e9862c480b (patch)
treea1eef31398204b7a03f285539b3d0f9195f98a75
parent021bebe990f46b052881fb9101e27ea3bc9d9770 (diff)
downloadgo-84111acd35a33eb02508e2b014f612e9862c480b.tar.gz
go-84111acd35a33eb02508e2b014f612e9862c480b.zip
[dev.link] cmd/link: move the wavefront past addexport()
Reorganize the linker phase ordering so that addexport() runs before loadlibfull. In previous CLs addexport() was changed to use loader APIs but then copy back its work into sym.Symbol, so this change removes the copying/shim code in question. Change-Id: I17314a90007909e6242ee00e26393f3e4a02cf25 Reviewed-on: https://go-review.googlesource.com/c/go/+/226362 Run-TryBot: Than McIntosh <thanm@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>
-rw-r--r--src/cmd/link/internal/ld/elf.go2
-rw-r--r--src/cmd/link/internal/ld/go.go7
-rw-r--r--src/cmd/link/internal/ld/main.go8
3 files changed, 4 insertions, 13 deletions
diff --git a/src/cmd/link/internal/ld/elf.go b/src/cmd/link/internal/ld/elf.go
index c5c07d63f7..e15f94d5e0 100644
--- a/src/cmd/link/internal/ld/elf.go
+++ b/src/cmd/link/internal/ld/elf.go
@@ -2393,8 +2393,6 @@ func elfadddynsym(target *Target, syms *ArchSyms, s *sym.Symbol) {
func elfadddynsym2(ldr *loader.Loader, target *Target, syms *ArchSyms, s loader.Sym) {
ldr.SetSymDynid(s, int32(Nelfsym))
- // temporary until wafefront moves past addexport
- ldr.Syms[s].Dynid = ldr.SymDynid(s)
Nelfsym++
d := ldr.MakeSymbolUpdater(syms.DynSym2)
name := ldr.SymExtname(s)
diff --git a/src/cmd/link/internal/ld/go.go b/src/cmd/link/internal/ld/go.go
index 575ca6febe..0e4198572b 100644
--- a/src/cmd/link/internal/ld/go.go
+++ b/src/cmd/link/internal/ld/go.go
@@ -412,8 +412,6 @@ func (ctxt *Link) addexport() {
}
su := ctxt.loader.MakeSymbolUpdater(rs)
su.SetType(sym.SUNDEFEXT)
- // temporary until the wavefront moves past addexport
- ctxt.loader.Syms[rs].Type = sym.SUNDEFEXT
}
}
}
@@ -431,11 +429,6 @@ func (ctxt *Link) addexport() {
for _, lib := range dynlib {
adddynlib(ctxt, lib)
}
-
- // temporary until the wavefront moves past addexport:
- // copy any changes to loader.Sym symbols back into the sym.Symbol world.
- modified := []loader.Sym{ctxt.DynSym2, ctxt.Dynamic2, ctxt.DynStr2}
- ctxt.loader.PropagateLoaderChangesToSymbols(modified, 0)
}
type Pkg struct {
diff --git a/src/cmd/link/internal/ld/main.go b/src/cmd/link/internal/ld/main.go
index 2570026238..3772c5090c 100644
--- a/src/cmd/link/internal/ld/main.go
+++ b/src/cmd/link/internal/ld/main.go
@@ -281,14 +281,14 @@ func Main(arch *sys.Arch, theArch Arch) {
bench.Start("textbuildid")
ctxt.textbuildid()
-
- bench.Start("loadlibfull")
+ bench.Start("addexport")
setupdynexp(ctxt)
ctxt.setArchSyms(BeforeLoadlibFull)
+ ctxt.addexport()
+
+ bench.Start("loadlibfull")
ctxt.loadlibfull() // XXX do it here for now
- bench.Start("addexport")
- ctxt.addexport()
bench.Start("Gentext")
thearch.Gentext(ctxt) // trampolines, call stubs, etc.
bench.Start("textaddress")