// but we do keep the symbols it refers to.
exportsIdx := d.loader.Lookup("go.plugin.exports", 0)
if exportsIdx != 0 {
- nreloc := d.loader.NReloc(exportsIdx)
- for i := 0; i < nreloc; i++ {
- d.mark(d.loader.RelocSym(exportsIdx, i))
+ relocs := d.loader.Relocs(exportsIdx)
+ for i := 0; i < relocs.Count; i++ {
+ d.mark(relocs.At(i).Sym)
}
}
}
func (d *deadcodePass2) flood() {
for !d.wq.empty() {
symIdx := d.wq.pop()
- nreloc := d.loader.NReloc(symIdx)
- for i := 0; i < nreloc; i++ {
- t := d.loader.RelocType(symIdx, i)
- if t == objabi.R_WEAKADDROFF {
+ relocs := d.loader.Relocs(symIdx)
+ for i := 0; i < relocs.Count; i++ {
+ r := relocs.At(i)
+ if r.Type == objabi.R_WEAKADDROFF {
continue
}
- if t == objabi.R_METHODOFF {
+ if r.Type == objabi.R_METHODOFF {
// TODO: we should do something about it
// For now, all the methods are considered live
}
- d.mark(d.loader.RelocSym(symIdx, i))
+ d.mark(r.Sym)
}
naux := d.loader.NAux(symIdx)
for i := 0; i < naux; i++ {
for i := 1; i < n; i++ {
s := objfile.Sym(i)
if strings.HasPrefix(loader.RawSymName(s), "go.itablink.") {
- if d.loader.NReloc(s) > 0 && loader.Reachable.Has(loader.RelocSym(s, 0)) {
+ relocs := loader.Relocs(s)
+ if relocs.Count > 0 && loader.Reachable.Has(relocs.At(0).Sym) {
loader.Reachable.Set(s)
}
}
return sym.AbiSymKindToSymKind[objabi.SymKind(osym.Type)]
}
-// Returns the number of relocations given a global index.
-func (l *Loader) NReloc(i Sym) int {
- r, li := l.ToLocal(i)
- if r == nil {
- return 0
- }
- return r.NReloc(li)
-}
-
-// Returns the referred symbol of the j-th relocation of the i-th
-// symbol.
-func (l *Loader) RelocSym(i Sym, j int) Sym {
- r, li := l.ToLocal(i)
- rel := goobj2.Reloc{}
- rel.Read(r.Reader, r.RelocOff(li, j))
- return l.Resolve(r, rel.Sym)
-}
-
-// Returns the relocation type of the j-th relocation of the i-th
-// symbol.
-func (l *Loader) RelocType(i Sym, j int) objabi.RelocType {
- r, li := l.ToLocal(i)
- rel := goobj2.Reloc{}
- rel.Read(r.Reader, r.RelocOff(li, j))
- return objabi.RelocType(rel.Type)
-}
-
// Returns the number of aux symbols given a global index.
func (l *Loader) NAux(i Sym) int {
r, li := l.ToLocal(i)