Commit Graph
14017 Commits
Author SHA1 Message Date
ideabsassistenza 5e4d5e64ca fix(tools): compare trace slice boundaries at nanosecond precision 2026-10-13 21:52:37 +02:00
SimoneandClaude Opus 5.5 009ed711a9 fix(relinker): keep weak imports weak in macOS binds
The macOS executable patcher dropped PeImport::Weak, so every bind was
written without flags and dyld refused to load a binary whose weak
import no module exports. Carry the flag into MacOsBind and set
BIND_SYMBOL_FLAGS_WEAK_IMPORT for those binds, as Linux and Windows
already bind a missing weak import to 0.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-13 21:49:20 +02:00
MarcZX100 852c808373 test(libSceNgs2): fix custom filter regression expectations 2026-10-14 08:47:31 +13:00
ZheorgyanandMarcio Rocha Zacarias 3960519b1e fix(agc): make host imports over writable pages on macOS
Co-authored-by: Marcio Rocha Zacarias <[email protected]>
2026-10-13 21:43:21 +02:00
JAB-devandClaude Sonnet 5.5 cf8c63b9b8 perf(libkernel): find a cached module's unwind tables without VirtualQuery on Windows
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-13 21:40:15 +02:00
Dean Galvin 22f6b1735c docs: keep the technical debt index and end the NGS2 entry with a newline
The rebase onto main deleted docs/dev/TechnicalDebt.md, which is now the
index that points into docs/dev/debt/. Restore it from main and add the
missing final newline to docs/dev/debt/libSceNgs2.native.md.
2026-10-14 08:39:38 +13:00
jnbla6 40ebfae70b fix: throw on unsupported filter types and update debt docs 2026-10-14 08:39:32 +13:00
Jnbla6 ef52b16920 feat(libSceNgs2.native): add custom voice filter support and related tests for 0x13 issue case 2026-10-14 08:39:32 +13:00
Jnbla6 855823e85e feat(libSceNgs2.native): implement custom sampler rack id 0x4001 (#4334) 2026-10-14 08:39:32 +13:00
lorkydey e229262449 feat(shader): link raw fragment user-data tails with a constant high half 2026-10-13 21:34:59 +02:00
Prophet069 dbbe54eebe feat(tools): fail import audits on strict provider mismatches 2026-10-13 21:33:51 +02:00
lorkydey 7092b01b0d test(shader): preserve valid positions in vertex tail state checks 2026-10-13 21:29:52 +02:00
mrfelek 742b7baba3 feat(libSceNetCtl): implement sceNetCtlRegisterCallbackV6 and sceNetCtlUnregisterCallbackV6 2026-10-13 21:27:00 +02:00
krishalivaibhav 741b34e45d test(libSceUserService): cover user event polling 2026-10-14 00:55:19 +05:30
lorkydey d45fee9b69 fix(import-audit): preserve JSON reports when writing fails 2026-10-13 21:20:45 +02:00
mrfelek 48b69fad4d feat(libc): implement sceLibcMspaceAlignedAlloc 2026-10-13 21:20:32 +02:00
mrfelek af33c8a1e5 feat(libSceAudioOut): implement sceAudioOut2DisableChat 2026-10-13 21:19:10 +02:00
lorkydey bbeec6d0b4 feat(shader): link raw vertex prologs through user-data tails 2026-10-13 21:18:49 +02:00
MarcZX100 808b2a83d3 test(relinker): expect fixed executable ASLR policy 2026-10-13 19:17:38 +00:00
SandstromPLandClaude Opus 5.5 299a736b54 feat(libSceCesCs): build libSceCesCs-module from the libSceCesCs source
Titles that link the character conversion library under its module name
need libSceCesCs-module.prx, which nothing built: Void Terrarium
(PPSA03061, #5055) and Call of Duty: Black Ops (PPSA34501, #5389) were
run with a copy of libSceCesCs.prx under that name. Both libraries are
now built from the same source by add_sce_ces_library, as libScePsml and
libSceFont-module are, and guest_ces_module runs the CesCs test against
the module-named library.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14 00:44:56 +05:30
ps54allandClaude Opus 5.5 df32a44f79 feat(libSceNet): implement sceNetResolverStartNtoa6
Resolve a host name to its first IPv6 address through the host resolver
(getaddrinfo with AF_INET6) and write the 16-byte address. The lookup
shares the IPv4 path's resolver bookkeeping (abort preservation, error
state); a name without an IPv6 address fails with RESOLVER_ENODNS like a
failed lookup. Nonzero flags throw.

Metal Gear Solid 4 Master Collection (PPSA18194) imports it and failed to
load without it (unresolved zl35YNs9jnI from libSceNet.prx).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-13 21:13:34 +02:00
Leandro Soares e5c782c54f fix(relinker): load converted Windows executables at a fixed low base 2026-10-13 19:11:54 +00:00
ee6aba54 27b75311ff fix(libSceFiber): end the frame chain of a fiber with a null frame
Aps5FiberMain kept the fiber's entry address in rbp when it called the
entry, so the guest entry saved that code address as the caller's frame.
A guest walking frame pointers from inside a fiber read machine code as
a frame record and faulted. libSceFiber is now built with frame
pointers: Aps5FiberMain sets up a frame whose saved rbp is the zero of
the initial fiber frame, and the chain ends there.
2026-10-13 21:10:50 +02:00
MarcZX100 2ad825f659 fix(shader): require the version 22 F16 request flag 2026-10-13 19:09:49 +00:00
MarcZX100 0e087e974e test(shader): cover version 21 F16 request layout 2026-10-13 19:09:49 +00:00
MarcZX100 dffdb5002e fix(shader): read both version 21 request layouts 2026-10-13 19:09:49 +00:00
Stefan Bucataru 89a8ec58b1 fix(tools): validate empty ELF dynamic symbol table bounds 2026-10-13 21:07:36 +02:00
Ondra97 7b70941f55 fix(relinker): retain imports used by sectionless exports 2026-10-13 21:06:33 +02:00
AlxcBTWandClaude Opus 5.5 5cf0aa48d9 feat(agc): count which key component differs on resource-content cache misses
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-13 21:04:44 +02:00
Dean dacd78525e Merge pull request #4949 from fdfawef324/fix/agc-unwritten-sample-locations
fix(agc): start the sample location registers at their clear-state value
2026-10-14 08:03:16 +13:00
MarcZX100 dfc9223248 docs(libkernel): retain chflags debt after rebase 2026-10-13 18:54:49 +00:00
MarcZX100 8b5cfb9850 test(libkernel): declare chflags guest entry point 2026-10-13 18:54:07 +00:00
David 4dd97f7dbe feat(libkernel): implement chflags through the guest path resolver
PS5MC (PPSA99420, Kodi 22) imports chflags (ixrw0h2tWuI) from
libkernel.prx, one reference. Predicted stop once the imports ahead of
it (pthread_getthreadid_np, sendfile, wcstok, pause, setrlimit and the
termios calls) are covered (not a run):

  FAIL: unresolved ELF import ixrw0h2tWuI from libkernel.prx

The NID is computed with tools/nid_names.py and matches aerolib.

Follows FreeBSD 11.4 (8c639945a44588f6cfdddfb057bb5aad88735da0)
sys/kern/vfs_syscalls.c kern_chflagsat and setfflags, and
sys/ufs/ufs/ufs_vnops.c ufs_setattr, for a root caller: the lookup
through the guest resolver gives EFAULT, ENOENT and ENOTDIR (also for a
file reached through a trailing slash or used as a directory), a bit
outside the 17 UFS flags of sys/sys/stat.h (VNOVAL included) gives
EOPNOTSUPP, and SF_SNAPSHOT gives EPERM, since the snapshot flag cannot
be toggled. No host keeps BSD file flags and stat reports st_flags 0,
so flags 0 succeed without touching the file and any other flag throws
with the flags named. UF_READONLY and the other Windows-attribute flags
are not mapped to FILE_ATTRIBUTE_READONLY and its siblings: UFS stores
them without enforcing them, and on Windows the read-only attribute is
already the owner write bit of chmod.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
(cherry picked from commit 16e5b7ccd04e6467a5a282b6cfc9271304f42244)
2026-10-13 18:54:05 +00:00
Anthony 8e1cf6d3fb test(pngenc): cover output capacity boundaries 2026-10-13 15:44:20 -03:00
Jesus 50b06110bb fix(libkernel): keep the Windows vnode watch when the watched file is deleted
Windows 10 1903 deletes a file with open handles by moving it into
$Extend\$Deleted until the last handle closes, so the next snapshot of a
watched file that a title (or the test) deleted saw a new path, tried to
watch that directory's changes, got ERROR_ACCESS_DENIED and threw from
the watch thread, which aborts the process; the path change was also
reported as NOTE_RENAME next to NOTE_DELETE. A snapshot with a pending
delete or no links now reports NOTE_DELETE alone and drops the parent
directory watch instead of replacing it, as the file has no directory
to be renamed or removed from any more.
2026-10-13 13:41:05 -05:00
Ondra97 c7800dd96b fix(tools): reject colliding web library archive paths 2026-10-13 20:40:46 +02:00
MiniRML ef1f2b8c77 fix(conventions): accept first-line BOM shebangs 2026-10-13 11:19:59 -07:00
MiniRML e070c72345 fix(tools): preserve external URLs during debt migration 2026-10-13 11:15:35 -07:00
MiniRML 3397e873bc fix(web): reject superscript Windows device names in archives 2026-10-13 11:13:17 -07:00
pushkarreddyy bf1aadea66 fix(conventions): reject modern agent instruction files
Expand AGENT_FILES in tools/check_conventions.py to include instruction and configuration files for modern AI coding assistants (.windsurfrules, windsurf.md, chatgpt.md, .chatgptrules, .aider.conf.yml). Add test coverage in tools/tests/test_check_conventions_agent_files.py.
2026-10-13 23:39:04 +05:30
MiniRML 209ebcf035 fix(web): recognize nested roots with ZIP directory entries 2026-10-13 11:08:12 -07:00
fdfawef324andClaude Opus 5.5 15955c089e fix(agc): start the sample location registers at their clear-state value
A draw with PA_SC_AA_CONFIG.MSAA_NUM_SAMPLES > 0 whose context never
wrote PA_SC_AA_SAMPLE_LOCS_PIXEL_* (context 0x2fe-0x30d) was rejected
with "missing register in context bank at DWORD 0x2fe", because the
registers were absent from the initial context (PPSA07411 stops on it
after two frames). The MSAA_ENABLE single-sample path read them the
same way.

The sixteen registers now start at 0, both initially and after
CLEAR_STATE. That is the value in libSceAgc's own register defaults
(sceAgcGetRegisterDefaults2, every public table that holds context
registers, the tables the initial context already follows for
PA_SU_VTX_CNTL and PA_SC_CONSERVATIVE_RASTERIZATION_CNTL), in amdgpu's
GFX10 clear-state table (clearstate_gfx10.h, gfx10_SECT_CONTEXT_def_8,
loaded by gfx_v10_0_cp_gfx_start before CLEAR_STATE) and the GC 10.3
register reset value (gc_10_3_0_default.h). RADV, radeonsi and PAL
always write the locations themselves and do not settle the unwritten
value.

0 puts every sample at the pixel center. That is not the standard
pattern for any sample count, so such a draw decodes as custom
locations at the center, as a single-sample scan into a multisampled
target already does.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-13 14:06:05 -04:00
codingreapermapsandClaude Opus 5.5 5ca6487dda feat(libSceConvertKeycode): implement sceConvertKeycodeGetCharacter for the US layout
The signature is inferred from PPSA12361: a 16-bit keycode, a second
argument the title passes as 0, the type from
sceConvertKeycodeGetImeKeyboardType and a UTF-16 output. The keycode is a
USB HID keyboard usage and the unshifted US character is returned; a
keycode without a character returns 0. A second argument or keyboard type
other than 0 throws.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-13 19:02:54 +01:00
MiniRML 6c90102e50 fix(progress): follow chains of local stub helpers 2026-10-13 10:59:58 -07:00
thuanquangandClaude Opus 5.5 ae28529f35 fix(conventions): pair each type change with both of its patch headers
git diff prints a file whose type changes (a file replaced by a link or
a submodule) as a deletion and a creation, two diff --git headers for
one --name-status entry, so the checker ran out of paths and stopped
with StopIteration instead of checking the pull request.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14 00:56:08 +07:00
thuanquangandClaude Opus 5.5 058b40530f test(relinker): keep the guest_module_args fixture's GOT out of executable memory
The fixture module was one RWX PT_LOAD, so its GOT slot sat in an
executable segment. On macOS 27, dyld refuses to bind a pointer there
("BIND_OPCODE_DO_BIND pointer bind is in executable segment '__ELF0'"),
and the x86-64 macOS branch of the test failed before reaching DT_INIT.
Split the module into an RX code segment and an RW data segment, as
real modules are laid out.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14 00:49:53 +07:00
thuanquangandClaude Opus 5.5 286cf28ec7 fix(relinker): reject a directory as the executable output path
An existing directory, or a path ending in a separator, was only
rejected when the executable was written, after the converted modules
had already been written to app0/ beside or inside it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14 00:49:48 +07:00
Dean 18c438b109 Merge pull request #4491 from xXPBSXx/fix/playgo-bound-no-chunk-table
fix(libScePlayGo): answer chunk ids from the package layout
2026-10-14 06:42:39 +13:00
Hussein Kadhim 2096410b29 fix(libkernel): report EPERM before EINVAL when writing kern.proc.pathname
FreeBSD sysctl_root rejects a write to a read-only node with EPERM before the node handler checks the MIB length, so a write with a short or long kern.proc.pathname MIB fails with EPERM. sysctlbyname for kern.proc.pathname now goes through sysctl with its 3-component MIB so it follows the same order.
2026-10-13 17:39:56 +00:00
Evgeniy Kazarin ac145e9be4 perf(agc): extend pending write snapshots incrementally 2026-10-13 20:39:19 +03:00