Commit Graph
20967 Commits
Author SHA1 Message Date
Adrià 4a7c749047 fix(agc): leave the capture error buffer width to #7555 2026-10-28 08:59:32 +01:00
Maz 5d45d2cab7 fix(agc): name unmeasured queue end and drop debt duplicates 2026-10-28 08:59:28 +01:00
Maz 683b3497de fix(agc): limit 0x58 acceptance to SubmitAcb
Keep MultiAcbs and CommandBuffer on the unmeasured 0x57 exclusive end; split the debt entries and retain the title call-sites.
2026-10-28 08:59:28 +01:00
Maz 051b3e017b fix(agc): accept compute queue 0x58 on SubmitAcb
A PS5 measurement already recorded in the debt note shows queue 0x58 succeeds; raise the exclusive SubmissionQueueEnd and cover it in agc_driver_tests.
2026-10-28 08:59:28 +01:00
dantdmdarealguy 2b03bf743a docs(debt): drop libSceMbus's stale protected-body note
ab4a949f07 ended the "sceMbus remaining declarations" entry with "All
protected stub bodies remain unchanged." It was written on top of
afbd9b882 (#8305), which had already made sceMbusAcquireControlList
return 0x809B00FF and sceMbusTerm return 0, and the same entry says both
return constants. Drop the sentence.
2026-10-28 02:57:27 -05:00
Adrià d7fd416992 Merge pull request #11231 from Gruzzberry/feat/kldsym
feat(libkernel_sys): implement kldsym argument checks
2026-10-28 08:56:23 +01:00
Adrià 7fc0ae6008 Merge pull request #11199 from QRMOE/fix/shader-pixel-helper-lane-masks
fix(shader): keep pixel helper lanes out of guest lane masks
2026-10-28 08:54:16 +01:00
Qu Yi 475484a00f feat(libSceIcu): implement C string conversion helpers 2026-10-28 15:52:57 +08:00
B-HowellandClaude Opus 5.5 82c8a51391 fix(libc): saturate the hexadecimal strtod exponent past any digit run
The explicit binary exponent stopped accumulating near 1e9 while the
digits add 4 per character without bound, so a subject with a few
hundred million digits was classified against the wrong exponent:
0x1 followed by 3e8 zeros and p-1200000005000 kept errno, and a long
zero fraction with p+1000000000000 underflowed instead of overflowing.
Saturate the explicit exponent at 2^62, beyond what any addressable
digit run can offset, so the sum never overflows or changes sign.

Record that _Stod and _Stodx follow the title libc.prx rule for
hexadecimal underflow, unverified for libSceLibcInternal.

Refs #9691

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-28 03:49:24 -04:00
B-HowellandClaude Opus 5.5 33c69417e4 docs(libc): trim the hexadecimal strtod debt entry to what is open
Keep only the gaps: the rule is measured on one title-bundled libc.prx,
and on Linux glibc 2.35's strtod rounds some hexadecimal subnormal
results a unit low.

Refs #9691

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-28 03:49:24 -04:00
B-HowellandClaude Opus 5.5 6084ed65b4 fix(libc): match title libc.prx for hexadecimal strtod underflow
Classify hexadecimal strtod and wcstod input from its own digits rather
than a long double approximation. As measured on God of War Ragnarok's
bundled libc.prx, ERANGE is set only on overflow or when the exact value
is below 2^-1074, and a value between 2^-1075 and 2^-1074 becomes the
smallest subnormal only from 2^-1075 * (1 + 2^-52) up.

Refs #9691

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-28 03:49:24 -04:00
MarcZX10 161c9d55c6 test(libSceNpTrophy): fail the state write of an unlock and unlock again
A directory in place of the temporary state file makes the save fail; the unlock
has to report it, leave trophy 0 locked, and succeed once the directory is gone.
2026-10-28 07:44:31 +00:00
MarcZX10 944192d89d fix(libSceNpTrophy): keep a trophy locked when its unlock state cannot be saved
sceNpTrophyUnlockTrophy inserted the id into the in-memory set and then saved the
state file. A save that threw (the state directory or the rename failed) left the
trophy unlocked in memory but not on disk, so a retry answered
TROPHY_ALREADY_UNLOCKED and the unlock was lost at the next start. The new set is
now built on a copy, written, and only then installed.

SaveState also never looked at the stream after writing, so a failed write (for
example a full disk) was ignored and the truncated temporary file was renamed over
the good state file. It now flushes, checks the stream, removes the partial
temporary file and throws.
2026-10-28 07:44:31 +00:00
AdriàandClaude Sonnet 5.5 149ec09adf fix(libkernel): give the descriptor checks C linkage so libkernel_sys can import them
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-28 08:43:15 +01:00
AdriàandClaude Sonnet 5.5 f87b6289ac fix(libkernel): export the kqueue descriptor check to libkernel_sys
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-28 08:43:15 +01:00
tablefrogpillowandClaude Opus 4.8 90d0daedc9 test(libkernel_sys): use a named shm descriptor in the fpathconf check
An anonymous shm descriptor is recognised as shared memory only on
Linux, where the memfd link name is matched; on Windows the anonymous
%TEMP% object is not registered in the shared-descriptor table, so the
descriptor is not recognised and fpathconf never reaches the EOPNOTSUPP
branch. A named descriptor is recognised on both platforms, so the
check now opens a named object and unlinks it, keeping the same branch
coverage without a Linux-only assumption.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-10-28 08:43:15 +01:00
tablefrogpillowandClaude Opus 4.8 d8dfb7eab4 fix(libkernel_sys): fail fpathconf on a kqueue or shm descriptor with EOPNOTSUPP
_fpathconf_nid_postfix only treated FIFOs and sockets as descriptors without
a vnode, so a kqueue or shm_open descriptor fell through to the UFS constants
(LINK_MAX 32767, NAME_MAX 255, PIPE_BUF 512). FreeBSD 11.4 kern_fpathconf
(kern_descrip.c:1411-1429) answers _PC_ASYNC_IO for every descriptor and
returns EOPNOTSUPP for a no-vnode descriptor that is not a pipe or socket.
Return EOPNOTSUPP for kqueue and shared-memory descriptors.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-10-28 08:43:15 +01:00
Adrià 660a0b306d Merge pull request #11032 from Gruzzberry/feat/kenv
feat(libkernel_sys): implement kenv
2026-10-28 08:39:51 +01:00
AdriàandClaude Sonnet 5.5 fb4cc4e7cf fix(agc): run agc_repeat_storage_guard with libc on the Windows PATH
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-28 08:33:45 +01:00
Cesar MoraandClaude Opus 5.5 3181021a4f test(agc): a repeated storage surface refuses a guarded target past its first byte as its lookup does
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-28 08:33:41 +01:00
Cesar MoraandClaude Opus 5.5 91d601ecd0 fix(agc): guard a repeated storage surface over its whole range, as its lookup does
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-28 08:33:40 +01:00
Cesar MoraandClaude Opus 5.5 46366e060a test(agc): a touched pipeline is returned as a store hit and stays recently used
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-28 08:33:40 +01:00
Cesar MoraandClaude Opus 5.5 2b349ff156 perf(agc): repeat a draw shape's resident targets and pipeline instead of looking them up again
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-28 08:33:40 +01:00
AdriàandClaude Sonnet 5.5 0f8ac231b0 test(agc): report the device limitation when pipeline inspection skips
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-28 08:27:19 +01:00
JJenkx cc59cb7b93 test(agc): skip pipeline inspection when Vulkan is unavailable 2026-10-28 08:27:12 +01:00
JJenkx b971004857 feat(agc): inspect captured compute pipeline statistics 2026-10-28 08:27:11 +01:00
B-HowellandClaude Opus 5.5 b8636b11f7 test(relinker): report the case and flag values when a masked store stub changes the flags
masked_store_lowering failed twice under Rosetta on GitHub's macOS x86_64
runner (runs 40216485859 and 40438653738) with only "Masked store stub
changed the flags", while the stored bytes, faults, vector and general
registers, red zone and RSP all matched. The message now names the form,
width, addressing mode, offset, mask pattern, fault count and the flags
before and after, so the next occurrence shows which flags change and
whether the probe faulted.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-28 03:11:41 -04:00
Dean b99bbebacd Merge pull request #11839 from oneandonlydean/wolverine/agc-driver-micro-perf
perf(agc): reuse context register storage and keep the shadow live-unit count
2026-10-28 20:11:36 +13:00
Dean 210462e2a7 Merge pull request #11838 from oneandonlydean/wolverine/amm-fragmented-pool
fix(libkernel): map AMM pages from a fragmented pool
2026-10-28 20:11:32 +13:00
Dean da6b0ea8dd Merge pull request #11884 from JJenkx/windows/libc-strtof-nan-payload
fix(libc): keep NaN payloads in strtof and wcstof as titles' libc.prx does
2026-10-28 20:11:27 +13:00
Dean a734b350f1 Merge pull request #8091 from JJenkx/fix/agc-import-allocation-error-budget
fix(agc): pin the import ceiling only on memory exhaustion
2026-10-28 20:11:23 +13:00
B-HowellandClaude Opus 5.5 fe7a71c1ea fix(libkernel): classify the rmdir path with lstat so links give ENOTDIR on Windows
sceKernelRmdir decided whether the last component was a symbolic link with
std::filesystem::is_symlink, which follows the link with WinLibs libstdc++ on
Windows. A dangling or self-referencing file link then looked missing on
Windows 10 (ENOENT instead of ENOTDIR), and a directory link to an empty
directory looked like that directory, so rmdir removed the link and
returned 0. The last component is now classified with FillLinkStat, the
same lstat path lstat_nid_postfix uses, matching FreeBSD 11 kern_rmdirat,
which returns ENOTDIR for any non-directory vnode found without following
the last link.

Fixes #12079

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-28 03:10:08 -04:00
Adrià fddf0ffb75 Merge pull request #9129 from EagleBearerYS/fix/agc-draw-cache-byte-budget
fix(agc): bound the draw cache by bytes
2026-10-28 08:07:42 +01:00
Adrià d5140548fc Merge pull request #11051 from simnJS/claude/usb-storage-system-service
feat(libSceSystemService): call libSceUsbStorage from the USB storage aliases
2026-10-28 08:06:39 +01:00
Adrià e611e7719f Merge pull request #11005 from harisibrar1/fix/map-undefined-protection-einval
fix(libkernel): refuse undefined protection bits in the map calls with EINVAL
2026-10-28 08:04:38 +01:00
GruzzberryandClaude Sonnet 5.5 762a280ee3 feat(libkernel_sys): implement kenv
Follow FreeBSD 11.4 sys_kenv: KENV_GET, KENV_SET, KENV_UNSET and KENV_DUMP over
an in-memory kernel environment of at most 512 variables, with the 128-byte
name and value limits, ENOENT, EINVAL, ENAMETOOLONG and EFAULT.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-28 07:50:01 +01:00
Henryisdjfunkyho 6b57885826 fix(tools): clarify existing NID name status 2026-10-27 23:49:14 -07:00
dantdmdarealguy b5c728e6bf docs(debt): drop libSceMove's stale protected-body note for open and close
sceMoveClose returns INVALID_HANDLE for a handle that is not open since 808d67e715 (#8252), and sceMoveOpen returns ALREADY_OPENED for an open slot since c478789949 (#8252) and throws only for users other than the initial user since 95ea06e80b (#8125). The sentence came from 8a1bd363ef (#9137), which left both bodies alone; the rest of the entry already describes them.
2026-10-28 01:43:47 -05:00
harisibrar1andClaude Opus 5.5 e31fad5ae8 test(libSceRudp): link the wait-exception test against libc for its exception personality
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-28 02:30:37 -04:00
JJenkxandClaude Opus 5.5 771dbdfec2 style: drop a code comment that is not technical debt
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-28 02:26:09 -04:00
dantdmdarealguy 0de89c89eb docs(debt): narrow libSceHmd's protected-body notes to the throwing queries
The work-memory entry said the bodies of all its queries remain
unimplemented, but sceHmdGetDistortionWorkMemoryAlign and Size return
0x400 and 0x20000 since db2575839 (#8307), and their
sceHmdDistortionGetWorkMemory* aliases since fa916ae7bc (#8256). Only
capture start, separate-mode open, crash-report cancellation and the
mirroring aspect debug setter still throw.

The device and sensor query entry said its protected bodies are
unchanged, but sceHmdGetFieldOfView, sceHmdGetInertialSensorData and
sceHmdGetAssyError answer without a headset since fe6aba89a8 and
a569d075ec (#8256), before 7b97d7552c (#9137) wrote the entry. Only the
internal device-information, distortion-parameter, status-report and
DFU-status queries still throw.
2026-10-28 01:07:51 -05:00
MarcZX10 70cd9c91c2 test(tools): audit imports from registries nested far deeper than the JSON parser allows
A registry and a needed-libraries file of 200000 opening brackets have to end in
an audit error with exit code 2 and the read-error message, not a traceback.
2026-10-28 06:04:59 +00:00
MarcZX10 8c045ebe37 test(hw-oracle): compare a report nested far deeper than the JSON parser allows
The command has to exit with 2 and say the file is nested too deeply, without a
traceback, instead of exiting with the code that means different outputs.
2026-10-28 06:04:59 +00:00
MarcZX10 ffe3506094 test(web): run archive-reserved.test.mjs with the other archive tests
tools/test_web.py launched archive-root, archive-windows and archive.test but not
archive-reserved.test.mjs, which covers the superscript Windows device names
(COM1 with a superscript digit, LPT2 and so on) added with 3397e873bc. No
workflow, script or CTest entry referenced it, so a regression in validPath for
those names went unnoticed. It runs next to the other archive tests now.
2026-10-28 06:04:43 +00:00
MarcZX10 68a017c9fe fix(tools): report a deeply nested registry as an audit error in import_audit
read_registry and read_needed_registry catch OSError, UnicodeDecodeError and
JSONDecodeError, but a registry nested a few hundred thousand levels deep raises
RecursionError. main returns 2 for an AuditError and 1 for missing imports, so
the traceback ended with exit code 1 and a corrupt registry looked like a failed
import audit. RecursionError is now caught with the other read errors and
reported as an AuditError, so the exit code is 2.
2026-10-28 06:04:43 +00:00
MarcZX10 70d2036621 fix(hw-oracle): report a deeply nested JSON report as invalid
read_report passes the file to json.loads, and a report nested a few hundred
thousand levels deep raised RecursionError, which main does not catch. The
command ended in a traceback with exit code 1, the code the tool documents as
'different outputs', so a corrupt file looked like a hardware difference. The
error is now a ValueError naming the file, and main reports it with exit code 2
like every other invalid report.
2026-10-28 06:04:42 +00:00
dantdmdarealguy e26d34d624 docs(build): say APS5_AGC_CREATE_LOG has no effect
The option's only use, the success log in sceAgcCreateShader, has been commented out since 3da76b9b33, so OFF changes nothing and ON logs nothing.
2026-10-28 00:51:32 -05:00
tkcm01andClaude Opus 5.5 835327563c fix(json2): accept a number that underflows to zero on libc++
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-28 01:49:50 -04:00
tkcm01andClaude Opus 5.5 1127dacf68 fix(libkernel): keep errno across cancellable sleeps
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-28 01:49:47 -04:00
B-HowellandClaude Opus 5.5 dbea3c9c0c docs(libc): drop the rename dot-destination gap that 308848e1a6 closed
rename and sceKernelRename now look the source up before they reject a
dot destination, as FreeBSD 11.4's kern_renameat does, so a missing
source onto dir/. fails with ENOENT. guest_filesystem covers it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-28 01:46:12 -04:00