The frequency enrichment survives the redo; the disassembly does not
Redone through overlay_bytes_at, the verified flat mapping:
functions kept 2,313
moby_classes 0x00c0 391 (displaced: 394)
best neighbour (0x00c8) 15 (displaced: 4)
bucket n 0xc0 best neighbour ratio (displaced)
0-15 1,033 73 2 36.5x 72.0x
16-31 759 118 4 29.5x 29.8x
32-47 283 89 2 44.5x 34.7x
48-63 118 41 3 13.7x 19.5x
64-79 55 32 2 16.0x 15.5x
80-95 37 22 2 11.0x 13.0x
The reason it survives is worth stating, because it separates the two results. The
displacement was uniform -- every window shifted by the same amount -- so a
function's contents barely changed, and a frequency count over a window is robust
to that. A disassembly is not: it depends on the exact byte alignment, which is
what was wrong. Hence 394 becoming 391 with the same shape, while the 0x3a8060
walk and the 16-byte stride evaporated entirely.
So the investigation was not "all wrong". Precisely:
- the frequency enrichment is real, now on verified bytes, with a test that fails
if it goes;
- the disassembly was never real, and the whole jal chain built on it is retracted;
- no loader has been located, and 0x2ee138 is VU microcode.
THE LESSON IS ABOUT WHICH MEASUREMENTS SURVIVE A MISTAKE
A count over a window tolerates a constant displacement. A decode does not. Sixteen
probes leaned on the kind that does not tolerate it, and reported each with the
same confidence as the kind that does. Nothing about the numbers distinguished them
at the time -- that is the whole difficulty, and why the verification in cd16485
was the missing step rather than a formality.
Next: the ~391 functions are a legitimate shortlist, but consuming them means
disassembly through tools/overlay-anchors, whose output is now checked against a
word the build pins.
286 passing with the disc present (23 + 19 + 66 + 156 + 22; disc binary 34.89s),
clippy clean.
This commit is contained in:
@@ -2499,3 +2499,45 @@ The honest next step is to redo the frequency measurement with `overlay_bytes_at
|
||||
and the decomp extents, and to accept that it may well produce nothing -- the
|
||||
`0xc0` enrichment was a property of displaced windows, and there is no reason to
|
||||
expect it to survive.
|
||||
|
||||
|
||||
### The frequency result survives; the disassembly does not
|
||||
|
||||
Redone through `overlay_bytes_at`:
|
||||
|
||||
functions kept 2,313
|
||||
moby_classes 0x00c0 391 (displaced: 394)
|
||||
best neighbour (0x00c8) 15 (displaced: 4)
|
||||
|
||||
bucket n 0xc0 best neighbour ratio (displaced ratio)
|
||||
0-15 1,033 73 2 36.5x 72.0x
|
||||
16-31 759 118 4 29.5x 29.8x
|
||||
32-47 283 89 2 44.5x 34.7x
|
||||
48-63 118 41 3 13.7x 19.5x
|
||||
64-79 55 32 2 16.0x 15.5x
|
||||
80-95 37 22 2 11.0x 13.0x
|
||||
|
||||
**It survives, and the reason is worth stating because it separates the two
|
||||
results.** The displacement was uniform -- every window shifted by the same amount
|
||||
-- so a function's *contents* barely changed and a frequency count over a window is
|
||||
robust to it. A disassembly is not: it depends on the exact alignment of the bytes,
|
||||
which is precisely what was wrong. Hence 394 -> 391 with the same shape, while the
|
||||
`0x3a8060` walk evaporated entirely.
|
||||
|
||||
So the correct summary of this investigation is not "it was all wrong". It is:
|
||||
|
||||
- **the frequency result is real**, and is now measured on verified bytes with a
|
||||
test that will fail if the enrichment goes;
|
||||
- **the disassembly result was never real**, and the whole `jal` chain built on it
|
||||
is retracted;
|
||||
- **no loader has been located**, and 0x2ee138 is VU microcode.
|
||||
|
||||
The lesson is about which measurements survive a mistake and which do not, not
|
||||
about avoiding mistakes. A count over a window tolerates a constant displacement; a
|
||||
decode does not. Sixteen probes leaned on the kind of measurement that does not,
|
||||
and reported every one with the same confidence as the kind that does.
|
||||
|
||||
**Next:** with the mapping verified and the enrichment confirmed, the ~391 functions
|
||||
are a legitimate shortlist -- but the disassembly that would consume them must go
|
||||
through `tools/overlay-anchors`, whose output has now been checked against a word
|
||||
the build pins.
|
||||
|
||||
Reference in New Issue
Block a user