Commit Graph
13118 Commits
Author SHA1 Message Date
Adrià 7903201bb4 Merge pull request #10130 from orezraey/fix/libkernel-pthread-attr-measured-ps5
fix(libkernel): report thread attribute inheritance and null-output errors as measured on a PS5
2026-10-26 15:45:11 +01:00
Adrià e38fcb00dc Merge pull request #9989 from milescoviello/fix/result-memo-budget
fix(shader): bound the bytes the recompiler's result memos hold
2026-10-26 15:23:48 +01:00
Adrià eb4e4019a6 Merge pull request #9975 from StoneDC/feat/ult-get-info
feat(libSceUlt): implement status query exports
2026-10-26 15:22:26 +01:00
StoneDC 3198588572 fix(libSceUlt): validate status outputs against firmware observations 2026-10-26 22:06:56 +08:00
StoneDC e6e2b47989 fix(libSceUlt): reject null worker array with nonzero capacity
sceUltGetUlthreadRuntimeInfo returned success when workerThreads was null and workerCapacity was nonzero, while rejecting the same null/nonzero-capacity combination on ulthreads with ULT_ERROR_NULL. Reject null workerThreads with nonzero capacity before touching info, and add test coverage checking the error result and that info is left untouched.
2026-10-26 22:06:56 +08:00
StoneDC 08fd4fe766 fix(libSceUlt): separate blocked queue pushers from poppers
sceUltGetQueueInfo reported every blocked queue thread as a waiting popper because both directions incremented one counter. Track the two wait classes in separate fields and fill both query outputs, copy one waiter record per blocked thread, and cover full-queue and empty-queue waits with a new queue-waiters test. sceUltGetUlthreadRuntimeInfo now throws when a caller asks for worker thread handles, since this runtime starts no worker threads, and the debt entry records the remaining limitations.
2026-10-26 22:06:56 +08:00
StoneDC 3003984952 feat(libSceUlt): implement status query exports 2026-10-26 22:06:56 +08:00
Adrià 7124e8f80d Merge pull request #9745 from KernelPanicNT/feat/libressl-ssleay-version
feat(libSceLibreSsl): return the measured version from SSLeay
2026-10-26 15:02:23 +01:00
Adrià 3ead2d7251 Merge pull request #9976 from StoneDC/feat/discid-validation
feat(libSceDiscId): throw for unsupported exports
2026-10-26 14:55:48 +01:00
KernelPanicNT 601226da9c feat(libSceLibreSsl): return the measured version from SSLeay
SSLeay() returns 0x20000000, the value measured on a PS5 with firmware
13.40 and the SSLEAY_VERSION_NUMBER of LibreSSL 2.5.4, which the module
is. The guest_libressl_version test checks it.
2026-10-26 14:46:30 +01:00
Adrià 9656d366be Merge pull request #9962 from kallmek3nny/feat/libkernel-pthread-cond-setname-np
feat(libkernel): add pthread_cond_setname_np
2026-10-26 14:42:29 +01:00
Adrià FranchandClaude Sonnet 5.5 3b015bf514 fix(libSceDiscId): unwind tables for the guest test on Windows
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-26 14:35:17 +01:00
StoneDC a405675ae6 test(libSceDiscId): use canonical public declarations 2026-10-26 14:35:14 +01:00
StoneDC 2d662ce6fd fix(libSceDiscId): keep unsupported exports explicit
CONTRIBUTING.md permits silent stubs only when unblocking a title UI path and when backed by title evidence. Since no title ID evidence demonstrates that a constant no-disc return unblocks a UI path, throw NotImplemented_nid_no_patch from sceDiscIdGet and sceDiscIdGet2 without touching caller memory. Tests assert both calls throw on null and non-null outputs and across flags values while leaving caller buffers untouched, and the debt entry records the unresolved hardware contract.
2026-10-26 14:35:14 +01:00
StoneDC 3fee9d12ac fix(libSceDiscId): report no disc without assuming an argument contract
The previous revision rejected a null output with 0x80D50001 and any nonzero flag with 0x80D50002, but no SDK or console evidence establishes those validation rules, the error codes or their precedence, and the flag argument may be a bitfield. Report SCE_DISC_ID_ERROR_NO_DISC for every pointer and flag value without touching the output, and record the unverified contract in the debt entry. Normalize the new test and CMake file to LF line endings.
2026-10-26 14:35:14 +01:00
StoneDC 85d158234c fix(libSceDiscId): report no disc without assuming an argument contract
The previous revision rejected a null output with 0x80D50001 and any nonzero flag with 0x80D50002, but no SDK or console evidence establishes those validation rules, the error codes or their precedence, and the flag argument may be a bitfield. Report SCE_DISC_ID_ERROR_NO_DISC for every pointer and flag value without touching the output, and record the unverified contract in the debt entry.
2026-10-26 14:35:14 +01:00
StoneDC 2f02e519c3 feat(libSceDiscId): validate arguments and return no disc 2026-10-26 14:35:13 +01:00
Dean bf77a9e9cb Merge pull request #10742 from 00xDisaster/feat/libc-lcosh
feat(libc): implement _LCosh and _LSinh
2026-10-27 02:28:15 +13:00
Dean def1f5dd92 Merge pull request #9317 from akkadbakkad89/fix/stencil-replay-quad-observations
fix(recompiler): exempt proven control conditions and own-bit ballots in stencil replay
2026-10-27 02:27:37 +13:00
Adrià 0e5d5a5409 Merge pull request #9543 from Queuse/codex/net-oob-inline
feat(libSceNet): receive urgent TCP data inline
2026-10-26 14:25:46 +01:00
Adrià 1061954c7e Merge pull request #8520 from qpavyros/codex/app-archive-directories
feat(libkernel): enumerate archived app directories
2026-10-26 14:23:39 +01:00
Queuze eebedb6427 feat(libSceNet): receive urgent TCP data inline 2026-10-26 14:03:15 +01:00
Adrià 035ac96edd Merge pull request #9940 from EagleBearerYS/fix/agc-compared-import-initial-dcc
fix(agc): accept a compared host import for an initial multisampled DCC import
2026-10-26 13:51:02 +01:00
Adrià 7b415520b6 Merge pull request #9871 from ntamas94/fix/ps4-nptrophy-abort-handle
feat(libSceNpTrophy): add sceNpTrophyAbortHandle
2026-10-26 13:38:34 +01:00
Adrià 2cce8bc51d Merge pull request #9927 from JJenkx/windows/wprintf-float-console
fix(libc): format wide %a, %e, %f and %g with the narrow console rules
2026-10-26 13:25:22 +01:00
Adrià 2db37cf1de Merge pull request #9468 from mazen320/feat/libc-num-get-w-vtable
feat(libc): export the wide num_get facet vtable as data
2026-10-26 13:21:19 +01:00
Adrià 5e90e7569d Merge pull request #9869 from cadenasynyster/fix/windows-opendir-file-link-loop
fix(libc): report ELOOP from opendir of a Windows file-type link loop
2026-10-26 13:14:08 +01:00
Adrià 9ff033b1a1 Merge pull request #9778 from milescoviello/test/pipelined-dma-gate-lifetime
test(agc): keep the pipelined DMA test's gate alive for the job it holds
2026-10-26 13:08:54 +01:00
Adrià 4e38e23882 Merge pull request #9585 from DavidSamir/fix/win-unknown-personality
fix(libc): return the fatal unwind error for an unknown personality on Windows
2026-10-26 13:06:47 +01:00
Dean 9bbb7f37c6 Merge pull request #8898 from camezaro-intc/format11-11-10-float-stores
fix(shader_recompiler): pack format 11_11_10 float image stores in shader
2026-10-27 01:03:40 +13:00
Dean 1e22d0fdec Merge pull request #11252 from AlexFigas/feat/npcppwebapi-parameter-lifecycle
feat(libSceNpCppWebApi): track the TitleCloudStorage and InGameCatalog parameter lifecycles as the module does
2026-10-27 01:02:59 +13:00
Dean 7704178631 Merge pull request #11182 from orezraey/fix/libkernel-soc-sensor-order-measured-ps5
fix(libkernel): check the SoC sensor channel before the pointer and set errno as measured on a PS5
2026-10-27 01:02:19 +13:00
Dean 8d2f06ae09 Merge pull request #11181 from voidlakhan/fix/ime-null-argument-error
fix(libSceIme): return errors for null arguments
2026-10-27 01:01:39 +13:00
Dean 0a1496c148 Merge pull request #11170 from orezraey/fix/libkernel-sysctl-toplevel-measured-ps5
fix(libkernel): resolve sysctl top-level names and fail absent top-level MIBs with ENOENT as measured on a PS5
2026-10-27 01:01:03 +13:00
Adrià 9b520147fb Merge pull request #9870 from lost9409/feat/libressl-alert-description
feat(libSceLibreSsl): implement TLS alert descriptions
2026-10-26 13:00:23 +01:00
Dean 7705895abb Merge pull request #10955 from AZLisme/feat/jxr-stream-packets
feat(libSceJxr): implement stream packet refill and flush
2026-10-27 00:59:07 +13:00
Dean ae5c5145db Merge pull request #10900 from EagleBearerYS/feat/netctl-ipcint-twins-v2
feat(libSceNetCtl): answer the IpcInt calls as their public twins, plus NpUtility's bandwidth test and Http's registered ids
2026-10-27 00:58:28 +13:00
Adrià 0c6a6be7fe Merge pull request #9542 from Queuse/codex/net-boolean-readback
feat(libSceNet): read reuse and broadcast flags
2026-10-26 12:58:12 +01:00
Adrià a4f0c002da Merge pull request #9919 from zaidhawk/fix/pad-latch-read-interval
fix(pad): keep a latched press for one and a half read intervals
2026-10-26 12:48:09 +01:00
Adrià 6641f48356 Merge pull request #9789 from rooklz/fix/agc-uint-color-export
fix(libSceAgcDriver): export raw 32-bit values into UINT color targets as integers
2026-10-26 12:48:04 +01:00
Adrià 7a01e6a494 Merge pull request #9693 from Gruzzberry/feat/setlogin
feat(libkernel_sys): implement setlogin
2026-10-26 12:46:59 +01:00
Adrià 8da313e727 Merge pull request #9752 from hypermoist/feat/opus-dec-float-priority
feat(opus): decode to float and with a priority in libSceOpusDec and libSceOpusCeltDec
2026-10-26 12:39:23 +01:00
Adrià a1a08cbab9 Merge pull request #9646 from UnhealthyKraken/feat/freetype-pfr
feat(libSceFreeTypeOptOl): implement PFR queries
2026-10-26 12:39:18 +01:00
Yunus Shaikh 0ac1558d0e test(agc): skip the watched-import control case where imports report pages written
DccComparedImportTests' mode 5 forces the write watch on the planes' host imports as a control. On a device whose import probe reports watched pages written at the import or after a GPU read, as RADV on a Radeon 860M does, the watched planes see those writes and the reuse check refuses with the resident-DCC message, so the three compared-import tests failed there in mode 5 alone. Mode 5 now runs only where the probe reports neither, the condition #10138 uses for the forced-watch shadow tests; lavapipe still runs it.
2026-10-26 12:30:14 +01:00
Yunus Shaikh 9b0ff5ccc2 fix(agc): accept a compared host import for a multisampled target's FMASK range
be write-watched at the initial import ("native FMASK contents require
watched guest memory") and at each reuse ("native FMASK sampling requires
watched guest memory"). In Linux comparison mode a host import over the
FMASK unwatches it, so the target is refused one check after the color,
DCC and CMASK ranges that the previous commit accepts.

Treat an FMASK range that a compared host import covers
(ComparedHostImportCovers) as the color and metadata ranges are treated:
keep a copy and its NewestStamp at the initial import, skip it in the
import's UnchangedSinceAll, and at reuse require the stamp and the bytes
to be unchanged, comparing them at most once per collect epoch. An
explicitly unwatched FMASK range is still refused.

Four-sample targets take no FMASK range, so this changes nothing for them.

Refs https://github.com/boykopovar/AnyPS5/issues/9724
2026-10-26 12:30:14 +01:00
Yunus Shaikh c10d1eae66 fix(agc): accept a compared host import for an initial multisampled DCC import
Rush 2 Recompiled (PPSA69423) and Wave Race 64 Recompiled (PPSA69424)
stop with "AGC graphics: initial multisampled DCC contents require
watched guest memory"
(https://github.com/boykopovar/AnyPS5/issues/9724). On Linux with
lavapipe, the write-watch probe finds that device accesses to a host
import trip the write watch, so every imported range is compared rather
than watched. A multisampled DCC target whose color, DCC or CMASK range
lies in such an import was then refused at its first draw: importing the
target takes a write generation for each range, and a compared range has
none.

A range that is not watched but lies in a live host import the probe
compares is now copied when the target is imported, and its metadata
again when a whole fill is taken as its fast clear. Each later use
compares the range with that copy, at most once per collect epoch, and
counts any driver or GPU store over its 64 KiB blocks since the copy as
a write, so a guest store of new bytes or any store by the driver
refuses the resident target as a watched range does. A range left
unwatched outside such an import is refused as before.

This covers the Linux comparison mode, not the Windows deferred settle
(BF-150): compared imports on Windows still refuse.
2026-10-26 12:30:01 +01:00
ntamas94andClaude Opus 5.5 1309f3c63f fix(libSceNpTrophy): answer ABORT from RegisterContext through an aborted handle
With an NP title id in place, a PS4 Pro (firmware 10.71) answers 0x80551607
from sceNpTrophyRegisterContext through an aborted handle, ahead of the
missing trophy package (0x80551626 through a live handle). The earlier
measurement stopped at the NP title id lookup on both handles.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-26 12:20:03 +01:00
ntamas94andClaude Opus 5.5 b4c1498dfe fix(libSceNpTrophy): answer ABORT through a handle once it is aborted
On a PS4 Pro (firmware 10.71) sceNpTrophyGetTrophyUnlockState and
sceNpTrophyGetGameIcon answer 0x80551607 through an aborted handle, ahead of
the not-registered check, and aborting the handle again answers 0.
sceNpTrophyAbortHandle now records the abort, the calls that use the handle
answer NP_TROPHY_ERROR_ABORT, and destroying the handle clears it.
sceNpTrophyRegisterContext keeps its answer, as measured without a trophy
package.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-26 12:20:03 +01:00
ntamas94andClaude Fable 5.1 87468a6e3a feat(libSceNpTrophy): add sceNpTrophyAbortHandle
Both measured PS4 titles (CUSA04865, CUSA12435) import it. On a PS4 Pro
with firmware 10.71 a live handle answers 0 and an unknown handle
0x80551608 (INVALID_HANDLE); the library has no asynchronous request to
abort, so the call only validates the handle.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-26 12:20:03 +01:00
milescovielloandClaude Opus 5.5 7e7ce00d82 test(agc): keep the pipelined DMA test's gate alive for the job it holds
Hold() queues a pipeline job that spins on a Gate until it is released,
and captured the Gate by reference. Each Gate lives in a block of
main(), and its destructor only sets the flag. When the block ends
before the job's next poll, the job reads the Gate's stack slot after
the scope is gone. An ANYPS5_ENABLE_ASAN build reports a
stack-use-after-scope in the job (PipelinedDma.cpp:52, the Gate of the
block at line 111), and the test fails.

The Gate now owns its flag through a shared_ptr that the job captures by
value, as the pipelined indirect draw test's blocker does since #9647.
The job can then poll it after the block ends, and releasing the Gate
works as before.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-26 11:07:32 +00:00