s.Siz = r.uint32At(off + 8)
}
+// Read fields other than the symbol name. The name is not necessary
+// in some cases, and most of the time spent in Read is reading the
+// name.
+func (s *Sym) ReadWithoutName(r *Reader, off uint32) {
+ s.ABI = r.uint16At(off + 4)
+ s.Type = r.uint8At(off + 6)
+ s.Flag = r.uint8At(off + 7)
+ s.Siz = r.uint32At(off + 8)
+}
+
func (s *Sym) ReadFlag(r *Reader, off uint32) {
s.Flag = r.uint8At(off + 7)
}
}
oldr, oldli := l.toLocal(oldi)
oldsym := goobj2.Sym{}
- oldsym.Read(oldr.Reader, oldr.SymOff(oldli))
+ oldsym.ReadWithoutName(oldr.Reader, oldr.SymOff(oldli))
if oldsym.Dupok() {
return oldi, false
}
}
r, li := l.toLocal(i)
osym := goobj2.Sym{}
- osym.Read(r.Reader, r.SymOff(li))
+ osym.ReadWithoutName(r.Reader, r.SymOff(li))
return int(abiToVer(osym.ABI, r.version))
}
}
r, li := l.toLocal(i)
osym := goobj2.Sym{}
- osym.Read(r.Reader, r.SymOff(li))
+ osym.ReadWithoutName(r.Reader, r.SymOff(li))
return sym.AbiSymKindToSymKind[objabi.SymKind(osym.Type)]
}
continue
}
ver := abiToVer(osym.ABI, r.version)
- if osym.ABI != goobj2.SymABIstatic && l.symsByName[ver][name] != gi {
- continue
- }
-
t := sym.AbiSymKindToSymKind[objabi.SymKind(osym.Type)]
if t == sym.SXREF {
log.Fatalf("bad sxref")
}
osym := goobj2.Sym{}
- osym.Read(r.Reader, r.SymOff(i))
- name := strings.Replace(osym.Name, "\"\".", r.pkgprefix, -1)
- if name == "" {
- continue
- }
+ osym.ReadWithoutName(r.Reader, r.SymOff(i))
dupok := osym.Dupok()
if dupok && isdup {
if l.attrReachable.has(gi) {
if s == nil {
continue
}
- if s.Name != name { // Sanity check. We can remove it in the final version.
- fmt.Println("name mismatch:", lib, i, s.Name, name)
- panic("name mismatch")
- }
local := osym.Local()
makeTypelink := osym.Typelink()