diff options
author | Cherry Zhang <cherryyz@google.com> | 2020-04-20 18:42:35 -0400 |
---|---|---|
committer | Cherry Zhang <cherryyz@google.com> | 2020-04-21 14:29:02 +0000 |
commit | 47cac82e36d08198afac646c3f46d24255cf9d61 (patch) | |
tree | 37ea1b6be419a51a8c4f0bce427f7f3615adc140 /src/cmd/link/internal/ld/lib.go | |
parent | 5cccd7a7246099c3e1d268089ee6795933d7221f (diff) | |
download | go-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.go | 32 |
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) } |