Commit Graph
12196 Commits
Author SHA1 Message Date
Dean d891db991f Merge pull request #7874 from ErenYeager1836/feat/libc-export-nextafter
feat(libc): export nextafter double math function
2026-10-20 05:52:01 +13:00
MarcZX10 28cc5a6e5e test(libScePngDec): size padded output for both rows 2026-10-19 16:49:09 +00:00
Nicolas Abosch 4bc91c9fbb Merge remote-tracking branch 'origin/main' into perf/gpu-wake-sleeps 2026-10-19 13:47:53 -03:00
Alex ColliniandClaude Sonnet 5.5 c026550122 perf(agc): refuse uncached textures while the sampled cache's least recently used entry is still in use
Over budget but within a quarter over it, the sampled texture cache refused no use of a texture it does not hold, so a cyclic scan over a working set larger than the budget rotated the whole cache and hit almost never. The first use of a key in a present is now refused (used for its draw, never cached) when the least recently used entry was used in this or the previous present. A later use of the key is refused only when that entry was used in this present, so a texture used several times per present is still admitted on a later use. The refusal does not apply past the quarter-over ceiling, so a budget that falls still evicts.

The test lowers the budget through OverrideCacheBudgetForTest instead of the environment. The debt entry records the unmeasured present window, that a texture used more than once still rotates the cache, and the one A-B-A measurement.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-19 18:43:53 +02:00
Nithishvelan M 33b17f60b5 fix(libSceNpAuth): move wrapper definitions below V3 functions 2026-10-19 22:09:29 +05:30
lakhantheboss 2873e9c361 fix(ampr): validate null command buffer arguments 2026-10-19 18:39:10 +02:00
Nithishvelan M 76c0882646 test(libSceSysmodule): use kAgcDriverModuleId in unload internal with arg test 2026-10-19 22:06:36 +05:30
David cd0e8efb07 test(libkernel): run code from an executable mapping of a shared memory object 2026-10-19 20:30:21 +04:00
David f69f9da2a0 feat(libkernel): map files through the guest's mmap on macOS, adding execute after mapping 2026-10-19 20:30:20 +04:00
David c9c6fc7a95 feat(libkernel): check file and shared memory descriptors for the guest's mmap on macOS 2026-10-19 20:30:20 +04:00
Longziip ae67e2b7f9 fix(agc): write the reread indirect register list when skipping its invalid entries
When the list read at submission is invalid, the worker now always
executes the copy read again where the packet runs. With
APS5_SKIP_INVALID_INDIRECT_REGISTERS=1 only that copy's invalid entries
are skipped, so the valid entries of a partly updated list are written
instead of the stale ones from submission.

testPartlyUpdatedRegisterListSkipsOnlyItsInvalidEntries submits a list
that is invalid at submission, updates it to a valid entry plus an
invalid one before its packet runs, and reads the register back with
COPY_DATA.
2026-10-19 17:29:53 +01:00
Longziip 557ae22bd1 fix(agc): reread an invalid indirect register list where its packet executes
SET_*_REG_INDIRECT lists are read when the command buffer is submitted.
When that copy holds an offset dword that is no register offset, the
queue worker now reads the list again where the packet executes (as the
console PFP does) and uses that copy if it is valid.

PPSA23566 (UFC 6) intermittently submits a SET_CONTEXT_REG_INDIRECT
whose first entry is 0x038f038f or 0x03900390 in both copies, followed by
180 valid pairs, and the title stopped with "extended register semantics
are not implemented". With APS5_SKIP_INVALID_INDIRECT_REGISTERS=1 the
invalid entries are skipped and the other registers are written; without
it the packet throws as before.
2026-10-19 17:29:53 +01:00
011010 6d72ebe47c feat(libSceNgs2.native): keep a registry of report handlers
sceNgs2ReportRegisterHandler and sceNgs2ReportUnregisterHandler stop
being throwing stubs: they keep a registry of report handlers, so a
title that imports them can register and later drop its handler.

Register rejects a null handler with an invalid argument and returns
INVALID_OUT_ADDRESS for a null out handle, then stores the report
type, handler and user data under a freshly allocated opaque handle.
Unregister removes and frees the matching record and throws for a
handle that is not registered.

