# Phase 1.0R: SDL2main and packaging analysis Status: `SOURCE_BOUND_NEGATIVE_RESULT` ## SDL2main Pinned source: `ps5-payload-dev/SDL` commit `0baf4ac49382b537ba449901b5b6d0d189bb1fbb`, file `src/main/ps5/SDL_ps5_main.c`, 438 bytes, SHA-256 `55953065bb81ec6f00224d54c19f667336936e55a6805e08b60f6dda126d6648`. | Source location | Operation | Timing | Launch-context conclusion | |---|---|---|---| | lines 14-16 | normal `main`, splash hide | before `SDL_main` | duplicate of an action also performed by PS5 `VideoInit`; no registration | | line 17 | call `SDL_main(argc, argv)` | application entry | C entry-wrapper convention only | | line 18 | `sceSystemServiceLoadExec("exit", 0)` | after application return | cannot affect first VideoOut submit | No application ID, title ID, LNC function, process creation, VideoOut export, module load, or persistent state appears in this file. Pinned PS5 video source: `src/video/ps5/SDL_ps5video.c`, 12,162 bytes, SHA-256 `44124546da132ea6e12b1f06a1808d61690c73460a65c3161e8453e8108684b6`. `PS5_VideoInit()` hides the splash at line 225 and opens VideoOut at line 226. It creates the event queue, adds the flip event, sets the flip rate, sets the opaque buffer attributes, and registers buffers. The update path submits `(handle, idx, 1, frame_id)` at line 145. No source-proven app registration or flip-owner acquisition precedes it. ## Exact RetroArch linkage The artifact source is RetroArch commit `12cf1d783c41eb303987e49a5a920805a59ef7a4`. `Makefile.ps5` is 16,122 bytes, SHA-256 `6d248aa2b77d5ccea3a8d1de02e939946b7e7764e5b012ef513c1eed4dcc6e27`. It links static `libSDL2.a` plus `SceSystemService`; it does not link `libSDL2main.a`. The exact M evidence identities remain: | Evidence | Size | SHA-256 | |---|---:|---| | `retroarch_ps5_write_diag.elf` | 1,845,208 | `c99a0856309a357ad2667d89b4924e4063ad214cae09c8a419457b0732f583cd` | | linker map | 637,728 | `6768ffc7267b9b362c3b953571e5dfeed1e70004a3e19f41ef500c3f26272719` | The map binds `_start` to SDK `crt1.o` and binds the PS5 video functions to `libSDL2.a(SDL_ps5video.c.o)`. Searches for `SDL_ps5_main`, `libSDL2main`, and `sceSystemServiceLoadExec` are empty. Thus the tested artifact omitted the wrapper but not SDL's pre-VideoOut splash-hide call. ## PacBrew and official port packaging PacBrew commit `c2abcfcb60f569128abd0e8e70ad03a67bee5ea7` builds and installs libraries and ordinary executables. Its SDL2 recipe fetches the same SDL fork without a pinned source checksum and installs the resulting SDK files. PacBrew recipes do not create PS5 application IDs or define the process that runs an installed executable. PacBrew is therefore `PACKAGE_METADATA_ONLY`, not a launch-context implementation. The bounded official source set gives these results: | Project | Relevant observation | Classification | |---|---|---| | LakeSnes | links SDL2main; `homebrew.js` returns path/args; README uses `hbldr` via shsrv | `SDL2MAIN_USER_LAUNCHER_PARTIAL_UNBOUND` | | pemu | PS5 packages use `homebrew.js`; its explicit `LoadExec("exit")` is guarded for PS4 only | `SDL_USER_LAUNCHER_PARTIAL_UNBOUND` | | FBNeo, Mednafen, DevilutionX, EDuke32 | PacBrew builds/install ordinary SDL executables | `PACKAGE_METADATA_ONLY` | | yquake2 | SDL consumer; no exact PS5 launched artifact/process contract | `SDL_CONSUMER_LAUNCH_CONTEXT_UNPROVEN` | A `homebrew.js` object that returns `path` and `args` is not application registration. A README command naming `hbldr` is not source proof of how `hbldr` creates a process or which active-app/display state exists. No official-port success claim is used as firmware-9.60 hardware evidence. ## Fail-closed outcome The exact pre-submit effect contributed by SDL2main is `EARLIER_HIDE_SPLASH_ONLY`. The exact post-return effect is `LOAD_EXEC_EXIT`. Neither is a source-proven correction for the observed submit failure. The launcher and active-app hypotheses remain unproven until the exact `hbldr`/`shsrv` implementation and launch provenance are bound in a separate offline phase.