{"record":{"id":"25437b97d3974267","repo":"golang/go","slug":"no-s-symbol-found-25437b","errorCode":null,"errorMessage":"no %s symbol found","messagePattern":"no (.+?) symbol found","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cmd/internal/objfile/plan9obj.go","lineNumber":108,"sourceCode":"\t\treturn 0, nil, fmt.Errorf(\"text section not found\")\n\t}\n\ttextStart = f.plan9.LoadAddress + f.plan9.HdrSize\n\ttext, err = sect.Data()\n\treturn\n}\n\nfunc findPlan9Symbol(f *plan9obj.File, name string) (*plan9obj.Sym, error) {\n\tsyms, err := f.Symbols()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfor _, s := range syms {\n\t\tif s.Name != name {\n\t\t\tcontinue\n\t\t}\n\t\treturn &s, nil\n\t}\n\treturn nil, fmt.Errorf(\"no %s symbol found\", name)\n}\n\nfunc loadPlan9Table(f *plan9obj.File, sname, ename string) ([]byte, error) {\n\tssym, err := findPlan9Symbol(f, sname)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tesym, err := findPlan9Symbol(f, ename)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tsect := f.Section(\"text\")\n\tif sect == nil {\n\t\treturn nil, err\n\t}\n\tdata, err := sect.Data()\n\tif err != nil {\n\t\treturn nil, err","sourceCodeStart":90,"sourceCodeEnd":126,"githubUrl":"https://github.com/golang/go/blob/b6b368adc57c96c3151d224d172029f233ead2c3/src/cmd/internal/objfile/plan9obj.go#L90-L126","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Rebuild the binary without aggressive stripping so pclntab/epclntab are retained.","For very old Go 1.3 binaries, rely on the caller's existing legacy-symbol fallback rather than the new names.","Verify you are pointing the tool at a Plan 9 Go binary, not an unrelated object."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"// sym, err := findPlan9Symbol(f, name)\n// if err != nil {\n//     // 'no <name> symbol found' -> stripped/legacy binary\n//     return nil, err\n// }","preventionTips":["Retain pclntab/epclntab symbols when stripping Plan 9 binaries.","Match the symbol names to the binary's Go version.","For Go 1.3 binaries, rely on the caller's legacy-symbol fallback."],"tags":["plan9","symbol","objfile","pclntab"],"analyzedSha":"b6b368adc57c96c3151d224d172029f233ead2c3","analyzedAt":"2026-08-12T00:22:02.250Z","schemaVersion":2},"datasetVersion":"2026-08-12T08:17:17.861Z"}