Files
phantomptrandClaude Opus 5.5 8d05f60a7e PS5 Payload SDK v0.44, and scripts/update-ps5-sdk.sh to bump it
Pin v0.44 (sha256 4d06eab7...). Its crt/ and prospero-nid are identical
to v0.43, so the vendored sdk-crt (+ ps5upload.patch) and the portable
prospero-nid stay as they are; the helper, installer and elfldr build to
the same code (only the build-id differs). v0.44 adds LLVM 23 to the
candidate list, so the Makefile comment and Homebrew fallbacks move too.

scripts/update-ps5-sdk.sh (make update-sdk): finds the latest release
(or --tag), checks the zip, rewrites the pin, re-vendors prospero-nid
and crt only when upstream changed them (stops if our crt patch no
longer applies), moves the "SDK vX.Y" doc mentions and installs with
install-ps5-sdk.sh, keeping the old SDK as a backup. --check only
reports. The installer names its backups after the release they hold.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ub1mez9eaVtTF8pMEFXvA9
2026-10-10 11:14:44 -07:00
..

elfldr — vendored, with one fix

Upstream: https://github.com/ps5-payload-dev/elfldr (GPLv3+, John Törnblom), at commit 02cfe91 ("uri_get_filename: sanity check uri"). The sources here are upstream's plus ps5upload.patch; elfldr-ps5.elf is built from them.

ps5upload sends elfldr-ps5.elf to a console's loader port (:9021) to replace the standard elfldr.elf running there, once per elfldr instance, so the console keeps a loader that cannot get stuck (see below).

The change

elfldr serves one connection at a time, and its reads had no deadline. A client that connected and then went silent without closing — a dropped Wi-Fi link, a computer that went to sleep mid-send, a console entering rest mode while a payload was being sent — blocked every later connection for good: elfldr.elf stayed in the process list but never answered on :9021 again, and users had to load elfldr again before ps5upload.

ps5upload.patch gives each accepted connection a 15-second receive deadline (SO_RCVTIMEO) and clears it before a payload inherits the connection as its stdio. Measured on a PS5 (FW 5.10): with a silent connection held open, the original answered nothing until it closed; the patched build dropped it after 15.0 s and answered the next request at once. A payload sent in three parts with 10-second pauses still loads.

Rebuilding

With the ps5-payload-sdk installed (and xxd on the path):

make elfldr        # from the repo root

The build stamps its time into elfldr's startup log (__DATE__/__TIME__), so a rebuild differs from the checked-in ELF in those bytes only.