Repository navigation
fix(tools): resolve Windows system library suffixes in audits - #8719
Conversation
|
One Windows-specific edge case I think is still uncovered: |
|
Independent Linux test result on the published head |
|
Some comparisons could not be completed because a pull request conflicts with the base branch. Review these shared files manually before concluding that there is no overlap.
|
|
I reproduced the case-sensitivity edge case against this exact head in an isolated Linux fixture: |
|
I prepared a follow-up for the case-sensitive Windows provider lookup. The direct push to this branch was denied (403), so I put the commit on my fork for you to cherry-pick if useful: 037ad5dd96 — |
|
One Windows case remains in this suffix resolution: the provider membership check compares the normalized |
|
Applied your offered commit I also reran the actual Mari0 diagnostic inputs. With one frozen provider exposed under The refreshed 806-PR comparison against |
MarcZX10
left a comment
There was a problem hiding this comment.
Reviewed exact head 037ad5dd967f0f2e8e1ada34482973e607de6efb. The lookup keeps exact-case matches first, accepts a case-folded match only when unique, and returns the actual provider filename, avoiding both false missing-library reports and arbitrary selection when names collide. The added strict-provider regression covers libscea.sprx resolving to LibSceA.prx.
Local validation on this head: python3 -m unittest tools.tests.test_import_audit — 125 tests passed, 1 skipped; conventions passed; git diff --check passed. The author also reports Windows audit tests and validation against the Mari0 diagnostic inputs. I did not run a full project build.
|
Linux data point for
|
|
Independent Windows run, as data only (Windows 11 Enterprise 10.0.22621, Python 3.15). Head 037ad5d.
AI-assisted (Claude Code). |
What
Mari0's registry names SDK .sprx dependencies while Windows loads their .prx providers, producing ten false missing-library reports. Normalize .sprx/.suprx/.debug_prx only when the corresponding actual Windows PE system provider exists. Preserve guest-module precedence, literal ELF host names, and physical host-to-host dependency checks.
Review update: Windows suffix lookup now preserves exact-case matches, resolves a unique case-insensitive PE provider to its actual filename, and leaves ambiguous matches unresolved. Current head is
037ad5dd967f0f2e8e1ada34482973e607de6efb, the original AI-assisted commit authored by MarcZX10, applied by fast-forward without rewriting it. Its mixed-case regression fails on the previous head and passes here. Windows x64 / Python 3.13.7: 123 audit tests ran, 120 passed and 3 platform cases skipped; 2 commit-producing Git fixtures were deliberately excluded. Conventions and diff whitespace checks pass. Fresh Mari0 audit runs retain the original results; a separate library layout exposing the unchanged libSceAudioOut bytes asLIBSCEAUDIOOUT.prxreproduces one false missing dependency on the previous head and removes it here. Original package, registry and library hashes remain unchanged. This is an accommodated diagnostic workflow, not guest execution. The earlier validation below remains tied to its stated commits.Tested
Commit
cf17f057303109c05ad5957d359b857a8f5c7b0d; branchfix/audit-windows-system-suffixes. Full audit suite: 124 tests run in 5.368 s, 3 platform skips, passed. Command:python -m unittest discover -s tools/tests -p test_import_audit.py.Exactly 10 false missing-library reports disappear; complete import records and counts remain identical. Baseline fails all three SDK suffix cases; fixed passes, including controls for literal ELF names and guest precedence.
Windows 11 x64; Python 3.13.7. Fresh baseline
d97361bd0df0a54b11570602391aa003bff31047. The same focused regression fails on baseline for the intended behavior and passes with this commit. Full audit suites ran after rebasing; no tracked source edits were needed during validation.Homebrew/title evidence — indirect diagnostic workflow: Mari0 1.6.2 from websrv v0.34. Archive SHA-256
e0331ed5a22e7fe72843d268cd2c8b297d761a75b7c83d828f5cc58a82a72ce3; original love.elf54bcc91670fd759bbd3488284dce351b6421cb83016e9ad8da6b5186da067a39; shipped libOSMesa.so.8128d2ab20b980b96decb1f20a9ed57d10cc922605259666b63efa52963920f0a.Fresh baseline/fixed audits use the unchanged registry generated earlier from that original package, its original shipped modules, and the same 126 hashed system-library artifacts from
af691b717ad068bb93ac50bfc428af63ab259613. Historical conversion used relinker baseline11ee778434dacf31f2ce0ecff8229e0839e36b34with--windows --trap-sdk-syscall-stubs --registry --sce-module-path <original-Mari0> --module-dir . <original-Mari0>/love.elf <evidence>/mari0/love.exe. The trap flag, explicit module directory, external output directory, and older frozen system libraries are disclosed accommodations. This publication check does not claim reconversion with new main, game startup, guest execution, gameplay, GPU testing, or physical-PS5 behavior.The fresh command on each tool is
python <tool>/import_audit.py <pinned>/love.registry.json --libs <frozen-libraries> --source <rebased-source>/core/libs/prx --modules <original-Mari0> --json <report>. All audit runs retain exit 1 for unrelated unresolved imports. Package, registry, and library hashes remain unchanged. Every run retains 882 references and class counts{'implemented': 848, 'stub': 12, 'absent': 7, 'module': 0}; assertions check the report improvement directly.The tree-only merge of both exact rebased commits (
f92844fb00837d6d4ac66d5e7942358a0ffd782e) also passes 125 tests, with 4 skips (3 platform skips and 1 Git-fixture skip outside a checkout). Its Mari0 audit jointly preserves all 12 corrected weak flags and removes exactly 10 false missing-library reports.Historical native validation only: before rebasing, the relinker-only build passed 303 targets under MinGW-w64 GCC 15.2.0. Broad CTest reported 211 passed, 1 failed, 1 skipped of 213. The unrelated shader_cache_runtime_sources fixture could not find Ninja; isolated runs with explicit toolchain PATH passed on baseline (65.67 s) and fixed (61.76 s). That existing fixture exceeds 30 s locally; no timeout or unrelated source was changed. long_paths remained skipped. The previous suffix branch's registered import_audit CTest passed in 18.64 s. These results are not fresh native builds of the rebased commits; this change affects Python audit tooling only.
Fresh overlap: complete 800-PR inventory against
339217ebc90f6fe91556525425aa18292d5f563b, exact peer heads, implementation review, and tree-only merge comparisons. Tested base is d97361b; the subsequent main changes affect unrelated audio libraries. Both topics merge cleanly with checked main and with each other, including newly opened #8718 at 700be18. #8572 (missing-directory hints) and #7460 (PE optional-header bounds) merge cleanly and implement different behavior. Both topics have a text conflict with #6171 (35bf15c510cb50ee8152d911c686e5eccdb95c15); the resolution must retain its declared aliases and physical host-module set together with this change. #7454 (11840ad87c4065873cb2923b2367232d33bbe5ee) already conflicts with main in audit_host_dependencies, so its pairwise result remains inconclusive. No semantic duplicate identified. #8124's guest ModuleNames support is already on main and is preserved.Recorded report assertions: 882 references; implemented 848, stub 12, absent 7, module 0. Weak-only: exactly 12 binding flags corrected and every other import field unchanged. Suffix-only: exactly 10 false missing-library reports removed and complete import records unchanged. Combined: both improvements preserved. Registry SHA-256
d9e9cf8cf2639221e61ba5600298130c452f1e53f8572e8b363ba43c40cbb053. All input hashes were checked before and after.The #6171 conflict is near main module setup: retain its host_modules filename set for host checks and add windows_libraries=windows to audit().
Checked overlapping heads: #8572
6736aa663d3234cf024af69162f40db455586375, #746070986ca71f0d44aec7d9e06b3ae7e47c7c08bcc2, #745411840ad87c4065873cb2923b2367232d33bbe5ee, #617135bf15c510cb50ee8152d911c686e5eccdb95c15. No merge ordering has been agreed with #6171.Checklist
main; no other open PR implements the same functionsNotImplemented_nid_no_patch); silent stubs are listed under Silent stubs in their library's technical debt file.mdfiles or images added to the repository (attach them to this PR)