Commit Graph
9104 Commits
Author SHA1 Message Date
xXPBSXxandClaude Sonnet 5.5 cd09badb2b fix(libkernel): fail a short or long socket address like FreeBSD
bind, connect and sendto answered EFAULT for an address length below 2 and EAFNOSUPPORT for an AF_INET address below 16 or an AF_INET6 address below 28 bytes. FreeBSD 11.4's getsockaddr fails a length below 2 with EINVAL and above SOCK_MAXADDRLEN (255) with ENAMETOOLONG, and the protocols compare the length with sizeof(struct sockaddr_in) or sockaddr_in6 and fail with EINVAL.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-20 02:30:55 +02:00
hamb3r 47591f2e92 docs(debt): update sceLibcBacktrace technical debt entry for Windows 2026-10-20 03:28:37 +03:00
hamb3r 387be86004 docs(debt): move Dinkumware thread debt entries from libSceAmpr to libc 2026-10-20 03:22:13 +03:00
Savvanis SpyrosandClaude Opus 5.5 6e4c01f91c feat(libSceNpManager): answer the PS4 account id and presence queries for a signed-out user
sceNpGetAccountId and sceNpSetGamePresenceOnline report NP as signed
out, and sceNpUnregisterPlusEventCallback returns 0 like the premium
form.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-20 03:19:49 +03:00
Adrià 34b1b77abf Merge pull request #7651 from DavidSamir/fix/relinker-amd-only-branch-targets
fix(relinker): ignore direct branch targets inside an instruction past its prefixes
2026-10-20 02:13:47 +02:00
Karim Masmoudi 3cae921a66 fix(relinker): probe masked store elements before the store under --to-rosetta
Rosetta ends the process instead of raising SIGSEGV or SIGBUS when a
VMASKMOVPS, VMASKMOVPD, VPMASKMOVD or VPMASKMOVQ store faults on any
element other than an active first element ("rosetta error: unexpectedly
need to EmulateForward on a synchronous exception"). Measured on an M5
with macOS 27.0.1 for all eight 128- and 256-bit store forms. A masked
store into a page the macOS write watch keeps read-only therefore ends
the title.

--to-rosetta now moves each masked store to a stub that saves RAX, RCX
and RFLAGS below the red zone, computes the operand address with LEA,
reads the mask sign bits with VMOVMSKPS or VMOVMSKPD, and writes to the
first and last byte of every active element with LOCK OR of 0. Those
writes fault normally, so the write watch sees the page and unprotects
it, and they leave memory unchanged. The stub then restores the
registers and runs the original store. Segment and address-size
prefixes are kept on the probes, RSP-based operands skip the spill
frame, and RIP-relative operands are relocated. Masked loads, the
Intel target and a plain relink are unchanged.

masked_store_lowering decodes every form, register and extension,
checks the stub bytes, and on x86-64 Linux and macOS runs 1728 stubs
across all forms, six addressing modes, six offsets around a read-only
page and six mask patterns. It checks the stored bytes, that exactly one
fault reaches the handler when an active element touches the page,
that no register, flag or red-zone byte changes, and that RSP is
restored. Without the probes the x86-64 build aborts under Rosetta.
test_to_rosetta.py checks that only --to-rosetta lowers a VMASKMOVPS.
2026-10-20 01:12:24 +01:00
Adrià fafadca12c Merge pull request #7529 from Aspct3434/feat/swscanf-pointer
feat(libc): scan %p in swscanf and swscanf_s
2026-10-20 02:09:37 +02:00
Adrià 5253446882 Merge pull request #7543 from ionut27001/fix/libkernel-getrlimit-console
fix(libkernel): report the getrlimit values measured on a PS5 for RLIMIT_STACK, RSS, MEMLOCK and NPROC
2026-10-20 02:07:39 +02:00
battleblob1andClaude Opus 5.5 f95471ec6a feat(shader): read domain inputs at a control-point index computed from data
A domain program that picks one of its patch's control points from data
(Onimusha: Way of the Sword, PPSA27836, selects a corner with v_cmp and
v_cndmask before a buffer_load from the off-chip ring) was refused with
"the tessellation ring or LDS address is not affine in the control point
and relative patch". Computed indices were accepted only for hull LDS
reads.

- The address evaluator gives off-chip EvaluationInput reads the same
  dynamic term as hull LDS reads, and a value read from the patch's own
  ring or LDS no longer counts as depending on the relative patch index,
  since the lowered read takes the patch implicitly.
- When the program also uses its relative patch index as data, the
  index is replaced by the grouped patch instead of 0, which left a
  computed read's address pointing into another patch. Such reads now
  subtract their relative patch term, for hull and domain reads alike;
  reads in programs that do not use the index as data keep their address.
- The computed offset must be a whole number of control points, and the
  backend clamps the domain gl_in index to the last output control point
  as it already does for hull reads.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-20 03:05:55 +03:00
bl4nkTHEBUNKER f57b79ef51 fix(libScePad): report the DualSense touchpad resolution
The controller information reported 1920 by 943, the DualShock 4 height with
the DualSense pixel density, while the host controller's fingers were scaled to
1920 by 942 and the keyboard touch contacts sat on the 942 centre line. A title
that maps touch coordinates through the reported resolution lost the lower part
of the touchpad. The width and height now live beside the pad state and all
three places use them.
2026-10-20 01:52:50 +02:00
Dean 3aa35dc014 Merge pull request #6730 from EagleBearerYS/perf/agc-remember-evicting-refusals
perf(agc): remember an evicting import request's budget refusal until it could succeed
2026-10-20 12:52:11 +13:00
Adrià ef0eed9b31 Merge pull request #6680 from 011010/feat/libSceNgs2-geom-report
feat(libSceNgs2.native): keep a registry of report handlers
2026-10-20 01:50:58 +02:00
Kang, Harry Zixuan 995c10ec6b fix(build): allow static MinGW runtimes in relinker-only tests 2026-10-19 16:50:10 -07:00
0xcrstnandClaude Opus 5.5 7e2eb2c0d5 Merge upstream main into ufc6/descriptor-web-fold
Resolve docs/dev/debt/shader.md: keep main's reworded guest memory load guard entry and add the descriptor web arm entry after it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-20 02:47:33 +03:00
Adrià 8038a425fb Merge pull request #7574 from bl4nkTHEBUNKER/feat/system-gesture-primitive-touch
feat(libSceSystemGesture): report primitive touch events from the pad reports
2026-10-20 01:45:51 +02:00
Adrià 25ab3510ca Merge pull request #7623 from thuanquang/fix/subvector-loop-exec-zero
fix(shader): test an empty exec mask in s_subvector_loop_begin with one compare
2026-10-20 01:41:41 +02:00
Adrià 88fb5592c6 Merge pull request #7611 from Lindamea1/fix/kernel-pthread-attr-sched-getters
feat(libkernel): implement scePthreadAttrGetschedpolicy and scePthreadAttrGetinheritsched
2026-10-20 01:23:13 +02:00
Th3EvilGod 81b28cef61 fix(libc): use precise Windows thread sleep 2026-10-20 03:21:28 +04:00
Adrià 606ebafd20 Merge pull request #7612 from Lindamea1/fix/netctl-getinfov6-export
feat(libSceNetCtl): declare sceNetCtlGetInfoV6
2026-10-20 01:20:06 +02:00
Adrià 7c2334d208 Merge pull request #7477 from SwetabhSingh17/feat/json2-value-operator-bool
feat(libSceJson2): implement Value, Object, Array, and String methods
2026-10-20 01:02:24 +02:00
Adrià 9f9cf38bb0 Merge pull request #7493 from Lindamea1/fix/scenet-tcp-nodelay
fix(libSceNet): support TCP_NODELAY in sceNetSetsockopt and sceNetGetsockopt
2026-10-20 01:01:26 +02:00
Dean 0393728fd3 Merge pull request #7005 from TheSovietWaffle/fix/videoout-disable-sdl-wgi
fix(libSceVideoOut): add APS5_NO_WGI to turn off SDL's Windows.Gaming.Input backend
2026-10-20 11:53:01 +13:00
Dean 053034f41b Merge pull request #7579 from LeoFeitosa/fix/dcc-mip-block-units
fix(agc): track DCC storage images with more than one mip as one unit
2026-10-20 11:52:35 +13:00
Dean 2178eb99aa Merge pull request #7042 from thuanquang/fix/f64-add-mul-denormal-flush
fix(shader): flush v_add_f64 and v_mul_f64 denormals by the f64 field
2026-10-20 11:52:04 +13:00
Dean 89369fdc6a Merge pull request #6557 from simonbronk/fix/native-msaa-depth-iterate256
fix(agc): import native multisample depth whose HTILE is not ITERATE_256
2026-10-20 11:51:50 +13:00
Adrià 8b20da70a1 Merge pull request #7546 from ionut27001/fix/libc-rand48-zero-extend
fix(libc): return jrand48 and mrand48 zero-extended as measured on a PS5
2026-10-20 00:51:07 +02:00
Adrià 309ab11eaf Merge pull request #7539 from ionut27001/fix/libkernel-inet-ntop-pad
fix(libkernel): match inet_ntop and inet_pton padding and null pointers as measured on a PS5
2026-10-20 00:51:02 +02:00
Yossi Yadgar f4de10a73f docs(debt): note where the empty access unit codes come from 2026-10-20 01:47:24 +03:00
erickerxhalliandClaude Opus 5.5 95ea06e80b fix(libSceMove): throw when opening for another user or an open slot
sceMoveOpen returned a new handle for any user, type and index, although
the console's result for a user other than the initial user and for a
type and index that are already open is not known. Both now throw, as
libSceHmd2 does for another user. Record which shadPS4 behaviour the
handle and open checks add to.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Arbzg9c2DA4DEFKVSvRgYv
2026-10-19 22:31:58 +00:00
Adrià 3aa4448ed3 Merge pull request #7479 from ErenYeager1836/fix/web-browser-dialog-close-status
fix(libSceWebBrowserDialog): transition to finished on dialog close
2026-10-20 00:30:11 +02:00
David a42118dc45 docs(debt): list the Videodec2 exports that report not implemented 2026-10-20 02:21:10 +04:00
SuarezPM bf47697ec0 feat(relinker): lower MCOMMIT and RDPRU for Intel with execution tests
MCOMMIT becomes STC plus NOP padding and RDPRU goes through a
runtime-checked stub returning the host TSC for MPERF/APERF while
other selectors yield zero, with converter and execution tests.

docs/dev/debt/relinker.md records the new lowering and its unverified
assumptions.
2026-10-19 19:19:31 -03:00
Adrià 0d8c51a54e Merge pull request #7478 from ErenYeager1836/fix/cdlg-player-review-close-status
fix(libSceCdlgPlayerReview): transition to finished on dialog close
2026-10-20 00:18:56 +02:00
Adrià 9b4b3cf463 Merge pull request #6941 from kq62/fix/mesh-barycentric-emulation
feat(shader): emulate barycentrics and per-vertex parameters on the mesh path
2026-10-20 00:17:49 +02:00
Savvanis SpyrosandClaude Opus 5.5 1027bfbce1 feat(libs): declare sceGameLiveStreamingEnableLiveStreaming and sceKernelPrintBacktraceWithModuleInfo
PS4 titles import both and do not load without them; every call throws and
the debt files list them.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-20 01:14:16 +03:00
Joey Fisher b4cd843324 fix(agc): fail a template's proof on a released texture and audit it with the full walk
The fast proof of a cached ShaderResources proves each sampled texture
from write stamps, keys and the pending registry. It never asks whether
the sampled lookup would still return the bound Texture, so a template
whose surface memory is unchanged keeps binding an old object:

- After the sampled cache drops or replaces the entry (#6492 marks the
  texture released), Find keeps serving the template until the next
  Insert, and its fast proof passes.
- When the lookup's answer changes without any lookup running (a
  snapshot whose surface became host-imported is viewed through its
  storage image from then on), nothing replaces the entry and the
  template keeps the snapshot until it leaves the resource cache.

