[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>
This commit is contained in:
Cherry Zhang 2020-04-20 18:42:35 -04:00
parent 5cccd7a724
commit 47cac82e36
7 changed files with 292 additions and 248 deletions

View file

@ -1145,26 +1145,26 @@ func Addstring(s *sym.Symbol, str string) int64 {
// addgostring adds str, as a Go string value, to s. symname is the name of the
// symbol used to define the string data and must be unique per linked object.
func addgostring(ctxt *Link, s *sym.Symbol, symname, str string) {
sdata := ctxt.Syms.Lookup(symname, 0)
if sdata.Type != sym.Sxxx {
Errorf(s, "duplicate symname in addgostring: %s", symname)
func addgostring(ctxt *Link, ldr *loader.Loader, s *loader.SymbolBuilder, symname, str string) {
sdata := ldr.CreateSymForUpdate(symname, 0)
if sdata.Type() != sym.Sxxx {
ctxt.Errorf(s.Sym(), "duplicate symname in addgostring: %s", symname)
}
sdata.Attr |= sym.AttrReachable
sdata.Attr |= sym.AttrLocal
sdata.Type = sym.SRODATA
sdata.Size = int64(len(str))
sdata.P = []byte(str)
s.AddAddr(ctxt.Arch, sdata)
sdata.SetReachable(true)
sdata.SetLocal(true)
sdata.SetType(sym.SRODATA)
sdata.SetSize(int64(len(str)))
sdata.SetData([]byte(str))
s.AddAddr(ctxt.Arch, sdata.Sym())
s.AddUint(ctxt.Arch, uint64(len(str)))
}
func addinitarrdata(ctxt *Link, s *sym.Symbol) {
p := s.Name + ".ptr"
sp := ctxt.Syms.Lookup(p, 0)
sp.Type = sym.SINITARR
sp.Size = 0
sp.Attr |= sym.AttrDuplicateOK
func addinitarrdata(ctxt *Link, ldr *loader.Loader, s loader.Sym) {
p := ldr.SymName(s) + ".ptr"
sp := ldr.CreateSymForUpdate(p, 0)
sp.SetType(sym.SINITARR)
sp.SetSize(0)
sp.SetDuplicateOK(true)
sp.AddAddr(ctxt.Arch, s)
}