Files
chimera-gfx-Public/docs/retroarch/phase-1.0r-sdl2main-and-packaging-analysis.md
Chimera GFX release export a6037502d7
phase0-ci / build-and-audit (push) Successful in 2m14s
Publish Chimera GFX source
2026-09-03 03:27:14 +02:00

3.9 KiB

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.