Files
BFM-decomp/cookbook/C0490.md
T

2.3 KiB

§441 ★★ — THREE MORE INSTRUMENT DEFECTS FROM THE SAME SESSION, ALL OF WHICH BLAME THE SUBJECT (P31 S74)

Companion to §436/§437. Each one produced a confident, precise, WRONG verdict about a correct draft.

A. jtbl_rodata_pads, two measurement bugs in the island walk. _items matched a rodata anchor only as D_xxxxxxxx: and missed the labels.inc macro form dlabel D_xxxxxxxx that an inline __asm__ block in C produces (as expands it; cc1/maspsx pass it verbatim) — an 8-byte hole, after which every C jump table died with island layout drift. And the ctable branch read word(pos) without stepping the sub-word zero gap first, so a preceding .asciz ending at an odd address made it refuse a correct layout. Both accuse the carve; neither is the carve. (The third, the trailing .align, is §436-C.)

B. harvest_verify computed the duplicate-typedef strip-set UNSCOPED. cdecl.typedef_names(path) without above=fn — a parameter that exists for exactly this. A typedef declared BELOW the splice point is not in scope there, so the draft's own copy was the only one, and stripping it produced parse error before '<symbol>', logged as PLUMBING and indistinguishable from a real declaration conflict. One function was blocked by that alone, and its "conflict" evaporated with above=fn.

C. jr_isolate_all assumed PREAMBLE is byte-neutral. A §265 verbatim __asm__ body is none of parse_overlay_c's four addressed-anchor forms, so it attaches to the NEXT anchor as preamble — and it EMITS BYTES. Cutting at that anchor moves those bytes into the new object while the yaml says the region starts higher: measured 0x168 bytes of three other functions. _region_emit_start() now derives the offset from the region's CONTENT (item addresses plus every .globl/.ent its text names that resolves inside the object) and takes min(cut, emit), so a boundary can only move DOWN; where no verbatim asm is in play it equals the cut and nothing changes.

The habit these three share with §436 and §437: the tool reported something TRUE about a world that was not the one it was asked about, and the true-sounding message pointed at the draft. When a gate rejects a body you have byte-verified standalone, the first suspect is the gate.