An empty list, or one with no certificate, made SystemRoots() return a
null chain, so the connection trusted nothing. Throw and name the path,
as the missing-file case does; nothing is cached, so a later call
reads the list again.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Every libSceSsl context started without trust anchors, so a libSceHttp2
request without a verify callback failed the known-CA check. RetroArch's
updater, PS5LM and Porpoise all use version-3 templates over https://
without one. libSceSsl now parses /<sandbox word>/common/cert/CA_LIST.cer,
served by libkernel from the host trust store, once per process into its
own pool, and SslTrustSystemRoots_nid_no_patch links those roots after
the context's own authorities for one connection. The HTTP/2 transport
calls it after creating each connection.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Under Rosetta the main thread stack lies at about 12 GiB, inside the guest
arena, where a title can map fixed addresses; a fixed mapping over it
aborts with a host region overlap.
- Aps5StartGuest moves the main thread onto a 16 MiB stack at
0x600000000000 when the old stack overlaps a host region of the arena.
It copies argv, environ, the program name and the initial block off the
old stack, then frees the old stack and releases its range to the arena.
- The guest thread keeps the stack size of the original main thread.
- The arena gets GuestArenaOverlapsHostRegion and
GuestArenaReleaseHostRegion for POSIX hosts.
- guest_main_stack_move starts the guest, then requires the main thread
outside the arena, a fixed mapping where the old stack was, and argv and
the environment intact.
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
oracle_hip.py tries amdhip64_7, amdhip64_6 and amdhip64, and amd_comgr_3,
amd_comgr_2 and amd_comgr, newest first; the guide named only the older
ones.
ShaderMemory.cpp and Draw.cpp enable the draw pipeline whenever the
variable exists, unlike APS5_PIPELINE_DISPATCH, which treats an empty
value and 0 as off.
libSceSystemService reads the variable when it prepares a launch, and an
empty value counts as unset; GuestSystemExit.cpp only checks that it is
not defined.
FrameRecorder reads the variable with a fallback of 0 and raises it to 1
when it picks the boundary, so the effect of the default is the same as
1 but the default is 0; a value that is not a number throws.
HostVolumes records ReadOnly from the mount options (or the Windows
read-only volume flag) and the export reports it, so passthrough is not
always writable.
APS5_NO_PERF_FRONTEND_PAIR and APS5_NO_PERF_LAYOUT_PAIR are read by the
shader recompiler itself, which the shader disk cache lists among its
output-neutral switches, not only by the shader-memory test the rows
pointed at.
TextureFormat.cpp compares the value with "1" and "copy" and ignores
anything else, so setting it to an arbitrary value does not behave like
a presence switch.
StoreAtLabelRequested returns true for "1" and throws for any other
value (expected 1), like its sibling APS5_STORE_AT_FLIP, so it is not a
presence switch.
_submit executes inline only when the queue is neither running nor holding
pending work; otherwise it enqueues a copy and returns the id, so the
statement that buffers without a wait always complete first was wrong.