fix(parsers): retain independent facts and boundary identity

Share bounded ELF section-name decoding across native and note readers; retain read-only ranges and coverage reasons when names are unknown. Preserve ELF symbol-version bytes, dyld-bound method uncertainty, partial gRPC-Web trailers, and per-parent model identity checks. Compare GPU signatures as bytes and require a PTX module header. Share selected-path errno classification across EVM and BEAM.

Validation: 397 shared-parser tests passed (one existing skip), 5 MCP schema tests passed, 14 EVM error-mapping tests passed, and 23 protobuf CLI/MCP matrix cases passed across focused runs. Build, typecheck/lint, docs, formatting, and 2134-file discovery passed. Full EVM provider workflow remains locally unverified on Darwin arm64; format controls are synthetic.

Fixes #6738
Fixes #6737
Fixes #6745
Fixes #6740
Fixes #6749
Fixes #6747
Fixes #6739
This commit is contained in:
morluto
2026-10-23 22:18:43 +08:00
parent a68cfd7db0
commit 99d2d7ad22
45 changed files with 1209 additions and 176 deletions
@@ -8,6 +8,7 @@ import { readIl2cppMetadataForLinking } from "../../../src/il2cpp/Il2cppMetadata
import {
createElfFixture,
createIl2cppBinaryFixture,
createIl2cppDyldBindFixture,
createUniversalFixture,
createSplitPointerPeFixture,
FIXTURE_BINARY_BASE,
@@ -577,6 +578,22 @@ it("reports a symbol-relocated method slot as unknown rather than no-body", () =
expect(linked.method_addresses[0]).toEqual(expectedAddresses[0]);
});
it.each([0n, FIXTURE_BINARY_BASE + 0x210n])(
"keeps a dyld-bound method slot unknown regardless of its raw word %s",
(raw) => {
const linked = link(createIl2cppDyldBindFixture(raw));
expect(linked.method_addresses[1]).toEqual(expectedAddress("unknown"));
expect(linked.method_addresses[0]).toEqual(expectedAddresses[0]);
expect(linked.method_addresses[4]).toEqual(expectedAddress("no-body"));
},
);
it("keeps unbound Mach-O method words classified from their values", () => {
const linked = link(createIl2cppBinaryFixture());
expect(linked.method_addresses[1]).toEqual(expectedAddresses[1]);
expect(linked.method_addresses[4]).toEqual(expectedAddress("no-body"));
});
it.each([
["PC32", 2],
["ABS32", 10],