Support the C-first campaign: globalasm now detects whether each GLOBAL_ASM
is behind a NON_MATCHING guard; ps-status --c-coverage reports guarded vs
bare counts (the "bare -> 0" metric) with --list/--json; ps-fdiff --file
summarizes every function in a source object, ranked closest-first.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The map parser dropped symbol-less contributions and vram==0 archive
members, undercounting progress by 6980 bytes vs progress.py. Skip
unallocated (vram==0) contributions and synthesize a $_static_symbol for
the leading gap before a contribution's first named symbol, matching
mapfile_parser symbol-for-symbol (8240 symbols / 2204464 bytes).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Introduce a cargo workspace under tools/rust/ with a shared ps-core
library and three binaries for the byte-for-byte matching effort:
- ps-status: status of functions pending decompilation. Build-free mode
scans GLOBAL_ASM in src/ (validated: 190 funcs across 68 files, matching
grep); build-aware mode reports byte progress per folder from the linker
.map, porting the progress.py metric.
- ps-firstdiff: first difference(s) between built and expected ROM, with
function naming and jal-target resolution (like tools/first_diff.py).
- ps-fdiff: non-interactive per-function asm diff of built ROM vs baserom
(like ./diff.py -mwo <func>).
ps-core provides parsers for GLOBAL_ASM, symbol_addrs, and GNU ld .map
files (with vram/vrom lookups), a .z64 reader with md5 verification, and a
rabbitizer wrapper for disassembly. All parsers are unit-tested.
Wired into tools/Makefile (cargo build, skipped with a warning if cargo is
absent), target/ gitignored, and documented in README.md and
tools/rust/README.md.
The Python scripts (progress.py, tools/first_diff.py, diff.py) are kept in
place: only the build-free ps-status path can be validated without a ROM
and toolchain. Parity of the build-dependent tools must be confirmed in a
full build environment before removing the Python equivalents.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>