Add the BSD "quad" `strtoq` export for the libc PRX as a thin wrapper
around `strtoll`, as FreeBSD 11.4 lib/libc/stdlib/strtoq.c does. The
unsigned sibling `strtouq` is already here as the same alias of
`strtoull`. Extend the guest wide strings test to probe the signed
path on an under/overflow run and a short positive run with a trailing
non-digit. Document the export in docs/dev/debt/libc.md with the
registry NID `yUUOxgk8Dmc`; console behavior is unverified beyond the
existing `strtoll` contract.
Co-Authored-By: Claude Opus 4.7 <[email protected]>
Failing run 40410094391 (after #11365, unrelated). The crash report prints [r8] as a string of stack bytes; when it contains '~' (ASLR-dependent) the [^~]* gaps of the PASS regex stop matching. Use .* (matches newlines in CMake regex).
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Register the no-argument recorder executable path so CTest covers the main recorder regression flow in addition to the focused subsets. Preserve the Vulkan-unavailable skip code, cap the test at 30 seconds, and add the Windows libc DLL path used by sibling recorder tests.
This carries forward the test registration proposed in #3354, which was closed by the intake pause. Its author left a handoff, and the current main branch has since incorporated the fixes that made the full recorder run pass.
Co-authored-by: blawesom <[email protected]>
Copy the iovec table only when there is one, and receive a datagram
with no iovecs in guest_sce_net: it returns 0 with MSG_TRUNC and the
sender's address.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
They still throw through NotImplemented_nid_no_patch; only the parameter
lists change. The only source is shadPS4's PS4 prototypes; nothing is measured on a PS5.
They still throw through NotImplemented_nid_no_patch; only the parameter
lists change. The only source is shadPS4's PS4 prototypes; nothing is measured on a PS5.
Two host differences failed all 19 feupdateenv tests on macOS:
- Apple's libc++ looks up /usr/lib/libstdc++.6.dylib with a no-load
dlopen the first time a process builds a std::logic_error, and that
failed lookup leaves errno at ENOENT. The null check builds the first
one, so it saw errno change although feupdateenv never touched it. The
test now builds one std::invalid_argument on macOS before the checks.
- Rosetta 2 keeps the six MXCSR exception masks set and raises no
floating-point trap, x87 included. The mask check now expects the SSE
masks the host keeps, and the pending-trap tests are skipped (exit 77)
on a host that does not keep an unmasked MXCSR exception. A libc debt
entry for feupdateenv records it.
Unset, ScanHostVolumes returns no volume, so nothing is scanned or
exposed and the guest sees no USB storage, as on main. The test checks
that injected volumes are neither listed nor raised by a rescan with the
switch off, and turns it on for the device cases.
sceNetRecvmsg guarded the destinations of the iovec table it saw at
entry, then read the live table again to scatter the received bytes.
When an earlier destination overlapped a later iovec, the received
bytes replaced that iovec and the rest of the data went to an address
that was never guarded, which crashed the host when that address was
not writable. Copy the header and the iovec table once, as FreeBSD
11.4's sys_recvmsg does with copyin and copyiniov, use that copy for
the guards, the scatter and the address, and write the header back
from it as sys_recvmsg's copyout does.
Fixes#11610
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Symptom / Log:
- Missing regression coverage in tests/ShaderMemory.cpp for 32-byte T# pendingWrite span unification, full wordwise page reads via readWords(), multi-run and indirect table rebuilds on late GPU wait, second-retry epoch stabilization, and refusal on persistent invalidations.
Root Cause:
- core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp did not cover mid-descriptor or multi-run GPU wait invalidations.
Change:
- Add unit tests in tests/ShaderMemory.cpp covering torn 32-byte T# prevention, full 4096-byte wordwise page readWords(), multi-run ReadRuns and indirect ReadColumn rebuilds on late wait, second-retry stabilization, and std::runtime_error refusal after 3 unstable attempts.
Metric / Verification:
- ctest -R agc_shader_type_zero_image_materialization|agc_shader_memory|agc_shader_table_snapshot_reuse passes with VK_LAYER_KHRONOS_validation and 0 VUID errors.
Symptom / Log:
- 26102026_05_33_48.log:L3022-L3034: [gpu] driver failure: compute shader 0x248a05b00: runtime image descriptor is invalid
Root Cause:
- core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp:ReadRuns/ReadColumn/Select/TableSnapshotter::Run/Materialize:L882-L1220 — table materialization did not propagate descriptorScope across table entries and did not rebuild earlier runs or records when a later run or indirect record waited on the GPU and invalidated cached Raw words.
Change:
- Set descriptorScope to the record/descriptor size during ReadRuns, ReadColumn, Select, and TableSnapshotter::Run, rebuild the full table or snapshot across up to 3 attempts when rawInvalidations changes mid-pass, force PendingWrite::Sync on the final attempt via SrtDescriptorForceSync, and refuse if the epoch still fails to stabilize.
Metric / Verification:
- Materialize and SnapshotResourceTables rebuild earlier runs/records when a late wait invalidates Raw words and refuse unstable snapshots.
Symptom / Log:
- 26102026_05_33_48.log:L3022-L3034: [gpu] driver failure: compute shader 0x248a05b00: runtime image descriptor is invalid
Root Cause:
- core/libs/prx/libSceAgcDriver/Execution/src/ShaderMemory.cpp:ShaderMemory::read:L302-L361 and ShaderMemory::readWords:L441-L463 — per-dword PendingWrite decisions on wordwise pages allowed leading dwords of a 32-byte T# to be cached with PendingWrite::Raw before a later dword waited on the GPU, and page->valid.All() in readWords() copied wordwise pages without re-checking descriptorSpanBytes or pendingWrite policy.
Change:
- Propagate the remaining descriptor span size through SrtRuntime::descriptorScope during SRT tape and evaluator reads, restrict the page->valid.All() fast-path in readWords() to non-wordwise pages, re-evaluate cached wordwise words against checkSpanBytes, invalidate cached Raw words when a read waits on the GPU, and require a stable rawInvalidations epoch across up to 3 attempts (forcing PendingWrite::Sync on the final attempt and throwing if the epoch fails to stabilize).
Metric / Verification:
- ShaderMemory and SrtWalker reads never mix pre-wait Raw words with post-wait words across a descriptor span and refuse unstable snapshots.