The fast proof now fails with 'replaced texture' when a bound texture
is released. A template whose last full walk is older than
APS5_TEMPLATE_AUDIT_MS (default 1000, 0 turns it off) takes the full
walk instead of the fast proof ('audit'), so a different lookup answer
fails the proof and the template is rebuilt.
2026-10-19 16:13:56 -06:00
davidamsellem 5882b2d449 docs: cite the gfx1031 image atomic measurement, float atomics included 2026-10-20 00:09:52 +02:00
davidamsellemandClaude Opus 5.5 e91d7a16bb docs: measure integer image atomics on 32-bit surfaces on gfx1100
The entry stated that image atomics on 32_SINT and 32_FLOAT act on the
raw dword with no measurement behind it. On gfx1100 the 13 integer image
atomics return and store the same raw-dword results on 32_UINT, 32_SINT
and 32_FLOAT, while 16_UINT and 8_8_8_8_UINT controls differ. gfx1100
has no float image atomics, so that part stays open.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-20 00:09:34 +02:00
Adrià 0929be5e8d Merge pull request #7463 from T3cm0/bionic/vrtracker2-before-init
feat(libSceVrTracker2): answer as the console's module before initialization
2026-10-20 00:08:50 +02:00
simonbronk 2b991e8751 fix(json2): keep numeric conversion independent of host locale
Prevent decimal-comma LC_NUMERIC from emitting invalid JSON and silently truncating decimal-point input. Keep 17-digit output, signed underflow and overflow rejection without changing the process locale.

