mirror of
https://github.com/RetroPortingToolKit/psxrecomp
synced 2026-10-26 10:19:47 -04:00
fcb7cc9022
Root-cause class: load priority is static > gcc shard > sljit shard > interp, but it was only emergent from chain registration order (LIFO prepend), not enforced, and a superseded sljit shard was never retired. A shipped/optimized gcc DLL must outrank — and obsolete — a user machine's locally-JIT'd sljit shard for the same content. Fix (overlay_loader.c): when a gcc/DLL candidate registers (cand_register), retire any same-PC sljit shard JIT'd from IDENTICAL bytes (same crc_code) — blacklist it so it can never run even if the gcc candidate is later self-mod blacklisted. Precise by content: a sljit shard for a DIFFERENT overlay variant at the same address is distinct coverage and is kept. New counter s_sljit_obsoleted, surfaced via overlay_loader_sljit_obsoleted(). debug_server.c: sljit_status now reports live + obsoleted (observability for the validation playtest — measure, don't eyeball). Runtime-only (no regen). Refs SLJIT.md §11 Phase B. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>