aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/link/internal/ld/lib.go
diff options
context:
space:
mode:
authorCherry Zhang <cherryyz@google.com>2020-04-20 18:42:35 -0400
committerCherry Zhang <cherryyz@google.com>2020-04-21 14:29:02 +0000
commit47cac82e36d08198afac646c3f46d24255cf9d61 (patch)
tree37ea1b6be419a51a8c4f0bce427f7f3615adc140 /src/cmd/link/internal/ld/lib.go
parent5cccd7a7246099c3e1d268089ee6795933d7221f (diff)
downloadgo-47cac82e36d08198afac646c3f46d24255cf9d61.tar.gz
go-47cac82e36d08198afac646c3f46d24255cf9d61.zip
[dev.link] cmd/link: convert symtab pass to new style
This is more or less a direct translation, to get things going. There are more things we can do to make it better, especially on the handling of container symbols. Change-Id: I11a0087e402be8d42b9d06869385ead531755272 Reviewed-on: https://go-review.googlesource.com/c/go/+/229125 Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Than McIntosh <thanm@google.com> Reviewed-by: Jeremy Faller <jeremy@golang.org>
Diffstat (limited to 'src/cmd/link/internal/ld/lib.go')
-rw-r--r--src/cmd/link/internal/ld/lib.go32
1 files changed, 27 insertions, 5 deletions
diff --git a/src/cmd/link/internal/ld/lib.go b/src/cmd/link/internal/ld/lib.go
index b71bef22f4..9c87ab15a1 100644
--- a/src/cmd/link/internal/ld/lib.go
+++ b/src/cmd/link/internal/ld/lib.go
@@ -2627,6 +2627,16 @@ func (ctxt *Link) xdefine(p string, t sym.SymKind, v int64) {
s.Attr |= sym.AttrLocal
}
+func (ctxt *Link) xdefine2(p string, t sym.SymKind, v int64) {
+ ldr := ctxt.loader
+ s := ldr.CreateSymForUpdate(p, 0)
+ s.SetType(t)
+ s.SetValue(v)
+ s.SetReachable(true)
+ s.SetSpecial(true)
+ s.SetLocal(true)
+}
+
func datoff(s *sym.Symbol, addr int64) int64 {
if uint64(addr) >= Segdata.Vaddr {
return int64(uint64(addr) - Segdata.Vaddr + Segdata.Fileoff)
@@ -2816,10 +2826,6 @@ func (ctxt *Link) loadlibfull() {
// Set special global symbols.
ctxt.setArchSyms(AfterLoadlibFull)
- // Convert special symbols created by pcln.
- pclntabFirstFunc = ctxt.loader.Syms[pclntabFirstFunc2]
- pclntabLastFunc = ctxt.loader.Syms[pclntabLastFunc2]
-
// Populate dwarfp from dwarfp2. If we see a symbol index
// whose loader.Syms entry is nil, something went wrong.
for _, si := range dwarfp2 {
@@ -2834,11 +2840,27 @@ func (ctxt *Link) loadlibfull() {
}
dwarfp = append(dwarfp, dwarfSecInfo2{syms: syms})
}
+
+ // For now, overwrite symbol type with its "group" type, as dodata
+ // expected. Once we converted dodata, this will probably not be
+ // needed.
+ for i, t := range symGroupType {
+ if t != sym.Sxxx {
+ ctxt.loader.Syms[i].Type = t
+ }
+ }
+ symGroupType = nil
+
+ if ctxt.Debugvlog > 1 {
+ // loadlibfull is likely a good place to dump.
+ // Only dump under -v=2 and above.
+ ctxt.dumpsyms()
+ }
}
func (ctxt *Link) dumpsyms() {
for _, s := range ctxt.Syms.Allsym {
- fmt.Printf("%s %s %p %v %v\n", s, s.Type, s, s.Attr.Reachable(), s.Attr.OnList())
+ 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)
for i := range s.R {
fmt.Println("\t", s.R[i].Type, s.R[i].Sym)
}