apache/beam · error

no symbol

Error message

no symbol %q

What it means

SymbolTable.Sym2Addr returns the address for a symbol name. This error means the symbol name string is not a key in the table's sym2Addr map — the named function was never registered or does not exist in this binary.

Solutions

  1. Check the exact symbol spelling including package path (e.g. github.com/apache/beam/sdks/go/pkg/beam.func)
  2. Confirm the function is actually linked in (not eliminated by the linker) and referenced somewhere
  3. List the table's known symbols (or use addr2name tooling) to find the correct name

Example fix

// before
addr, err := table.Sym2Addr("beam.createFn.Call") // typo
// after
addr, err := table.Sym2Addr("github.com/apache/beam/sdks/go/pkg/beam.(*createFn).Call")
Defensive patterns

Strategy: validation

Validate before calling

if symbol == "" { return errors.New("empty symbol name") } // and verify symbol exists in table before use

Type guard

func hasSym(s *symtab.SymbolTable, name string) bool { _, err := s.Sym2Addr(name); return err == nil }

Try / catch

addr, err := table.Sym2Addr(symbol)
if err != nil { return fmt.Errorf("cannot resolve %q: %w", symbol, err) }

Prevention

When it happens

Trigger: Calling Sym2Addr with a misspelled function name, an unexported/inlined function not present in the table, or a symbol from a package not linked into the binary that built the table (New calls Sym2Addr internally).

Common situations: Typo'd fully-qualified Go symbol names in configuration, function renamed after a refactor, or symbol dead-code-eliminated by the linker.

Understand the failure class

Background: Record Not Found Errors: "not found", RecordNotFound, and "was not found" — what they mean and how to fix them — this error's family across 28 libraries.

Related errors


AI-assisted analysis of apache/beam@12126d8942 (2026-09-13). Data as JSON: /api/errors/0bd02d43054a3fad. Report an issue: GitHub.

Appendix: source

Thrown at sdks/go/pkg/beam/core/util/symtab/symtab.go:176

	frame, _ := frames.Next()
	return frame.Func.Name()
}

// Addr2Sym returns the symbol name for the provided address.
func (s *SymbolTable) Addr2Sym(addr uintptr) (string, error) {
	addr -= s.offset
	sym, ok := s.addr2Sym[addr]
	if !ok {
		return "", errors.Errorf("no symbol found at address %x", addr)
	}
	return sym, nil
}

// Sym2Addr returns the address of the provided symbol name.
func (s *SymbolTable) Sym2Addr(symbol string) (uintptr, error) {
	addr, ok := s.sym2Addr[symbol]
	if !ok {
		return 0, errors.Errorf("no symbol %q", symbol)
	}
	return addr + s.offset, nil
}

View on GitHub (pinned to 12126d8942)