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
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.