glibc's backtrace_symbols_fd reads only dynamic symbols, so a SIGSEGV's frames showed bare offsets. The handler now starts the executable again with --symbolize, which reads the frames' functions from its own symbol table; the crashed process makes only async-signal-safe calls, and the raw frames still come first. Assisted-by: claude-opus-5.5