diff options
author | Cherry Zhang <cherryyz@google.com> | 2020-03-28 15:26:05 -0400 |
---|---|---|
committer | Cherry Zhang <cherryyz@google.com> | 2020-03-30 16:59:51 +0000 |
commit | b33b6e857d106697755052d4e021aa3b672727b6 (patch) | |
tree | 14ee664f746e0c1a5204f83c96e0802f20794070 | |
parent | f095b570fe5b7dd6bca22681b5ff315895bbdbb6 (diff) | |
download | go-b33b6e857d106697755052d4e021aa3b672727b6.tar.gz go-b33b6e857d106697755052d4e021aa3b672727b6.zip |
[dev.link] cmd/link: use new-style Aux accessors in the loader
And remove the old-style one.
Change-Id: Ia6c84448108dd1da68451df2221c7c1005c45a0d
Reviewed-on: https://go-review.googlesource.com/c/go/+/226364
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Jeremy Faller <jeremy@golang.org>
Reviewed-by: Than McIntosh <thanm@google.com>
-rw-r--r-- | src/cmd/link/internal/loader/loader.go | 77 |
1 files changed, 22 insertions, 55 deletions
diff --git a/src/cmd/link/internal/loader/loader.go b/src/cmd/link/internal/loader/loader.go index 7ebeb45cb1..f3487c0ce7 100644 --- a/src/cmd/link/internal/loader/loader.go +++ b/src/cmd/link/internal/loader/loader.go @@ -1335,32 +1335,28 @@ func (l *Loader) GetFuncDwarfAuxSyms(fnSymIdx Sym) (auxDwarfInfo, auxDwarfLoc, a // not have auxsyms. return } - naux := l.NAux(fnSymIdx) - if naux == 0 { - return - } r, li := l.toLocal(fnSymIdx) - for i := 0; i < naux; i++ { - a := goobj2.Aux{} - a.Read(r.Reader, r.AuxOff(li, i)) - switch a.Type { + auxs := r.Auxs2(li) + for i := range auxs { + a := &auxs[i] + switch a.Type() { case goobj2.AuxDwarfInfo: - auxDwarfInfo = l.resolve(r, a.Sym) + auxDwarfInfo = l.resolve(r, a.Sym()) if l.SymType(auxDwarfInfo) != sym.SDWARFINFO { panic("aux dwarf info sym with wrong type") } case goobj2.AuxDwarfLoc: - auxDwarfLoc = l.resolve(r, a.Sym) + auxDwarfLoc = l.resolve(r, a.Sym()) if l.SymType(auxDwarfLoc) != sym.SDWARFLOC { panic("aux dwarf loc sym with wrong type") } case goobj2.AuxDwarfRanges: - auxDwarfRanges = l.resolve(r, a.Sym) + auxDwarfRanges = l.resolve(r, a.Sym()) if l.SymType(auxDwarfRanges) != sym.SDWARFRANGE { panic("aux dwarf ranges sym with wrong type") } case goobj2.AuxDwarfLines: - auxDwarfLines = l.resolve(r, a.Sym) + auxDwarfLines = l.resolve(r, a.Sym()) if l.SymType(auxDwarfLines) != sym.SDWARFLINES { panic("aux dwarf lines sym with wrong type") } @@ -1369,33 +1365,6 @@ func (l *Loader) GetFuncDwarfAuxSyms(fnSymIdx Sym) (auxDwarfInfo, auxDwarfLoc, a return } -// ReadAuxSyms reads the aux symbol ids for the specified symbol into the -// slice passed as a parameter. If the slice capacity is not large enough, a new -// larger slice will be allocated. Final slice is returned. -func (l *Loader) ReadAuxSyms(symIdx Sym, dst []Sym) []Sym { - if l.IsExternal(symIdx) { - return dst[:0] - } - naux := l.NAux(symIdx) - if naux == 0 { - return dst[:0] - } - - if cap(dst) < naux { - dst = make([]Sym, naux) - } - dst = dst[:0] - - r, li := l.toLocal(symIdx) - a := goobj2.Aux{} - for i := 0; i < naux; i++ { - a.ReadSym(r.Reader, r.AuxOff(li, i)) - dst = append(dst, l.resolve(r, a.Sym)) - } - - return dst -} - // PrependSub prepends 'sub' onto the sub list for outer symbol 'outer'. // Will panic if 'sub' already has an outer sym or sub sym. // FIXME: should this be instead a method on SymbolBuilder? @@ -2276,15 +2245,14 @@ func (l *Loader) cloneToExternal(symIdx Sym) { // If we're overriding a data symbol, collect the associated // Gotype, so as to propagate it to the new symbol. - naux := r.NAux(li) - for j := 0; j < naux; j++ { - a := goobj2.Aux{} - a.Read(r.Reader, r.AuxOff(li, j)) - switch a.Type { + auxs := r.Auxs2(li) + for j := range auxs { + a := &auxs[j] + switch a.Type() { case goobj2.AuxGotype: - pp.gotype = l.resolve(r, a.Sym) + pp.gotype = l.resolve(r, a.Sym()) default: - log.Fatalf("internal error: cloneToExternal applied to %s symbol %s with non-gotype aux data %d", skind.String(), sname, a.Type) + log.Fatalf("internal error: cloneToExternal applied to %s symbol %s with non-gotype aux data %d", skind.String(), sname, a.Type()) } } @@ -2476,23 +2444,22 @@ func loadObjFull(l *Loader, r *oReader) { // Aux symbol info isym := -1 - naux := r.NAux(i) - for j := 0; j < naux; j++ { - a := goobj2.Aux{} - a.Read(r.Reader, r.AuxOff(i, j)) - switch a.Type { + auxs := r.Auxs2(i) + for j := range auxs { + a := &auxs[j] + switch a.Type() { case goobj2.AuxGotype: - typ := resolveSymRef(a.Sym) + typ := resolveSymRef(a.Sym()) if typ != nil { s.Gotype = typ } case goobj2.AuxFuncdata: - fdsyms = append(fdsyms, resolveSymRef(a.Sym)) + fdsyms = append(fdsyms, resolveSymRef(a.Sym())) case goobj2.AuxFuncInfo: - if a.Sym.PkgIdx != goobj2.PkgIdxSelf { + if a.Sym().PkgIdx != goobj2.PkgIdxSelf { panic("funcinfo symbol not defined in current package") } - isym = int(a.Sym.SymIdx) + isym = int(a.Sym().SymIdx) case goobj2.AuxDwarfInfo, goobj2.AuxDwarfLoc, goobj2.AuxDwarfRanges, goobj2.AuxDwarfLines: // ignored for now default: |