The signatures follow SharpProspero and shadPS4's ngs2_report.h, and
the 24-byte Ngs2ReportDataHeader passed to a handler is its
OrbisNgs2ReportDataHeader. No report is produced yet, so no registered
handler is ever invoked.
2026-10-19 10:29:06 -06:00
Dean dbac9fa15b Merge pull request #7909 from parl0v/feat/pad-accessibility-controller-state
feat(libScePad): implement scePadGetAccessibilityControllerState (zBsgF0q8DIM)
2026-10-20 05:24:48 +13:00
Dean 4c7c06edf7 Merge pull request #7905 from Rajkamalcode/fix/guest-err-llp64-arg
fix(libc): keep the guest %ld argument 64-bit in the err test
2026-10-20 05:24:32 +13:00
billythemenace2andClaude Opus 5.5 d2657b9750 fix(libkernel): classify the raise target's code without loader calls while it is suspended
GetModuleHandleExW and GetModuleFileNameW take loader locks the suspended
target may hold. While the target is suspended only VirtualQuery and a
lock-free cache of image bases are consulted; an image not yet cached is
classified after the target is resumed, and the target is sampled again.
The statics the checks use are initialized before the first suspend. The
host-code wait is recorded in the libkernel debt file, and the test raises
100 times so it fails on every run without the change.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-19 17:22:50 +01:00
Dean 78f7af3fc8 Merge pull request #7908 from parl0v/fix/pad-n3kSX62fgNo-after-open
fix(libScePad): return 0 from n3kSX62fgNo after scePadInit, with a pad open or not
2026-10-20 05:22:46 +13:00
Dean 7a3ef1dced Merge pull request #7929 from NumberGuan/codex/windows-vouched-import-skip
test(agc): skip unsupported Windows vouched-import probe
2026-10-20 05:22:31 +13:00
Dean 535587cf03 Merge pull request #7769 from jotitadev/fix/agc-flush-pending-wait-flushing
fix(agc): wait for an image another thread is storing before a host read
2026-10-20 05:22:02 +13:00
ionut27001andClaude Opus 5.5 ad9772edd1 fix(libkernel): report the getrlimit values measured on a PS5 for RLIMIT_STACK, RSS, MEMLOCK and NPROC
In a payload process on a PS5 (firmware 12.70), getrlimit returns
0x200000 for RLIMIT_STACK, infinity for RLIMIT_RSS and RLIMIT_MEMLOCK,
and 1604 for RLIMIT_NPROC, each as both soft and hard limit. These four
threw here. Whether a title process reads the same limits is not
measured.

setrlimit reads getrlimit first, so it now accepts RLIMIT_STACK,
RLIMIT_RSS and RLIMIT_MEMLOCK when the values do not change, as the
payload process does. RLIMIT_NPROC throws: in the payload process
setting it to its current value succeeds, but getrlimit then reads 1443,
and the limit is not stored here. Any other change still throws. The
getrlimit and setrlimit debt entries also record the payload process's
RLIMIT_DATA and RLIMIT_NOFILE readings, its 12555 clamp of RLIMIT_NOFILE
and its RLIMIT_NPROC reading after a same-value set.