AI-assisted: yes (OpenAI Codex). Windows WinLibs GCC15.2 Release: original shared Json2 fails the final locale regression; fixed guest_json and guest_json_numeric_locale pass (2/2, no skips). Final conventions pass. Only relevant runtime/test targets built; full build/full suite and game/console/Linux/macOS behavior unverified. No performance or coverage increase claimed.
2026-10-20 00:07:10 +02:00
Savvanis SpyrosandClaude Opus 5.5 b236ea557b feat(libSceCamera): report that no camera is attached
Add libSceCamera with sceCameraIsAttached, which reports camera 0 as not
attached and rejects other indexes, and declare the ten camera functions
PS4 titles import without an implementation.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-20 01:05:09 +03:00
Savvanis SpyrosandClaude Opus 5.5 d42fb3130d feat(libSceNpManager): answer the PS4 account queries for a signed-out user
sceNpGetAccountCountry, sceNpGetAccountDateOfBirth, sceNpGetAccountLanguage
and sceNpGetParentalControlInfo take an online id that matches no user,
sceNpGetUserIdByOnlineId and sceNpCheckPlus report NP as signed out, and
sceNpNotifyPlusFeature is declared and throws.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-20 01:04:01 +03:00
Dean Galvin 8ea85e6d55 Merge main into pr-7579
# Conflicts:
#	core/libs/prx/libSceAgcDriver/Graphics/include/TextureTiling.hpp
#	core/libs/prx/libSceAgcDriver/Graphics/src/TextureTiling.cpp
#	docs/dev/debt/libSceAgcDriver.md
2026-10-20 11:01:23 +13:00
erickerxhalliandClaude Opus 5.5 13227a33ed fix(libSceMove): throw for a handle that is not open
Track the handles sceMoveOpen issues. A handle that was never opened,
is closed or was opened before sceMoveTerm now throws instead of
succeeding, since the console's INVALID_HANDLE result and its order
against INVALID_ARG are not known. List the no-controller path under
Silent stubs, as libSceHmd and libSceBluetoothHid do, and check the
handle values in the test.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Arbzg9c2DA4DEFKVSvRgYv
2026-10-19 21:58:05 +00:00
Ishmam Ahmed 78634fb0a9 feat(relinker): support --trace-imports for Linux output
The Linux entry stub now passes each traced import through libc.prx's
TraceImport_nid_no_patch before it calls the guest entry, and stores the
returned thunk in the import's slot. The same imports are traced as on
Windows: functions bound through a PLT slot or a GOT slot, without an
addend, and not weak. TraceImport_nid_no_patch is bound eagerly through
an added GLOB_DAT relocation, so a libc.prx without it fails at load.
Each slot's page is made writable with mprotect first, so slots inside a
PT_GNU_RELRO range can be replaced.

