The Windows crash report reads APS5_CRASH_STACK_BYTES through
EnvironmentNumber, which env_reference did not recognize, so the name had
no row in docs/dev/ENVIRONMENT.md and neither the reference check nor the
conventions check reported it. Recognize the reader as an integer reader
and add the row.
The Dinkumware std::filesystem in titles calls twelve low-level helpers
that libSceLibcInternal exports and this project did not: _Stat, _Lstat,
_File_size, _Last_write_time, _Make_dir, _Remove_dir, _Unlink, _Chmod,
_Current_get, _Open_dir, _Read_dir and _Close_dir. They now follow the
PS5 12.00 module on top of the guest stat, mkdir, rmdir, unlink, chmod,
getcwd and directory calls, with its results: file_type codes from the
mode, not_found for ENOENT, ENOTDIR, EINVAL and ENAMETOOLONG, mkdir's
1/0/-errno, -1 for a failed size, and directory reads that skip the dot
entries and report the type as unknown. As on the console, _Lstat
follows links like _Stat.
The two _Xfilesystem_error overloads are exported and still throw, as
the guest filesystem_error type is not provided yet.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01RbLgECLQ2bpDM7oe2urGZK
A draw with DB_RENDER_CONTROL.DEPTH_COPY copies one sample of the
Z_32_FLOAT depth surface into color target 0. It now runs as a compute
pass that fetches that sample and stores it into the R32 float target,
when the draw covers the whole surface without depth or stencil tests.
With COPY_CENTROID the sample is the first one the draw covers, which is
sample 0 under the full sample mask the driver requires, as radeonsi
programs its per-sample DB to CB copies.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Nine of the twenty-one exports implement the no-device path: the lifecycle
pair accepts every call and keeps no state, the device queries answer the
empty list, the not-exists 0 and the device-not-found error, the map
requests answer device-not-found with their outputs untouched, and the
getdents family answers device-not-found on open and not-supported with
zero bytes on the read of a never-opened descriptor. The argument
validation of the register, unregister, unmap and getdents-close exports
is implemented and answers 0x80f40002; past it they keep their markers,
because no reference establishes their success path. The device-info
record and two prototypes follow SharpProspero, the rest shadPS4, each
pinned in the debt entry.
The libSceLibcInternal of a payload process on a PS5 (firmware 12.70) seeds
the additive feedback generator with a good_rand that reads its argument as an
int32, turns 0 into 123459876 and applies x = 16807 * (x % 127773) - 2836 * (x / 127773),
adding 0x7fffffff to a negative result. Its default state is the state after
srandom(1), not a precomputed table.
Replace the good_rand, build the default state by seeding it with 1 and add a
guest test that pins the first values of a fresh process, the values after each
measured seed and the saved state words of every measured initstate size.