D428 - libSceSysmodule, and the real-title walls triaged
measured - 2026-09-01
With the obSCEne conformance fixes done, ran the real titles - the
project's actual loop - to find what they need. The first wall was
shared and clean: sceSysmoduleLoadModule, the load call
nearly every title makes, was absent from orbistoun and resolving to the
stub-everything placeholder. PPSA28061 stored that positive placeholder
as a module handle and faulted read of 0 a few calls later.
Added libSceSysmodule (LoadModule / UnloadModule /
IsLoaded, all success, because every library a title imports is already
resolved by the loader), and PPSA28061 got FURTHER - 47->56 imports -
now reaching libSceJson2/libSceNpCppWebApi initialisation.
The walls past it are subsystem- or library-scale, and worth recording so a future session starts from the map rather than the terminal:
| title | dies at | just-before | what it needs |
|---|---|---|---|
| PPSA28061 | read of 0, image+0x43c4 | libSceJson2 Initializer, libSceNpCppWebApi | C++ library init (Json/Np objects stay null when their initialisers are stubbed) |
| PPSA25872 | read of 0x5, image+0x7b591e | _Execute_once (std::call_once),
__cxa_decrement_exception_refcount |
the C++ runtime - call_once must actually call its function (reentrant guest execution), exceptions |
| PPSA02664 | write to 0, image+0xafcc08 | sceKernelReserveVirtualRange,
sceKernelVirtualQuery |
virtual-memory management - reserve a range and write the address back; this is the parallel session's mmap/AddressSpace area |
None is a one-call crunch fix. libSceSysmodule was; the rest are the road: a C++ runtime (call_once/exceptions, reentrant execution), whole libraries (Json, Np), the virtual-memory calls (the parallel escape workstream's territory), and the GPU translation the Agc/Gnm path leads to.