golang/go · error

no %s symbol found

Error message

no %s symbol found

What it means

findPlan9Symbol walks the Plan 9 symbol table looking for an exact Name match and returns it; if no symbol matches, the lookup failed. This is used to locate 'pclntab'/'epclntab' (and the legacy 'pclntab' fallback) needed to recover function metadata.

Source

Thrown at src/cmd/internal/objfile/plan9obj.go:108

		return 0, nil, fmt.Errorf("text section not found")
	}
	textStart = f.plan9.LoadAddress + f.plan9.HdrSize
	text, err = sect.Data()
	return
}

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

View on GitHub (pinned to b6b368adc5)

Solutions

  1. Rebuild the binary without aggressive stripping so pclntab/epclntab are retained.
  2. For very old Go 1.3 binaries, rely on the caller's existing legacy-symbol fallback rather than the new names.
  3. Verify you are pointing the tool at a Plan 9 Go binary, not an unrelated object.
Defensive patterns

Strategy: try-catch

Try / catch

// sym, err := findPlan9Symbol(f, name)
// if err != nil {
//     // 'no <name> symbol found' -> stripped/legacy binary
//     return nil, err
// }

Prevention

When it happens

Trigger: Calling findPlan9Symbol with a name that does not exist in the Plan 9 object's symbol table — most commonly 'runtime.pclntab' / 'runtime.epclntab' on a stripped binary.

Common situations: A Plan 9 Go binary stripped of its pclntab symbols (e.g. via -ldflags '-s -w' on a Go version that removes them), or an old Go 1.3 binary without the new symbol names.

Related errors


AI-assisted analysis of golang/go@b6b368adc5 (2026-08-12). Data as JSON: /api/errors/25437b97d3974267. Report an issue: GitHub.