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.