Commit Graph
275 Commits
Author SHA1 Message Date
Adrià 3b24c4739e Merge pull request #12092 from MarcZX10/docs/usage-macos-crash-report-import-audit
docs: correct the macOS modules, crash report threads and import_audit module statements in the usage guide
2026-10-28 14:47:27 +01:00
Dean Galvin 97f1d41a2c Revert "Merge pull request #10809 from frankea/fix/direct-memory-12gib"
This reverts commit 780b33aea3, restoring the 13824 MiB direct memory pool.

With the pool at 12288 MiB, Astro Bot (PPSA21564) can no longer load its
level: DirectMemoryAllocator asserts "Can't allocate direct memory" for a
64 MB VideoPlayerTexture with 12228 of 12288 MB in use, then the process
faults about 26 s in (2 of 2 runs, RTX 4090, Linux, main cccdaa2734).
The same tree with only this merge reverted runs the full 150 s with no
direct memory assert (2 of 2 runs).
2026-10-28 15:45:26 +13:00
Dean 780b33aea3 Merge pull request #10809 from frankea/fix/direct-memory-12gib
fix(libkernel): report 12 GiB of direct memory, as a PS5 does
2026-10-28 13:49:57 +13:00
Dean a36e9b2442 Merge pull request #11489 from WhiteAssassins/feat/patch-catalog-metadata
feat(tools): add optional patch catalog metadata
2026-10-28 12:58:25 +13:00
Dean 8b68c5a465 Merge pull request #11457 from MarcZX10/marc/docs-usage-sync
docs: bring USAGE, INPUT_MAPPING and GAME_TESTING in line with the tools
2026-10-28 12:05:26 +13:00
MarcZX10 13da724480 docs: say import_audit accepts converted guest.prx modules
module_files yields a PE file whose name ends in .guest.prx and reads its
exports; every other MZ file still raises an AuditError.
2026-10-27 20:18:12 +00:00
MarcZX10 13019ed1f6 docs: state the thread limit of the Windows crash report
ReportAllThreads captures at most 128 other threads and prints how many
further threads were left out; the report did not list every thread of a
larger process.
2026-10-27 20:18:12 +00:00
MarcZX10 91730a4f1e docs: say where --macos puts the bundled modules
GuestModuleBuilder keeps each module's directory relative to the module
parent under app0, as the Linux and Windows outputs do, so modules from
sce_modules, prx or a --module-dir do not land in app0/sce_module.
2026-10-27 20:18:12 +00:00
Adrià 2222bae20b Merge pull request #11225 from ebosido444-ai/feat/relinker-version
feat(relinker): report the build revision with --version
2026-10-27 16:16:57 +01:00
Adrià f2f759ae31 Merge pull request #10712 from roboterspinne/fix/relinker-macos-reject-lazy-binding
fix(relinker): reject --lazy-binding for macOS output
2026-10-27 15:35:26 +01:00
Dean 570002610e Merge pull request #11084 from roboterspinne/fix/relinker-output-directory-paths
fix(relinker): reject an existing directory at any output path before writing
2026-10-27 18:31:47 +13:00
roboterspinne 3123f92e7b fix(relinker): reject --lazy-binding for macOS output
MacOsMachOPatcher::Patch discarded its lazyBinding argument, so a
module-free `--macos --lazy-binding` conversion exited 0 and wrote the
same eagerly bound Mach-O as a run without the flag. The Mach-O writer
puts every import in the LC_DYLD_INFO_ONLY bind stream and leaves the
lazy_bind stream empty, with no __la_symbol_ptr or stub helper, so the
macOS target cannot honour the flag. The patcher now throws "macOS
target does not support --lazy-binding", in the form of its
--windows-diagnostics check, so such a conversion exits 2 and writes no
output. Conversions with bundled modules were already refused by the
guest module builder.
2026-10-27 05:59:10 +01:00
MarcZX10 5dfc20dcf2 docs(usage): link late storage image stores to the AGC driver debt file 2026-10-26 23:24:24 +00:00
MarcZX10 aa461c1219 docs(usage): note that ANYPS5_OVERLAY=0 is accepted 2026-10-26 23:24:24 +00:00
MarcZX10 04ebed4090 docs(usage): update the storage texture cache cap 2026-10-26 23:24:10 +00:00
MarcZX10 e74c19d2c6 docs(usage): say that the reward icon call returns an error instead of stopping 2026-10-26 23:24:10 +00:00
MarcZX10 57b58fabf0 docs(usage): describe the param.sfo fallback for title metadata 2026-10-26 23:24:10 +00:00
MarcZX10 ef824756df docs(usage): list every condition that makes the import audit exit 1 2026-10-26 23:24:10 +00:00
MarcZX10 c19c8658dc docs(usage): list the partial class of the import audit 2026-10-26 23:24:10 +00:00
WhiteAssassins 6ad4710217 docs(tools): clarify patch catalog metadata compatibility 2026-10-26 19:01:46 -04:00
WhiteAssassins 5c9af08324 feat(tools): add optional patch catalog metadata 2026-10-26 19:01:46 -04:00
Dean 6df35a4f58 Merge pull request #10997 from SandstromPL/fix/relinker-backup-copies-in-conversion
fix(relinker): skip backup copies of guest modules in the online converter too
2026-10-27 10:58:32 +13:00
Dean 1748d26517 Merge pull request #10871 from Chronyyx/feat/relinker-frame-short-exits
feat(relinker): frame red-zone leaves whose prologue or exit is shorter than a jump
2026-10-27 10:55:26 +13:00
Dean b7cfbf0115 Merge pull request #9346 from Techx3/feat/fullscreen-env
feat(libSceVideoOut): open the display window fullscreen with ANYPS5_FULLSCREEN
2026-10-27 10:29:49 +13:00
Adrià ad6a8e646e Merge pull request #10487 from EagleBearerYS/feat/agc-overlay-detail-page
feat(agc): add a detailed second page to the performance overlay
2026-10-26 22:24:46 +01:00
Adrià c7b4878fa8 Merge pull request #10577 from Contemplating-Rain/docs/usage-sandbox
docs(usage): state that converted titles run without a sandbox
2026-10-26 22:07:38 +01:00
Yunus Shaikh b2d870962b docs: describe the performance overlay's second page
USAGE.md's performance overlay section now gives F10's cycle (off, page
1, page 2, off) and ANYPS5_OVERLAY=2, a table with one row per line of
page 2 that names each source and the system it comes from, and what the
page costs: the trace totals it turns on while it shows, and the checks
and counters that run while the overlay is hidden or on page 1.
ENVIRONMENT.md's ANYPS5_OVERLAY row lists page 2.
2026-10-26 20:42:30 +01:00
Adrià cbf76e7a6e Merge pull request #9408 from rursache/feat/macos-trace-imports
feat(relinker): trace function imports on macOS
2026-10-26 11:27:51 +01:00
Dean 2bdd30ebe6 Merge pull request #10719 from WhiteAssassins/feat/patch-advisor-list-verified
feat(tools): list verified patch catalog entries
2026-10-26 20:00:41 +13:00
ebosido444-ai e48781e8fe feat(relinker): report the build revision with --version
The relinker binary carried no build identity: a release build and a
checkout of main were indistinguishable, so a report could not name the
build it came from. --version prints the revision git describe reports,
falling back to "unknown" when the tree has no git metadata, and needs
no input or output paths. The usage line and USAGE.md list the option.
2026-10-26 09:57:41 +03:00
Dean dbf4f6aa3f Merge pull request #10607 from roboterspinne/fix/relinker-linux-run-path
fix(relinker): validate every entry of the Linux run path
2026-10-26 14:26:39 +13:00
frankea b5c6010f80 Merge remote-tracking branch 'origin/main' into fix/direct-memory-12gib 2026-10-25 20:21:28 -04:00
Adrià 58c9977e3b Merge pull request #9562 from milescoviello/feat/uds-trophy-progress
feat(libSceNpTrophy2,libSceNpUniversalDataSystem): unlock progressive trophies through _UpdateTrophyProgress
2026-10-25 19:45:49 +01:00
Adrià 5d48c6233e Merge pull request #9401 from tibzejoker/perf/grow-pipeline-store
perf(agc): size the pipeline store to the title's working set
2026-10-25 19:07:59 +01:00
Radu Ursache 66ca5c0442 feat(relinker): trace function imports on macOS
Walk each macOS function import before the guest entry and pass it through TraceImport_nid_no_patch, as Linux and Windows already do. An x86-64 libc build records the call and prints it on SIGABRT.
2026-10-25 18:37:23 +01:00
Adrià 7b7d445bfb Merge pull request #9439 from milescoviello/feat/trace-calls-file
feat(libc): write the called imports to APS5_TRACE_CALLS_FILE every 10 seconds
2026-10-25 17:42:50 +01:00
Adrià Franch 6ce060e3ee docs(libSceNpTrophy2): describe max and int32 statistics and property filters in USAGE 2026-10-25 17:24:50 +01:00
milescovielloandClaude Opus 5.5 ca34fdb351 feat(libSceNpTrophy2,libSceNpUniversalDataSystem): unlock progressive trophies through _UpdateTrophyProgress
Titles report a progressive trophy's progress with _UpdateTrophyProgress
events. Their udsNN.ucp rules feed $._trophy_progress into an int32
statistic with the max aggregation, filtered on $._trophy_id, and the
trophy's unlockCondition names that statistic. Those statistics and
rules were skipped and the events were dropped, so such trophies never
reported progress or unlocked (21 of Borderlands 4's 64).

- Read max statistics (largest value posted, from initialValue) and
  int32 statistics (0 to 2147483647).
- Read a rule condition with one == property equal to an unsigned
  integer, and apply the rule only to events whose property matches.
- Post _UpdateTrophyProgress through the statistic rules.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-25 17:24:43 +01:00
boykopovar 2e773bff38 Merge pull request #10990 from boykopovar/feat/nid-patcher-exec
feat(nid): executables nid patching functional
2026-10-25 18:56:44 +03:00
Adrià de74cf1deb Merge pull request #9488 from dantdmdarealguy/docs/relinker-converted-module-output
docs: describe the converted module output the relinker prints
2026-10-25 16:16:34 +01:00
roboterspinne 727939dd08 fix(relinker): reject an existing directory at any output path before writing
Only the main executable output was checked for being a directory. A
directory at a guest module, extra executable, registry, needed-library,
patch manifest, icon, desktop entry or diagnostics path failed only when
it was opened, in most cases after earlier outputs had been written.
checkOutputInputs now rejects an existing directory for every output
kind it checks, as 286cf28ec7 did for the main executable. Such runs
still exit 2, now before any output is written.
2026-10-25 15:44:18 +01: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
boykopovar e3db6dacf7 docs(nid): remove executable patching debt entry 2026-10-25 15:05:11 +03:00
boykopovar 1cf017b189 feat(nid): add executable import patching with optional sce filter 2026-10-25 15:03:02 +03:00
Dean 5aa203ba74 Merge pull request #9663 from AdnanKhan-ak47/feat/relinker-report-unconverted-needed
feat(relinker): report needed modules shipped outside the module directories
2026-10-25 21:50:08 +13:00
ChronyyxandClaude Opus 5.5 c697fb0ba9 feat(relinker): frame red-zone leaves whose prologue or exit is shorter than a jump
--frame-red-zone replaces a leaf's prologue and each exit with a 5-byte jump
to a stub, so it skipped leaves whose pushes or pop-and-ret exit were shorter
than that, and leaves with neither pushes nor an allocation. A short prologue
now takes in the straight-line instructions after it and a short exit those
before it, re-encoded in the stub with the moved displacement. Widening stops
at branches, rets, RIP-relative instructions, pushes and pops, and the leaf is
skipped when a branch targets the instructions taken in or the first
instruction of a widened prologue, or when a leaf without pushes pushes or
pops.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-25 02:47:12 -04:00
frankea ad9a0c8ef9 fix(libkernel): report 12 GiB of direct memory, as a PS5 does
sceKernelGetDirectMemorySize returns 0x300000000 inside Gran Turismo 7 (PPSA01317) on a PS5 with firmware 13.40. DIRECT_MEMORY_SIZE was 13824 MiB.
2026-10-24 22:11:58 -04:00
milescovielloandClaude Opus 5.5 a938dd8f20 feat(libc): write the called imports to APS5_TRACE_CALLS_FILE every 10 seconds
A traced run that ends without a crash or an abort never reports which
imports it called. With APS5_TRACE_CALLS_FILE set, the first traced import
starts a thread that rewrites that file every 10 seconds with every import
called so far, most called first.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-25 00:15:39 +00:00
thibautandClaude Opus 5.5 ad047899bb perf(agc): grow the pipeline store from 1024 up to 4096 entries
The graphics pipeline store kept a fixed 1024 entries and the pipeline journal replayed at most
1024 records, and a replayed pipeline that found the store full was dropped. A title whose
working set is larger rebuilt the rest at the draw on every run, and evicted pipelines it kept
using were rebuilt again and again.

The bound now starts at 1024 and doubles up to 4096: a journal replay that does not fit grows it
instead of dropping the pipeline, and so does eviction churn (a ghost list of evicted keys, checked
every bound/32 evictions: more than half of them came back). It never shrinks during a run;
APS5_PIPELINE_STORE_ENTRIES still fixes it. The journal loads its last 4096 records by default
(APS5_PIPELINE_JOURNAL_ENTRIES). Resident pipelines are bounded by count, not bytes.

agc_driver_recorder_tests --benchmark-pipeline-store-memory [count] (opt-in, not registered)
builds count graphics pipelines with one fragment module each through CachedPipeline and prints
process private bytes and VK_EXT_memory_budget heap usage before and after: with the triangle
shaders about 59 KiB host and no device memory per pipeline on an RTX 4090, 100 KiB host and
8 KiB device-local on a UHD 770.

Tests: agc_pipeline_store_growth (fails on main), agc_pipeline_store_fixed_bound,
agc_pipeline_store_replay_growth (replays on one thread: the mock Vulkan is not thread-safe).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_017SNUYRd7sRKZrMYpquAsnU
2026-10-25 02:02:41 +02:00
Dean c4446bbb09 Merge pull request #9332 from rooklz/fix/windows-console-base
fix(relinker): prefer 0x400000 for Windows executables
2026-10-25 12:57:28 +13:00