Commit Graph

3 Commits

Author SHA1 Message Date
cristian
fc4b527fd9 Rust tools: add ps-status --c-coverage and ps-fdiff --file
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>
2026-07-05 09:32:55 -04:00
cristian
49c07fe999 ps-core: match mapfile_parser .text symbol table exactly
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>
2026-07-05 09:32:55 -04:00
cristian
91cd790c86 Add Rust matching tools (ps-status, ps-firstdiff, ps-fdiff)
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>
2026-07-01 23:52:13 -04:00