func findPlan9Symbol(f *plan9obj.File, name string) (*plan9obj.Sym, error) { syms, err := f.Symbols() if err != nil { return nil, err } for _, s := range syms { if s.Name != name { continue } return &s, nil } return nil, fmt.Errorf("no %s symbol found", name) }
func loadPlan9Table(f *plan9obj.File, sname, ename string) ([]byte, error) { ssym, err := findPlan9Symbol(f, sname) if err != nil { return nil, err } esym, err := findPlan9Symbol(f, ename) if err != nil { return nil, err } sect := f.Section("text") if sect == nil { return nil, err } data, err := sect.Data() if err != nil { return nil, err } textStart := f.LoadAddress + f.HdrSize return data[ssym.Value-textStart : esym.Value-textStart], nil }