mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-27 05:56:00 -04:00
e2f64a7c62
MY HYPOTHESIS WAS WRONG AND THE AGENT SAID SO. I predicted the ownership oracle was blind to verbatim-asm owners. It is not. 0x800cedf8 is the §154-A LEADING RODATA ISLAND (the module-id header + jtbl/ptr table at segment offset 0), which rodata_carves already exempts via 'off == 0 and sub == ov'. The S68 first carve legitimately renamed that subseg to md_MAIN_003_jr_800D12D0 (§371: spimdisasm rodata migration is same-subseg-only), so the 'sub == ov' conjunct stopped firing and offset 0 leaked in as a 'carve'. The island has NO single owner BY DESIGN -- which is why the exemption exists -- so widening owner kinds could never have restored 1:1. The fix drops one conjunct: offset 0 alone is the honest structural key, because a carve is a table LIFTED OUT OF THE DATA TAIL and can never sit at the segment's own offset 0. Verified across all 213 configs: every offset-0 .rodata piece is an md_* leading island; ov_*/main have none. The R32 hard abort is UNTOUCHED -- this widens the recognised-island set, it does not soften the refusal. NEGATIVE CONTROL (R39) over all 184 binaries with .rodata pieces: OK 182 -> 183, ABORT 2 -> 1, and exactly ONE verdict moved (md_MAIN_003). The remaining us.exe abort (UNOWNED 0x80073238, the LZSS jtbl carve whose owner LzssDecodeSector does not live under src/us.exe/*.c) is byte-identical before and after -- PRE-EXISTING, not newly hidden, and logged rather than silently absorbed. Carve byte-neutral and bank byte-identical, both re-verified by my own rebuild: sha1 dd1b32ecf1103c6f7cf1943d25546a3046e17b14 == config/check.md_MAIN_003.sha. md_MAIN_003 12 -> 11 stubs. THREE o0_subsplit GAPS surfaced and hand-finished, and they must be fixed before the remaining 7 -O0 stubs here are carved: build_new_config drops a cut at the object start so region 0 kept the -O2 name while the tool PRINTED the _o0 name; parse_overlay_c folds pre-anchor text into the FOLLOWING anchor, so a verbatim body inside region 0 attached to region 1; and the island .rodata piece needs repointing to whichever TU ends up holding its emitters.