sym := Sym{
SymID: symID,
Kind: objabi.SymKind(osym.Type),
- DupOK: osym.Flag&goobj2.SymFlagDupok != 0,
+ DupOK: osym.Dupok(),
Size: int64(osym.Siz),
Data: Data{int64(start + dataOff), siz},
}
Args: int64(info.Args),
Frame: int64(info.Locals),
NoSplit: info.NoSplit != 0,
- Leaf: osym.Flag&goobj2.SymFlagLeaf != 0,
- TopFrame: osym.Flag&goobj2.SymFlagTopFrame != 0,
+ Leaf: osym.Leaf(),
+ TopFrame: osym.TopFrame(),
PCSP: Data{int64(pcdataBase + info.Pcsp), int64(info.Pcfile - info.Pcsp)},
PCFile: Data{int64(pcdataBase + info.Pcfile), int64(info.Pcline - info.Pcfile)},
PCLine: Data{int64(pcdataBase + info.Pcline), int64(info.Pcinline - info.Pcline)},
return 4 + 2 + 1 + 1 + 4
}
+func (s *Sym) Dupok() bool { return s.Flag&SymFlagDupok != 0 }
+func (s *Sym) Local() bool { return s.Flag&SymFlagLocal != 0 }
+func (s *Sym) Typelink() bool { return s.Flag&SymFlagTypelink != 0 }
+func (s *Sym) Leaf() bool { return s.Flag&SymFlagLeaf != 0 }
+func (s *Sym) CFunc() bool { return s.Flag&SymFlagCFunc != 0 }
+func (s *Sym) ReflectMethod() bool { return s.Flag&SymFlagReflectMethod != 0 }
+func (s *Sym) Shared() bool { return s.Flag&SymFlagShared != 0 }
+func (s *Sym) TopFrame() bool { return s.Flag&SymFlagTopFrame != 0 }
+
// Symbol reference.
type SymRef struct {
PkgIdx uint32
oldsym := goobj2.Sym{}
oldsym.Read(oldr.Reader, oldr.SymOff(li))
oldtyp := sym.AbiSymKindToSymKind[objabi.SymKind(oldsym.Type)]
- if oldsym.Flag&goobj2.SymFlagDupok == 0 && !((oldtyp == sym.SDATA || oldtyp == sym.SNOPTRDATA || oldtyp == sym.SBSS || oldtyp == sym.SNOPTRBSS) && oldr.DataSize(li) == 0) { // only allow overwriting 0-sized data symbol
+ if !oldsym.Dupok() && !((oldtyp == sym.SDATA || oldtyp == sym.SNOPTRDATA || oldtyp == sym.SBSS || oldtyp == sym.SNOPTRBSS) && oldr.DataSize(li) == 0) { // only allow overwriting 0-sized data symbol
log.Fatalf("duplicated definition of symbol " + name)
}
l.overwrite[oldi] = i
continue // don't add unnamed aux symbol
}
v := abiToVer(osym.ABI, localSymVersion)
- dupok := osym.Flag&goobj2.SymFlagDupok != 0
+ dupok := osym.Dupok()
l.AddSym(name, v, istart+Sym(i), or, dupok, sym.AbiSymKindToSymKind[objabi.SymKind(osym.Type)])
}
continue
}
ver := abiToVer(osym.ABI, r.version)
- dupok := osym.Flag&goobj2.SymFlagDupok != 0
+ dupok := osym.Dupok()
if dupsym := l.symsByName[nameVer{name, ver}]; dupsym != istart+Sym(i) {
if dupok && l.Reachable.Has(dupsym) {
// A dupok symbol is resolved to another package. We still need
panic("name mismatch")
}
- local := osym.Flag&goobj2.SymFlagLocal != 0
- makeTypelink := osym.Flag&goobj2.SymFlagTypelink != 0
+ local := osym.Local()
+ makeTypelink := osym.Typelink()
size := osym.Siz
// Symbol data
if info.NoSplit != 0 {
s.Attr |= sym.AttrNoSplit
}
- if osym.Flag&goobj2.SymFlagReflectMethod != 0 {
+ if osym.ReflectMethod() {
s.Attr |= sym.AttrReflectMethod
}
- if osym.Flag&goobj2.SymFlagShared != 0 {
+ if osym.Shared() {
s.Attr |= sym.AttrShared
}
- if osym.Flag&goobj2.SymFlagTopFrame != 0 {
+ if osym.TopFrame() {
s.Attr |= sym.AttrTopFrame
}