// sh.info is the index of first non-local symbol (number of local symbols)
s := ctxt.Syms.Lookup(".dynsym", 0)
i := uint32(0)
- for sub := s; sub != nil; sub = sub.Sub {
+ for sub := s; sub != nil; sub = symSub(ctxt, sub) {
i++
if !sub.Attr.Local() {
break
}
}
+func symSub(ctxt *Link, s *sym.Symbol) *sym.Symbol {
+ if lsub := ctxt.loader.SubSym(loader.Sym(s.SymIdx)); lsub != 0 {
+ return ctxt.loader.Syms[lsub]
+ }
+ return nil
+}
+
func (ctxt *Link) dumpsyms() {
for _, s := range ctxt.loader.Syms {
if s == nil {
continue
}
- fmt.Printf("%s %s reachable=%v onlist=%v outer=%v sub=%v\n", s, s.Type, s.Attr.Reachable(), s.Attr.OnList(), s.Outer, s.Sub)
+ fmt.Printf("%s %s reachable=%v onlist=%v outer=%v sub=%v\n", s, s.Type, s.Attr.Reachable(), s.Attr.OnList(), s.Outer, symSub(ctxt, s))
for i := range s.R {
fmt.Println("\t", s.R[i].Type, s.R[i].Sym)
}
dst.Attr.Set(sym.AttrCgoExportStatic, l.AttrCgoExportStatic(src))
dst.Attr.Set(sym.AttrReadOnly, l.AttrReadOnly(src))
- // Convert outer/sub relationships
+ // Convert outer relationship
if outer, ok := l.outer[src]; ok {
dst.Outer = l.Syms[outer]
}
- if sub, ok := l.sub[src]; ok {
- dst.Sub = l.Syms[sub]
- }
// Set sub-symbol attribute. See the comment on the AttrSubSymbol
// method for more on this, there is some tricky stuff here.