Repository navigation
feat(libSceVrTracker2): answer as the console's module before initialization - #7463
Conversation
Progress report (c017549 → 151f116)📈 System libraries: 79.88% (+0.14%, +18 implemented, +7 declared functions) ✅ 18 implemented
⚪ 12 behaviourally empty (constant return or throw)
🆕 7 declared as stubs
|
15612b4 to
3fd2a2f
Compare
|
Datapoint from Horizon Call of the Mountain (PPSA05666, v01.004.011, PS VR2-only), the title whose initialization parameter the debt file records. On
So the title accepts the query's answer (32 MiB, 64 KiB) and goes on to initialization 0xa4 bytes later in the same function ( stderr with this PR, run 2 (abort block; the full stderr and stdout follow in two comments)Tested. Windows 11 (26200), RTX 4090 (NVIDIA 616.92), WinLibs GCC 15.2.0 r7 (UCRT), Release AI-assisted: yes (Claude Code). |
|
stderr of run 2 with this PR ( stderr |
|
stdout of the same run (255 lines, identical to the stdout |
|
Thanks for the runs. They match what I saw with the same title under AnyPS5: after the memory query it reaches What initialization returns to a title without a headset is the one thing I could not measure. Called from a payload with that parameter it never returns; called from the homebrew launcher's application context it returns 0x8A74001E, but there With initialization answered, the title's next stop is |
|
Rebase handoff — rebased onto current Verified on Linux (CachyOS, kernel 7.2.9, GCC 16.2.1, Ninja, Release, To pick it up: Head is |
|
On the open question above, what initialization returns to a game-type title: measured inside retail game processes on a PS5 (firmware 13.40), with ptrace calls from an elfldr payload and a PS VR2 headset connected.
AI-assisted: yes (Claude Code) |
…ization Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
3fd2a2f to
151f116
Compare
|
Rebased onto current |
…racker2 answers
The overlap audit against origin/main and the open pull requests found 39 of the 193 declared exports that must not be declared here: - 14 that origin/main already exports. The nid_patcher computes the NID of a symbol from its name, and a name ending in _nid_postfix exports the NID of the base name, so scePadOpen, sceNetInit and the rest are already there. - 23 that an open pull request provides: #6832, #6847, #6852, #7846, #7881, #7889, #7890, #6977 and #7690. - 2 whose technical-debt file an open pull request creates: #7463 and #8094. The scope is now 30 libraries and 154 exports.
|
@T3cm0, a question about It's now the next stop for two titles on
Your debt entry says the console's initialization, called from a payload with Horizon Call of the Mountain's parameter, didn't return. Two things would settle what
We'd only implement the answer the console gives; we won't guess one. |
|
@EagleBearerYS I tried to capture Gran Turismo 7's parameter on the RTX 4090 and couldn't, because on today's
The run that stopped there on 10/18 was on On the console the title does make the call at boot, with the headset connected. When my payload attached to the running title and called AI-assisted: yes (Claude Code) |
|
Thanks, @frankea. That settles Gran Turismo 7 (PPSA01317)'s side: since |
What
Implements the 115 libSceVrTracker2 exports as the console's module answers before it is initialized, which is the state this library stays in: #7323 made libSceHmd2 report a console without a PS VR2 headset, so titles now reach the tracker. The behaviour was measured on a retail PS5 (firmware 13.60, no headset) by loading
libSceVrTracker2.sprxin a homebrew payload and calling every NID with null arguments, zeroed buffers and buffers filled with 0xAA and 0x01: 99 exports return 0x8A740001 and write nothing; two clear 24 and 16 bytes of a non-null first argument and return 0x8A740001 (0x8A740006 when it is null); one returns 0x8A740006 for a null second argument; two return 0; two write fixed values to their first argument and return 0. The memory query, found by searching its parameter's size and fields, accepts only a 32-byte parameter of size 0x20 with every other byte zero and then reports 32 MiB aligned to 64 KiB. The eight exports whose accepted input is still unknown, initialization among them, throw; the debt file records the initialization parameter PPSA05666 passes, captured under AnyPS5, and that the console's initialization called with it from a payload did not return; the debt file lists what the console returned for each. Signatures and export names are unknown, so the twelve exports that already had aerolib names keep them and the others are bound by NID withAPS5_EXPORTto this library's own names. A null output pointer for the two exports that crash on the console throwsstd::invalid_argument.Tested
Windows 11 (MinGW GCC 15.2) and Ubuntu 26.04 on WSL2 (GCC 15.2), Release builds:
ctestfor guest_vr_tracker2 (new) passes on both, and patched_libraries on Windows; the built library exports all 115 NIDs and goes throughnid_patcher. The console results come from payloads run on a PS5 (firmware 13.60) with no PS VR2 headset; the decrypted module itself was not disassembled. Not tested with a title.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