AI-assisted: yes

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 18:21:34 +02:00
Adrià a12b860402 Merge pull request #6976 from CrimsonMac/fix/lds-lock-release-barrier
fix(shader): release the LDS lock with an exchange and drop fences inside it
2026-10-19 18:20:43 +02:00
Alexandre Sanchez 98ebc9df1b Merge branch 'main' into fix/agc-cached-image-msaa-guard 2026-10-19 18:12:52 +02:00
milescovielloandClaude Opus 5.5 38ec04c3e7 test(avplayer): check every VP9 frame of the WebM clip in a video-only pass
With audio enabled the player drops video frames that fall behind the
audio-driven clock, so the A/V pass can only require some frames, which
dropped the check that VP9 decodes the whole clip (#7935). A first pass
now enables only the video stream in no-sync mode, where nothing is
dropped, and requires all 6 frames of the clip, each checked by
CheckVideoFrame, with increasing timestamps. The A/V pass after it keeps
the timing-tolerant counts and also requires increasing timestamps.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 16:03:16 +00:00
Swetabh Singh d6f89b5ca5 feat(libSceJson2): implement Value, Object, Array, and String methods 2026-10-19 18:02:40 +02:00
Lindamea1andClaude Opus 5.5 0c84ec45f0 fix(libSceNet): support TCP_NODELAY in sceNetSetsockopt and sceNetGetsockopt
sceNetSetsockopt and sceNetGetsockopt failed with EOPNOTSUPP
(0x8041012d) for every level other than SOL_SOCKET, so TCP_NODELAY
could not be set on a libSceNet stream socket; libkernel setsockopt on
such a socket failed the same way. FreeBSD 11.4's sosetopt and sogetopt
(uipc_socket.c) pass any other level to the protocol: tcp_ctloutput
sets TF_NODELAY and returns 0, a get returns t_flags & TF_NODELAY (4),
an option it does not know fails with ENOPROTOOPT, and on a UDP or raw
socket ip_ctloutput and rip_ctloutput fail the IPPROTO_TCP level with
EINVAL. Set TCP_NODELAY on the host socket of a stream socket, read it
back as TF_NODELAY, fail other IPPROTO_TCP options on a stream socket
with ENOPROTOOPT (0x8041012a), and fail the IPPROTO_TCP level with
EINVAL on other socket types, as libkernel already does for its own
sockets.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 18:01:00 +02:00
Adrià 32004dfa55 Merge pull request #6992 from MarcZX10/codex/fix-stat-symlink-6983
fix(libkernel): return ELOOP when stat follows a symlink loop
2026-10-19 18:00:27 +02:00
mazen cb7ee022cf fix(agc): require the pass-input barrier only for an in-place read
Windows NVIDIA copies index and vertex ranges, so an open pass does not read the guest indices. The hazard check stays for devices that do read them in place.
2026-10-19 19:56:07 +04:00
Ondra97 51e75dec25 fix(json2): preserve values when type allocation fails 2026-10-19 17:56:05 +02:00
Adrià 0fbfd91e5e Merge pull request #6985 from Lorkydey/feat/libc-floating-point-controls
feat(libc): implement floating-point rounding and exception flags
2026-10-19 17:54:33 +02:00
Adrià ee9bfe177e Merge pull request #6974 from HamidRezaLS/perf/relinker-tls-reachability-opt
perf(relinker): flat address-taken vector and region query caching in strict reachability
2026-10-19 17:53:17 +02:00
Nithishvelan M e775e456d8 fix(libc): add bad_optional_access exports, test, and clarify debt 2026-10-19 21:20:02 +05:30
Lindamea1andClaude Opus 5.5 6206c230c4 fix(libSceSaveData.native): count PS5 save data in 64 KiB blocks, at most 16384
The PS5 references count save data differently from the PS4: SharpEmu
uses a 64 KiB block, and SharpEmu and KytyPS5 allow 48 to 16384 blocks
per save, which at 64 KiB a block is 3 MiB to 1 GiB, the PS4's byte
range. The module used the PS4 values, 32 KiB blocks and a 32768-block
maximum. At 64 KiB a block, sceSaveDataDirNameSearch and
sceSaveDataGetMountInfo therefore counted up to twice the blocks a
save's files use, and a save without a recorded size reported 32768
blocks, which is 2 GiB.

The search test now expects 64 KiB blocks and the 16384 maximum, and
the block accounting gets its own technical debt entry.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 16:49:19 +01:00
Nicolas Abosch 843084a9d1 Merge remote-tracking branch 'origin/main' into perf/gpu-wake-sleeps 2026-10-19 12:44:46 -03:00
Nicolas AboschandClaude Sonnet 5.5 447b744ddf test(libkernel): run guest_sleep_wake with coarse timed waits too
With APS5_COARSE_TIMED_WAITS set a sleep is never ended early.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-19 12:44:39 -03:00
Nithishvelan M 239b74c18a fix(libSceWebBrowserDialog): transition to finished on dialog close 2026-10-19 17:40:29 +02:00
Adrià d047690c63 Merge pull request #6967 from CrimsonMac/fix/libc-u8path-deprecation
fix(libc): build the working directory path without deprecated u8path
2026-10-19 17:40:22 +02:00
Nithishvelan M 0647c0a5b3 fix(libSceCdlgPlayerReview): transition to finished on dialog close 2026-10-19 17:39:18 +02:00
Adrià c017549dc1 Merge pull request #6955 from alfalfa-star/perf/agc-space-page-reuse
perf(agc): reuse a cached address space's committed pages on a hit
2026-10-19 17:33:02 +02:00
Adrià 88a6b34bc5 Merge pull request #6966 from ebosido444-ai/fix/agc-relocated-header
fix(agc): resolve a relocated AGC header whose arrays hold the registered bytes
2026-10-19 17:28:19 +02:00
T3cm0andClaude Opus 5.5 151f116550 feat(libSceVrTracker2): answer as the console's module before initialization
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 17:28:03 +02:00
Adrià 4393456ed0 Merge pull request #7010 from MarcZX10/codex/trace-dispatch-queue-origin
chore(agc): tag dispatch IO traces with queue origin
2026-10-19 17:27:46 +02:00
Adrià Franch a4287f344d test(agc): reject request serialization version 39 as unsupported 2026-10-19 17:26:37 +02:00
Adrià Franch 00b02d633d test(agc): expect request serialization version 38 2026-10-19 17:26:37 +02:00
sussyandClaude Sonnet 5.5 742af5fc8d fix(agc): name both missing features when mesh barycentrics cannot be provided
A pixel shader on the mesh path that reads barycentrics on a device with
neither VK_KHR_fragment_shader_barycentric nor VK_EXT_mesh_shader
reported only the missing mesh shaders. Say that the device has neither,
so reports from such devices are told apart from the case the emulation
covers.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-19 17:26:37 +02:00
sussyandClaude Sonnet 5.5 4d60321f1f feat(shader): emulate per-vertex parameters on the mesh path
A pixel shader that reads per-vertex parameters (v_interp_mov of P10 and
P20) on a device without VK_KHR_fragment_shader_barycentric now works on
the mesh path too. The mesh program stages each such parameter in
workgroup memory and writes the values of the three vertices of every
primitive as a per-primitive output, in the order of the triangle
indices; the pixel shader reads them from there.

The emulation throws when the staging, the output components or the
output memory exceed the device's mesh limits, or when the mesh
configuration uses a provoking vertex other than the first.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-19 17:26:37 +02:00
sussyandClaude Sonnet 5.5 dd41527ce2 feat(shader): emulate smooth barycentrics on the mesh path
A pixel shader that reads barycentrics on a device without
VK_KHR_fragment_shader_barycentric used to need a vertex shader so a
generated geometry stage could follow it, which a mesh pipeline cannot
have. The mesh program is now compiled a second time with the layout
its pixel shader needs: it writes its clip position as a varying and the
three corner positions of each primitive as per-primitive outputs, and
the pixel shader solves for the weights, for both smooth and linear
interpolation.

The layout is part of the mesh cache key, the stored artifact and the
captured request. Without VK_EXT_mesh_shader the draw still throws, now
saying so. Per-vertex parameters on the mesh path still throw.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-19 17:26:37 +02:00
Kovalev Vladislav 8d45d5c446 test(shader): cover device paths within host file IO limits 2026-10-19 21:25:57 +06:00
Lindamea1andClaude Opus 5.5 5fafbef246 test(libkernel): check the Linux TIOCGWINSZ word and the ioctl request boundaries
The OpenOrbis net_http sample stops on 0x5413, the Linux TIOCGWINSZ
that musl sends to standard output; the carried cases covered 0x5401
but not that word, so the test adds it to the malformed words. It also
pins the two boundary words the check takes as well-formed, 0x20046601
(IOC_VOID, length 4) and 0x80006601 (IOC_IN, length 0): on a guest
socket with a null argument they fail with EFAULT, not ENOTTY.

The debt sentence now states the open gap: an input request with
length 0 is not rejected as malformed, while sys_ioctl rejects it in a
kernel built without COMPAT_FREEBSD4, COMPAT_FREEBSD5 and COMPAT_43,
and which of these the PS5 kernel has is unknown.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 16:25:42 +01:00
Hussein Kadhim baa6d4aeee fix(libkernel): fail a malformed ioctl request with ENOTTY before the descriptor is looked at
FreeBSD's sys_ioctl rejects a request with no direction bit, an output request with no length, or a void request whose length is not an int before it reads the argument or resolves the descriptor. ioctl threw on such a request for a file, pipe or directory, failed with EBADF for a closed descriptor and with EFAULT for a socket given no argument.

(cherry picked from commit 501518f321ac5d0b45ce1090af39c680927edf49)
(cherry picked from commit 3eb7edd9cf)
2026-10-19 16:25:42 +01:00
Lindamea1andClaude Opus 5.5 3237083172 fix(libkernel): return ESRCH from scePthreadAttrGet for a thread that has ended
scePthreadAttrGet copied the attributes of any non-null handle, so a
thread that was joined or had finished still answered 0, and a thread
that ended detached was read after its object had been freed. FreeBSD
11.4's _pthread_attr_get_np returns ESRCH for a dead or reclaimed thread,
and Monster Hunter Wilds (PPSA24191) reuses a slot of its thread table
only when scePthreadAttrGet returns 0x80020003.

After the EINVAL checks it now returns ESRCH unless the handle is a live
guest thread, and copies the fields while holding the thread registry
lock (LockLiveGuestThread), so a detached thread exiting during the call
is not freed under the copy. GuestThreadIsLive uses the same lookup.
pthread_attr_get_np, which the title does not import, is left as it is;
the debt entry records the difference.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 16:25:14 +01:00