Repository navigation
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Progress report (1c8c0ef → 05a1f4f)📉 System libraries: 26.64% (-0.0058%, +8 declared functions) 🆕 8 declared as stubs
Changed libraries (implemented exports)
|
XairRrR
left a comment
There was a problem hiding this comment.
Reviewed — approved
The PR adds 8 libScePsml MFSR exports as throwing placeholders. Each name hashes to its claimed NID, each is declared once in a header the libScePsml_debug.hpp umbrella includes, each is exported once from both libScePsml.prx and libScePsml_debug.prx, and a debt entry lists them all. The relevant checks and tests pass.
What I ran
Head 05a1f4fe579d261802150d903af70cbd13eaa9ff, main 1c8c0efc8c41314402e6966da5bef6ea3d639d10, merged tree 6d4caf6b0a0bae397bfa14f62a33851c2a9b1cfd, on Debian 13 (VM, 32 vCPU Xeon Gold 6136), GCC 14.2.0, Release, Ninja.
git diff --check 1c8c0efc8c41314402e6966da5bef6ea3d639d10...05a1f4fe579d261802150d903af70cbd13eaa9ff
python3 tools/check_conventions.py --base 1c8c0efc8c41314402e6966da5bef6ea3d639d10
python3 tools/nid_names.py --name <each of the 8 names, plus PsmlGetContextMemoryRequirements and PsmlContextInitialize>
git grep -n -E "<the 8 names and NIDs>" -- . ":!docs/dev/debt/libScePsml_debug.md"
nm -D --defined-only build/core/libs/libs/libScePsml.prx # counted each NID
nm -D --defined-only build/core/libs/libs/libScePsml_debug.prx # counted each NID
ctest --test-dir build -j8 --test-load 32 --output-on-failure -R "^(guest_psml|public_headers|conventions_unknown_nids|conventions_debt_length|conventions_doc_links|debt_split)$"
The build and the selected test run by the prepare script are in build.json.
Results
| Check | Result |
|---|---|
git diff --check |
clean |
check_conventions.py |
All conventions checks passed |
Configure / build / libs (script) |
ok |
| Selected tests (script) | 820 ran, 816 passed, 3 skipped (all expected per check_skips.py). 0 new failures, 0 timeouts. 1 known failure that also fails on main (unwrap_self_UnwrapTest_test_new_output_inherits_the_destination_directory_group), not caused by this PR |
| Name → NID hashes | all 8 match the table in the description and in the debt entry |
| KytyPS5 labels | PsmlGetContextMemoryRequirements → OSi13dtYJIk, PsmlContextInitialize → p2oRiEbDdOE: these do not match the new NIDs, as the description says |
| Duplicate declarations or NIDs elsewhere in the tree | none; the only hits are Export.cpp and LaterExports.hpp |
Exports in libScePsml.prx / libScePsml_debug.prx |
each of the 8 NIDs defined exactly once in each |
guest_psml, public_headers, conventions_unknown_nids, conventions_debt_length, conventions_doc_links, debt_split |
6/6 passed |
Focused ctest run
1/6 Test #503: public_headers ................... Passed 62.36 sec
2/6 Test #3058: guest_psml ....................... Passed 0.01 sec
3/6 Test #60: conventions_doc_links ............ Passed 0.12 sec
4/6 Test #62: conventions_debt_length .......... Passed 0.16 sec
5/6 Test #61: conventions_unknown_nids ......... Passed 1.84 sec
6/6 Test #103: debt_split ....................... Passed 1.90 sec
100% tests passed, 0 tests failed out of 6
public_headers is an existing test, not one this PR adds or changes. It took 62 s here, on a machine shared with other builds. I did not time it on main, so I do not attribute this to the PR.
Export counts (nm -D)
== libScePsml.prx
2ecEbQaf9VU 1 pwUkfVu0c0c 1 vUk2pWMx3KQ 1 EO9YQXmJEN8 1
sjTyYheKTrU 1 IMlj247LdTo 1 CN7uea0UQso 1 wHto4IznfBE 1
== libScePsml_debug.prx
2ecEbQaf9VU 1 pwUkfVu0c0c 1 vUk2pWMx3KQ 1 EO9YQXmJEN8 1
sjTyYheKTrU 1 IMlj247LdTo 1 CN7uea0UQso 1 wHto4IznfBE 1
Negative control
None. The PR adds and changes no tests, and the project rules forbid tests that only check that a symbol is exported.
Findings
Blocking
None.
Non-blocking
None.
Code notes:
- The bodies in
core/libs/prx/libScePsml_debug/Export.cpp:372-402have noreturnstatement. This is well-defined:NotImplemented_nid_no_patchis declared[[noreturn]]incore/libs/prx/libc/include/General.hpp:15. core/libs/prx/libScePsml_debug/include/LaterExports.hpphas one declaration per export, and the umbrellalibScePsml_debug.hppincludes it, as CONTRIBUTING.md requires.public_headerspasses.- The debt entry is under "Unknown function info" in
docs/dev/debt/libScePsml_debug.md. It states first what is unverified (the parameter lists, return types, firmware version each form serves and behaviour) and says the declarations are placeholders. - The code has no comments. The PR claims no title unblock, and its checklist lines are filled in.
Not verified
- I did not check the 13.60 inventory or the ps5rs
nids.csvcontents and their SHA-256: there is no network here. I only checked that each name hashes to its NID. - I could not check that the unversioned,
800M3andFrom2023Julynames are the real Sony export names, rather than names that only hash to the right NIDs. The method is sound, but the names are still inferred. - I did not check the Windows (MinGW) build and run described in the PR.
- The script skipped the Vulkan validation-layer comparison because no changed file is under the AGC driver, shader recompiler or VideoOut paths. It does not apply to this PR.
✅ AMD GPU test: passedPR head
Unstable on main (1, these also failed in recent main runs on this machine; not counted against this PR)Failing on main too (3, not counted against this PR)Validation IDs already present on main (8 IDs in 467 tests)Skipped (8)ReproduceAutomated build and test on a contributor's AMD machine; it does not replace upstream CI. A new comment is posted for each new push. Full logs. |
|
GitHub checks are passing on AI-assisted: yes (Codex). |
What
Declare the 8
libScePsmlfunction exports of the PS5 13.60 export inventory that are not yet declared, as throwing placeholders. Five of them (the KytyPS5 labels listed below) are the NIDs that #12063 asked to be confirmed. The inventory gives no name for any of them, and the pinned NID database has none of the names below, but each name hashes exactly to its NID withtools/nid_names.py --name. The image label does not authenticate a retail firmware version. No game unblock is claimed.800M3andFrom2023Julyforms of three existing export families:scePsmlMfsrCreateContext(2ecEbQaf9VU),scePsmlMfsrCreateContext800M3(pwUkfVu0c0c),scePsmlMfsrCreateContextFrom2023July(vUk2pWMx3KQ),scePsmlMfsrGetContextBufferRequirement(EO9YQXmJEN8),scePsmlMfsrGetContextBufferRequirement800M3(sjTyYheKTrU),scePsmlMfsrGetContextBufferRequirementFrom2023July(IMlj247LdTo),scePsmlMfsrGetDispatchMfsrPacket(CN7uea0UQso) andscePsmlMfsrGetDispatchMfsrPacketFrom2023July(wHto4IznfBE).scePsmlMfsrGetDispatchMfsrPacket,scePsmlMfsrCreateContext800M3andscePsmlMfsrGetDispatchMfsrPacketFrom2023July) are in ps5rsdata/nids.csv(SHA-256e6b1ddfa65b18be3f17e4539ae4dff0b956d0a0c27cc58e4aaa181ae9c8bec82). For the other five that file has only KytyPS5's labels,PsmlGetContextMemoryRequirementsandPsmlContextInitialize, which KytyPS5 comparison: export gaps needing maintainer direction (ASan module, Psml NIDs, LoginDialog, throwing surface) #12063 quotes. Those labels do not hash to these NIDs: they giveOSi13dtYJIkandp2oRiEbDdOE, and with thesceprefixjUxLcoPab4kandSOaQoTw-vDI. The labels are descriptive, not export names: the same file labelsRUNLFro+qok, which isscePsmlMfsrGetDispatchMfsrPacket900onmain, asPsmlDispatch. The five names here come from the existing families with the version suffix replaced by nothing,800M3orFrom2023July, the suffixes that ps5rs gives for the other three. So, as KytyPS5 comparison: export gaps needing maintainer direction (ASan module, Psml NIDs, LoginDialog, throwing surface) #12063 guessed, these are more versions of the MFSR context and dispatch calls, not new functions.Signatures, the firmware version each form serves, and behavior are unverified. The bodies of the versioned
1100and1300forms onmainare not reused, because nothing shows that these forms take the same arguments. Every entry is a parameterlessintdeclaration that only resolves imports, and every body callsNotImplemented_nid_no_patch. The declarations follow #15347: they are in a new headerinclude/LaterExports.hpp, which thelibScePsml_debug.hppumbrella includes, and in a separateextern "C"block inExport.cpp, with a debt entry that lists every name and NID.libScePsmlandlibScePsml_debugare built from this one source, so both libraries export the 8.The list is the inventory's 27 function records for
libScePsmlminus the 19 already exported onmain(1c8c0efc8c) by name hash (tools/nid_names.py --where). With these 8, every record is exported. Other PSML logical libraries still have 13.60 gaps: 3 oflibScePsml_nosubmission, 1 oflibScePsml_set_mfsrversion, and all 6 oflibScePsmlBcSisr, which has no module in the tree. They are not part of this pull request.scePsmlMfsrCreateContext2ecEbQaf9VUscePsmlMfsrCreateContext800M3pwUkfVu0c0cscePsmlMfsrCreateContextFrom2023JulyvUk2pWMx3KQscePsmlMfsrGetContextBufferRequirementEO9YQXmJEN8scePsmlMfsrGetContextBufferRequirement800M3sjTyYheKTrUscePsmlMfsrGetContextBufferRequirementFrom2023JulyIMlj247LdToscePsmlMfsrGetDispatchMfsrPacketCN7uea0UQsoscePsmlMfsrGetDispatchMfsrPacketFrom2023JulywHto4IznfBETested
libsandguest_psml_testsat this commit (on top ofmain1c8c0efc8c). Then I ranguest_psml, the only test registered by the PSML CMake files, andpublic_headersthree times. Both passed on every run, with none skipped.conventions_unknown_nids,conventions_debt_length,conventions_doc_linksanddebt_split) ran in the same ctest invocations and passed on every run on both systems, none skipped, so each run had 6 tests. They test the convention checker itself, not these declarations.libScePsml.prxandlibScePsml_debug.prxeach export each of the 8 NIDs once on both systems (objdump -pon Windows,nm -Don Linux).python3 tools/check_conventions.py --base origin/mainwith this title and description passed, andgit diff --checkis clean.tools/pr_overlap.py --branchfound no open pull request that changes the same exports. It failed closed on docs(debt): separate entries with blank lines and drop derived export totals #14212, which sharesdocs/dev/debt/libScePsml_debug.mdwith this branch and does not merge cleanly withmain. I checked its diff by hand: in this file it only adds blank lines between entries, and it adds none of these NIDs or names. None of the commits that are not onmainof the open PRs that changelibScePsml_debug,libScePsmlor the PSML debt file (feat(progress): count stubs no measured use needs as unobserved #13801, feat(libScePsml): port bundled-module dispatch validation for MFSR packet 1000 #14102 and docs(debt): separate entries with blank lines and drop derived export totals #14212) contains any of these NIDs or names.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)🤖 Generated with Claude Code