aboutsummaryrefslogtreecommitdiffstats
path: root/fw/ta_diff.py (follow)
Commit message (Collapse)AuthorAge
* regenerate all 16 modules on one decoder; align the RPC naming so diffs mean ↵user2026-10-01
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | something Finishes the rebuild that was interrupted earlier and leaves the corpus on a single decoder version for the first time since the SVC-opcode work started. All 16 modules rebuilt clean, 16/16 self-port gates PASS, no duplicate names in any of the 99 builds, no address-derived names. The naming fix from the previous commit is now actually in the artifacts: 1,038 SVC stubs use the libdump's sysdrv_rpc_<N> convention instead of my own rpc_<N>. Six names persisted in fw/cgnames from when I wrote them by hand are converted too, otherwise they would have quietly reintroduced the inconsistency on the next rebuild. The 85 remaining bare rpc_ names are of the form gcp_asd_rpc_202 -- ASD's libdump names ported into other modules through shared code, so that is the libdump's own convention and correct to leave. Effect on diffs, which is why this mattered: the 22.0.4.49 -> 22.0.4.50 pair reported 8 functions added and 8 removed with no firmware change behind it, and now reports 4. The remaining 4 are a different and smaller problem, now documented in ta_diff.py: a function can carry a richer name in one build than another, gcp_cmdFE0C against gcp_cmdFE0C_CreateCryptoSession, because the semantic half comes from a pass that only reaches some builds. Corpus-wide the diffs are now usable. Adjacent patch versions average 0.5 changed functions in ras, 2.5 in wspe, 3.3 in merit, 4.6 in opm, up to 26 in xgmi where the builds are genuinely far apart. Added/removed should be read as "look at this" rather than ground truth; changed-function counts are sound. Metrics unchanged by the rebuild at 19,487 meaningful names (67.3%) and 75.8% field share, which is the point -- it confirms the mixed-decoder tree was not inflating anything.
* add fw/ta_diff.py: per-function cross-version diffs, and fix the naming it ↵user2026-10-01
exposed Asked whether the artifacts can produce meaningful version diffs yet. They could not, and measuring why gave a tool and a bug. A raw diff of two adjacent GCP builds changes 6-17% of lines, almost none of it firmware. The noise has four sources, measured: tier annotations like [tier=MNEM size=22] against [tier=EXACT size=22], which record how a name was derived rather than what the code does (42 of 302 changed lines on one pair); address-derived tokens such as off_40480C -> off_40481C and loc_4057E8 -> loc_4057F8, which shift wholesale when code is inserted upstream and whose normalisation alone takes one pair from 405 changed lines to 175; raw hex in JUMPOUT(0x4055E4); and IDA resolving a call site to a name in one build and loc_* in another, plus local renumbering. ta_diff.py normalises all four and reports per function rather than per line. On 22.0.0.73 -> 22.0.0.77 that turns 405 changed lines into 3 changed functions out of 111, and what survives is worth reading: two new switch arms, case 0x26 and case 0x27, in gcp_cmdFE08_KeyExchangeAuthenticatedSession -- new command IDs, which is the kind of finding this corpus exists to surface. Across the module, adjacent patch versions now show 2-7 changed functions and version-family jumps show 30-odd added and removed, which is the expected shape. The tool immediately caught a naming bug of mine. It reported 8 functions added and 8 removed between 22.0.4.49 and 22.0.4.50 with no firmware change behind it: the SVC-opcode pass emits <ta>_rpc_<HEX> while the libdump calls the same functions <ta>_sysdrv_rpc_<N>, and the decoded digits already agree exactly, so only the prefix differed. The pass now uses the libdump's convention. 1,188 names are affected and will align on the next regeneration. Not yet regenerated, so the corpus still carries the old convention; that is deliberate rather than forgotten, since a 10-module rebuild was interrupted earlier and the tree already mixes two decoder versions in gcp, opm and hdcp.