Skip to content

launcher: never a relinker output as input; leave out unusable modules; the whole error - #29

Merged
utkuhalis merged 2 commits into
mainfrom
fix/relink-inputs
Oct 30, 2026
Merged

utkuhalis merged 2 commits into
mainfrom
fix/relink-inputs

Conversation

@utkuhalis

Copy link
Copy Markdown
Collaborator

The Mac launcher has the flaw a Windows player hit with the Windows/Linux launcher (AnyTogether/AnyPS5-Desktop#22): "libSceFace.prx.guest.prx is neither an ELF nor a decrypted SELF container (an encrypted dump cannot be used)" for Coffee Talk, and "relinker.exe failed (2): Input: …\source\sce_module\libSceNpCppWebApi.prx" for Lost in Play.

Causes

  • *.guest.prx is the relinker's output name. The launcher relinks in a fresh .AnyPS5/Work/<uuid>/source with its output in the sibling out, and the relinker skips *.guest.prx itself; but a relink by hand with the dump as app0, as the runtime layout in USAGE.md describes, writes the converted modules into the dump's own sce_module. Installer.modules(in:) took every .prx of the dump, those too, and unwrap stopped the unlock on them. The dump was not encrypted.
  • Exit 2 is the relinker's conversion failure: FAIL: <reason> (offset …) then Input: <file>. The launcher kept only the last line, so the reason was lost.

Changes (tools/macos/launcher)

  • Relinker outputs are excluded by name from the inputs and from the dump's files cloned into app0; the relink key follows the input list, so the next unlock relinks and heals a game that failed this way.
  • A module still encrypted in the dump, or one the relinker fails on (a FAIL: whose Input: is a module, not eboot.bin), is left out and the relink runs again. How the engine loads modules decides it: the executable refers to an unconverted module as a host library of that name, a runtime load of a module that was not relinked returns an error to the game, and where the engine has its own library of that name (libSceNpCppWebApi) it is used. Installer.leftOut lists them (kept beside the kept relink), and a toast says which file and why once the game is ready. An encrypted eboot.bin still stops the unlock, in plain words.
  • ToolFailed: a failed tool says the FAIL: line and the file it names, relative to the dump (the work folder is gone by then). Home wraps the error over four lines and lets it be selected; the game's log has all the relinker printed.

Tests

RelinkInputsTests (outputs never inputs; a polluted dump unlocks with only this relink's outputs; a relink after an engine update over a polluted dump heals; an encrypted module is left out; an encrypted executable stops in plain words; a module the relinker fails on is left out and the relink runs again, in a folder with spaces and non-ASCII, and the reuse reports it; a failed executable gives the whole reason; the error text). swift test for RelinkInputsTests, UnlockSpeedTests, CloneTreeTests, UnlockSpaceTests, SelfUnwrapTests and LanguageCheckTests passes. The engine is unchanged.

…s; the whole error

The same flaw a Windows player hit in the Windows/Linux launcher: a relink by
hand with the dump as app0 writes its converted modules into the dump's own
sce_module as *.guest.prx, Installer.modules(in:) took them for game modules
and unwrap stopped the unlock with "X.prx.guest.prx is neither an ELF nor a
decrypted SELF container". Relinker outputs are excluded by name from the inputs
and from the dump's files cloned into app0; the relink key follows the input
list, so the next unlock relinks and heals.

A module still encrypted in the dump, or one the relinker fails on (exit 2 with
FAIL: and Input: naming it), is left out and the relink runs again without it;
Installer.leftOut lists them (kept beside the kept relink) and the launcher says
which file and why once the game is ready. An encrypted eboot.bin still stops
the unlock, in plain words. A failed tool now says the relinker's FAIL: line and
the file it names, relative to the dump; Home wraps it over four lines and lets
it be selected.
testTheBackdropFadesOnlyToTheGameTheSelectionRestsOn sleeps one key-repeat
interval between moves against the selection's settle timer; on a busy
runner a sleep runs long, the selection rests mid-run and the backdrop
fades. It fails on main as well and passes here.
@utkuhalis
utkuhalis merged commit 3e2ed25 into main Oct 30, 2026
10 checks passed
@utkuhalis
utkuhalis deleted the fix/relink-inputs branch October 30, 2026 13:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant