Commit Graph
20967 Commits
Author SHA1 Message Date
hypermistandClaude Opus 5.5 1a0356dc10 refactor(libs): include the library headers in the firmware constants test
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-25 14:16:52 +01:00
hypermistandClaude Opus 5.5 262d515c8b test(libs): pin the 29 firmware constant returns
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01RbLgECLQ2bpDM7oe2urGZK
2026-10-25 14:16:51 +01:00
hypermistandClaude Opus 5.5 9d710abf9d fix(libs): return what the firmware returns from 29 more calls it does not implement
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01RbLgECLQ2bpDM7oe2urGZK
2026-10-25 14:16:45 +01:00
harisibrar1andClaude Opus 5.5 e829b5c331 fix(libkernel): fail SO_ACCEPTFILTER with EINVAL on a socket that is not listening as measured on a PS5
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-25 09:15:05 -04:00
harisibrar1andClaude Opus 5.5 73fffbee8e fix(libkernel): refuse undefined protection bits in the map calls with EINVAL as measured on a PS5
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-25 09:13:23 -04:00
SandstromPLandClaude Opus 5.5 479fcec4ee fix(relinker): skip backup copies of guest modules in the online converter too
The command-line relinker skips an ELF module whose file name extends
another module's in the same directory when both have the same SONAME, a
dumper's backup such as libX.prx.esbak (#7380). That check lives in the
CLI's ReadModules, so the online converter, which hands every ELF in
sce_module/ straight to Conversion, still stops on such a layout with
"Ambiguous guest dependency name: libX.prx".

The check moves into the relinker core as RemoveBackupCopies, which
Conversion::Convert now runs before patching or converting modules and
reports through the progress messages, so the browser prints the same
"Skipping backup copy" lines. ReadModules uses the same function, so the
command line and --verify-patches behave as before.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-25 18:42:27 +05:30
Rookie 8e08731a36 fix(libSceCesCs): report the length of a rejected MBCS character as the console does 2026-10-25 13:10:08 +00:00
AZLisme 05001982e2 fix(jxr): reject closed packet host-write guards 2026-10-25 21:08:56 +08:00
MarcZX10 cc69a95ccf test(tools): cover template headings at another level or case
Expect the found heading in the finding for '## What', an indented '### what', '#WHAT' and the existing '#### What' case, and no hint for a different word such as '### Whatever'.
2026-10-25 13:08:23 +00:00
MarcZX10 f32db390de feat(tools): name a template heading written at another level or case
The template check only reads '### Name' headings, so '## What', '#### Tested' or '### checklist' counted as missing, and the finding did not say why. When a section is missing, look for the same name as a heading at any level and in any case, and add it to the finding, as in "add the '### What' heading of the template; found '## What'".
2026-10-25 13:08:23 +00:00
MarcZX10 3772994a61 test(tools): cover missing and empty pull request template sections
Expect 'fill the ### What section' for the untouched template and for sections that are blank or only hold a comment, and 'add the ### What heading of the template' for a heading written at another level. Add a body that names its sections without headings, the shape that failed #10721 at first, and expect one finding per missing heading.
2026-10-25 13:08:23 +00:00
MarcZX10 ed7f5833ab feat(tools): tell a missing pull request template heading from an empty section
The pull request template check reported 'section What is missing or empty' both when the body had no '### What' heading and when the heading was there with nothing under it, without saying which heading it looks for. Report 'add the ### What heading of the template' when the heading is absent and 'fill the ### What section' when it is empty, for What, Tested and Checklist.
2026-10-25 13:08:23 +00:00
SandstromPLandClaude Opus 5.5 0dc254e83f fix(tools): count functions exported with APS5_EXPORT under a _nid_no_patch name
progress.py skips every definition whose name ends in _nid_no_patch or
_nid_no_patch_cut, which are meant to be internal helpers. Some libraries
export such functions with APS5_EXPORT under an explicit NID or name:
libSceAgcVsh (150), libSceNKWebKit (150) and libSceJson2's inventory
(66), all of them calling NotImplemented_nid_no_patch. None of the 366
was counted, so those three libraries showed 151 of 151 functions where
they declare 517, and import_audit, which takes its stub list from the
same scan, reported imports of them as implemented.

A _nid_no_patch definition is now skipped only when no APS5_EXPORT in its
library exports it. The library totals go from 6104 of 12305 to 6104 of
12671 on main.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-25 18:37:48 +05:30
MarcZX10 2ca76b589c docs(tools): mention pr_overlap's export cache in its help 2026-10-25 13:06:41 +00:00
MarcZX10 389ff88dff build: register the pr_overlap export cache test 2026-10-25 13:06:41 +00:00
MarcZX10 ee9ce6ee77 test(tools): cover pr_overlap's base export cache 2026-10-25 13:06:41 +00:00
MarcZX10 b8ab4b1157 perf(tools): cache pr_overlap's base exports by source blob 2026-10-25 13:06:40 +00:00
MarcZX10 400f728794 build: register the pr_overlap pages test 2026-10-25 13:06:40 +00:00
MarcZX10 ab7a06e66c test(tools): cover pr_overlap's parallel pull request pages 2026-10-25 13:06:40 +00:00
MarcZX10 b5424e9bde perf(tools): fetch pr_overlap's pull request pages in parallel 2026-10-25 13:06:40 +00:00
MarcZX10 4480d9d427 test(tools): cover pr_overlap's probe and merge progress
With 250 pull requests of which every 25th shares a file with the branch, expect probe lines at 100, 200 and 250 with 4, 8 and 10 related pull requests and one line for merging those 10; without a branch, expect merge lines at 100 and 150 of 150. The tests fail before the previous commit.
2026-10-25 13:06:40 +00:00
MarcZX10 56cff28e40 feat(tools): report pr_overlap's probe and merge progress
After the fetch, a --branch run probed about 1,300 pull requests for about 28 s without output, and --out merged every pull request into the base. Report every 100 pull requests and at the end how many were probed and how many of them share files or exports with the branch, and how many were merged into the base.
2026-10-25 13:06:40 +00:00
MarcZX10 17aac28ca1 build: register the pr_overlap progress test
Run tools/tests/test_pr_overlap_progress.py as pr_overlap_progress next to pr_overlap_branch_scan, so check_test_registration --scripts finds a runner for it.
2026-10-25 13:06:40 +00:00
MarcZX10 ddd04de0c9 test(tools): cover pr_overlap's pull request count and fetch progress
Check that listing 150 pull requests over two pages reports their number, that fetching 250 heads in three batches reports 99, 199 and 250 of them, and that a run without pull requests still reports one fetch line. The tests fail before the previous commit.
2026-10-25 13:06:40 +00:00
MarcZX10 a2f9601332 feat(tools): report pr_overlap's pull request count and fetch progress
pr_overlap printed nothing until its report, which takes 54 to 81 s on Linux with about 1,300 open pull requests and took minutes on Windows, so a run looked stuck. Write progress lines to stderr: the number of open pull requests once they are listed, and the number of pull request heads fetched after each batch of 100. The report on stdout is unchanged.
2026-10-25 13:06:40 +00:00
David 1456c76806 test(tools): write the branch scan fixtures without Path.write_text(newline=)
Path.write_text takes newline only from Python 3.10, so the three tests errored in the fixture helper on the Python 3.9.6 that macOS ships as /usr/bin/python3. open() with newline writes the same LF bytes on every version.
2026-10-25 13:06:40 +00:00
David a9f1ade5d6 test(tools): register the pr_overlap branch scan test
test_script_registration fails for a test script that no add_test or workflow runs, which stopped the relinker matrix on the previous commit.
2026-10-25 13:06:40 +00:00
David 4ebd235d45 test(tools): cover the pr_overlap --branch prefilter
The branch scan gives the same overlaps as a scan of every pull request and merges only the pull requests that share a file or an export with the branch; a scan without a branch still merges all of them.
2026-10-25 13:06:40 +00:00
David 4c8e1d194e fix(tools): merge only the pull requests that share files or exports with the branch in pr_overlap
pr_overlap --branch merged every open pull request against main, although a pull request can only appear in the report when it shares a file or an export with the branch, so on a repository with a thousand open pull requests the check did not finish in an hour. probe lists each pull request's files and exports from git diff base...head, without a merge, and scan_all merges only the ones that overlap the branch; the others get empty sets, which is what they would contribute to the report. --out is unchanged.
2026-10-25 13:06:40 +00:00
AZLisme 86ea8555cb feat(jxr): implement stream packet refill and flush 2026-10-25 21:04:32 +08:00
mantavisualandClaude Opus 5.5 c15dce440a feat(libSceLibreSsl): implement the CRYPTO locking and thread id callbacks
CRYPTO_num_locks, CRYPTO_set_locking_callback, CRYPTO_set_add_lock_callback,
CRYPTO_THREADID_set_callback and CRYPTO_THREADID_set_numeric threw. They
now follow LibreSSL 2.5.4's cryptlib.c, the version identified in the
firmware 13.40 measurements: CRYPTO_num_locks returns 41, the setters
store their callbacks, CRYPTO_THREADID_set_callback keeps the first
non-null one and returns 0 once one is set, and
CRYPTO_THREADID_set_numeric clears the {ptr, val} structure and stores a
64-bit value. The callbacks are never called, because the module exports
none of CRYPTO_lock, CRYPTO_add_lock or CRYPTO_THREADID_current; the debt
entry records it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-25 15:03:25 +02:00
thuanquangandClaude 294ab651de fix(libSceVideodec2): mark returned pictures as not discarded
OutputInfo had no member at offset 0xb, so sceVideodec2Decode and
sceVideodec2Flush never wrote that byte, and a returned picture carried
whatever the caller had left there. Name it isDiscardedFrame, as
SharpProspero and KytyPS5 do, and set it to 0 when a picture is
returned; a result without a picture leaves it as the caller set it.

Co-Authored-By: Claude <[email protected]>
2026-10-25 20:03:05 +07:00
JJenkx 7e58aece09 fix(tools): scope report-link cycle tracking to target resolution 2026-10-25 09:01:03 -04:00
MarcZX10 882a3e39b6 fix(agc): report agc_driver_f16_to_f32_unpack_spirv as skipped when the build leaves F16ToF32Unpack out
agc_driver_f16_to_f32_unpack_spirv runs agc_driver_f16_to_f32_unpack_tests --verify-spirv, which is built from tests/execution/F16ToF32Unpack.cpp. When ANYPS5_AGC_EXECUTION_TESTS does not list F16ToF32Unpack, the target is built from ExecutionTestNotBuilt.cpp, which prints 'skipped, this build leaves the test out with ANYPS5_AGC_EXECUTION_TESTS' and exits with 77. Unlike the other registrations of execution tests, this one had no SKIP_RETURN_CODE, so ctest reported a failure. Set SKIP_RETURN_CODE 77; the verification mode of the real test never exits with 77.
2026-10-25 12:58:06 +00:00
MarcZX10 9df129558e fix(agc): report agc_driver_f64_denorm_preserve_spirv as skipped when the build leaves F64FmaSubnormals out
agc_driver_f64_denorm_preserve_spirv runs agc_driver_f64_fma_subnormals_tests --verify-spv-denorm-mode, which is built from tests/execution/F64FmaSubnormals.cpp. When ANYPS5_AGC_EXECUTION_TESTS does not list F64FmaSubnormals, the target is built from ExecutionTestNotBuilt.cpp, which prints 'skipped, this build leaves the test out with ANYPS5_AGC_EXECUTION_TESTS' and exits with 77. Unlike the other registrations of execution tests, this one had no SKIP_RETURN_CODE, so ctest reported a failure. Set SKIP_RETURN_CODE 77; the verification mode of the real test never exits with 77.
2026-10-25 12:58:06 +00:00
Adrià FranchandClaude Sonnet 5.5 2bfcf6166a fix(libSceLibcInternal): give the spawned test child the parent environment plus its role
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-25 13:57:38 +01:00
Adrià Franch 4a913acbd6 fix(libSceLibcInternal): declare waitpid in the spawn test through the libkernel header 2026-10-25 13:57:18 +01:00
fogydes bde7cc210a fix(libkernel): report ECHILD to a Windows waiter another thread reaps first 2026-10-25 13:57:18 +01:00
fogydes 0514307ab8 fix(libkernel): translate waitpid child statuses to the guest numbering 2026-10-25 13:57:18 +01:00
fogydes 19a3d60aed fix(libSceLibcInternal): declare _NSGetExecutablePath on Apple hosts 2026-10-25 13:57:18 +01:00
fogydes df18d83072 docs: add the spawn role variable and shorten the waitpid debt 2026-10-25 13:57:18 +01:00
fogydes 723d932f73 feat(libSceLibcInternal): implement posix_spawn process creation and reaping 2026-10-25 13:57:17 +01:00
dwk001andClaude Opus 5.5 e632137d7c fix(libkernel): keep the mutex kind as a signed 16-bit value as firmware 13.42 does
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01B7MJ4KkM4JNNWQxjsXT4ib
2026-10-25 12:53:57 +00:00
Yunus Shaikh 70cb02625d fix(libSceContentSearch): report metadata access as not implemented
Past their initialization and argument errors, sceContentSearchOpenMetadata, sceContentSearchOpenMetadataByContentId, sceContentSearchGetMetadataFieldInfo and sceContentSearchGetMetadataValue threw a bare logic_error for every valid call, so progress.py counted them as done. The host content library is empty and the console's errors for missing content and unopened metadata ids are unknown, so the four now go through NotImplemented_nid_no_patch. ThrowUnknownMetadataId had no other caller and goes.
2026-10-25 12:53:43 +00:00
Yunus Shaikh aa3499790c fix(libSceContentExport): report progress and data export as not implemented
For a live session, sceContentExportGetProgress and sceContentExportFromDataWithThumbnail threw a bare runtime_error, so progress.py counted them as done. An idle session's progress depends on the caller's SDK compatibility mode, and the host has no media library to export into, so both now go through NotImplemented_nid_no_patch. RequireSession's not-initialized and unknown-session throws, which other calls share, are unchanged.
2026-10-25 12:53:43 +00:00
Yunus Shaikh 19cdaa19aa fix(libSceAudioPropagation): report path calculation as not implemented
After its handle and argument errors, sceAudioPropagationSourceCalculateAudioPaths threw a bare runtime_error for every valid call, so progress.py counted it as done. Propagation is not implemented, so the valid call now goes through NotImplemented_nid_no_patch. The early errors are unchanged.
2026-10-25 12:53:43 +00:00
xXPBSXxandClaude Sonnet 5.5 d69520c794 fix(libc): throw from GuestCopyIn on a Linux read failure other than EFAULT
When process_vm_readv failed with anything but EFAULT (EPERM under a
seccomp filter, ENOSYS), GuestCopyIn_nid_no_patch fell back to a plain
memcpy, so the host dereferenced the unchecked guest pointer, the crash
the checked read exists to prevent. Throw as GuestCopyOut_nid_no_patch
does for process_vm_writev.

The test runs the call in a child process under a seccomp filter that
answers process_vm_readv with EPERM and expects the exception.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-25 13:49:36 +01:00
JJenkx fda56965b3 fix(tools): follow dangling report links before path resolution 2026-10-25 08:47:54 -04:00
JAB-dev 66b52c4001 Merge remote-tracking branch 'origin/main' into fix/ngs2-mastering-gain-ps5 2026-10-25 14:47:07 +02:00
JAB-devandClaude Sonnet 5.5 e84640cd83 test(libSceNgs2): drop the throw assertion for a NaN gain into PCM_I16L
NaN-to-PCM_I16L output is marked unimplemented in Render.cpp and the debt entry,
and the test rule excludes asserting that an unimplemented path throws. The
production exception and the debt entry stay.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-25 14:47:07 +02:00