399da98a83
Every cross-reference used to need a hand-written config/symbols.tsv row, which does not scale to a batch. A symbol whose name is an address now resolves to that address with no row: func_XXXXXXXX, D_XXXXXXXX, g_XXXXXXXX, lbl_XXXXXXXX. This is the convention the registry already used, applied without the row. The names come from the object's own undefined-symbol list (nm -u), not from a guess about the source, so a name the source defines but never references is never mistaken for one needing resolution. A registry row still wins, which is how a gp marker or a real name is attached. Anything neither registered nor address-shaped now fails before the link with a message naming the symbol and the fix, instead of a bare ld diagnostic. First match from the worklist: func_800F8F9C (36 bytes, worklist rank 3), a duplicate-group representative with a frame and a call. It matched on the first attempt and is registered twice (0x800F8F9C, 0x80109314) against one source, so two functions were matched for one body. Its callee needed no registry row. Ghidra's independent body agrees with the derived extent. make gate: c_regions=14, 0 differing bytes, SHA-1 e173426c. 168 synthetic tests.