--trace-imports now requires libc.prx among the libraries on Linux too,
and is refused with --macos.
2026-10-19 22:56:03 +01:00
Ishmam Ahmed 0bad015e21 fix(libc): keep the Linux call trace report when two threads abort
A thread that lost the race to write the report passed SIGABRT on straight away, and the default action ended the process while the first thread was still writing. It now waits for the report to finish, polling with nanosleep for at most 2 seconds, before it chains. guest_call_trace_abort_race aborts from two threads at once and checks the whole report; it failed 35 times in 50 without the wait. Reported by jotitadev.
2026-10-19 22:56:02 +01:00
Ishmam Ahmed 0454726744 fix(libc): write the Linux call trace report with signal-safe calls only
The SIGABRT handler used stdio and dladdr, so an abort raised while another thread held the stderr lock or the loader lock hung instead of ending. The report is now formatted into a stack buffer and written with write(2). Callers are named from a module list taken with dl_iterate_phdr when imports are traced, and import counts are read without a lock from a fixed record array. The abort test now holds the stderr lock in another thread, which timed out before this change.
2026-10-19 22:55:08 +01:00
Ishmam Ahmed d128ce7bb8 feat(libc): record traced system library calls on Linux
Build the call tracer for Linux as well as Windows. The thunk area is a
memfd mapped twice, writable and executable, and threads are named by
gettid. Linux has no crash report, so the first traced import installs a
SIGABRT handler that prints the last calls and the most called imports,
then passes the signal on to the previous handler.

guest_call_trace and guest_call_trace_abort now run on Linux too.
2026-10-19 22:55:07 +01:00
juanpimg 90acb96a2e docs(debt): name the declared exports and state the ABI caveat 2026-10-19 23:46:13 +02:00
Ararararagi c136ffa1a9 fix(libSceNpCppWebApi): name the exports the NID database resolves
The 73 sceNpCppWebApiUnknown<nn> stubs carried an APS5_EXPORT alias because their
names were placeholders. aerolib names all of them, and each name recomputes to
the NID a title imports, so the alias is dropped and the loader derives the NID
from the real symbol name, as the rest of the library does. Behaviour is
unchanged: every one of them throws.

The stubs are ordered by demangled name instead of by NID, so the Common template
instantiations and the V1/V5 accessors sit together, as the rest of the file
does. No symbol changes: the built .prx exports the same 359 NIDs as main.
2026-10-19 22:44:05 +01:00