Commit Graph
652 Commits
Author SHA1 Message Date
Maz 859ce80e42 feat(libc): export the wide num_put facet vtable as data
Titles resolve NID 59oywaaZbJk as a 112-byte STT_OBJECT on PPSA16833 libc.prx; export fourteen zeroed slots and the matching id so the data object exists while facet methods stay unwired.
2026-10-24 11:37:58 +04:00
JJenkxandClaude Opus 5.5 e7d3411eea fix(libc): compute nextafter and nextafterf with FreeBSD msun's algorithm, as titles' libc.prx does
nextafter and nextafterf returned the host's functions. On Windows they
set ERANGE for a step from zero to the smallest subnormal, which the
titles' copies do not, and pick a different NaN when both arguments are
NaNs. The titles' copies are FreeBSD msun's s_nextafter.c and
s_nextafterf.c with ERANGE at msun's overflow and underflow returns; both
functions now compute that, choosing the NaN explicitly so the compiler
cannot reorder msun's x + y.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-24 03:23:18 -04:00
Dean 1e577d1c56 Merge pull request #10180 from mazen320/feat/libc-codecvt-iw-vtable
feat(libc): export the wide codecvt facet vtable as data
2026-10-24 20:21:52 +13:00
JJenkxandClaude Opus 5.5 9d9c47b899 Merge main into PR #9850
Additive conflicts with main's newer libc math changes: the debt list keeps
both sides' entries (per entry), the GuestMath.cpp test functions and calls
from both sides are kept, and Math.cpp keeps both sides' independent changes.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-24 03:19:26 -04:00
JJenkxandClaude Opus 5.5 7488308bb9 Merge main into PR #9844
Additive conflicts with main's newer libc math changes: the debt list keeps
both sides' entries (per entry), the GuestMath.cpp test functions and calls
from both sides are kept, and Math.cpp keeps both sides' independent changes.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-24 03:19:24 -04:00
Dean Galvin c3a9a613c7 Merge main into codex/libc-acoshf-msun 2026-10-24 20:00:35 +13:00
Dean 1e20650e84 Merge pull request #10306 from JJenkx/windows/libc-expm1-msun
fix(libc): compute expm1 with FreeBSD msun's algorithm, as titles' libc.prx does
2026-10-24 19:55:25 +13:00
Dean 98a7d60a02 Merge pull request #8306 from ZSWolt/feat/libc-swscanf-wide-synonyms
fix(libc): end swscanf at %S and %C as a matching failure
2026-10-24 19:54:56 +13:00
Adrià b0f57be3c7 Merge pull request #6086 from notaxeltv/feat/libc-thread-hardware-concurrency-ppsa34015
feat(libc): export std::thread::hardware_concurrency (PPSA34015)
2026-10-24 08:18:54 +02:00
orezraeyandClaude Opus 5.5 ac54c95c77 Merge main into fix/libc-strftime-measured-ps5
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-24 02:44:33 -03:00
Dean 09f62b94c9 Merge pull request #9216 from Felipebmaitan/feat/libc-fegetexcept
feat(libc): implement fegetexcept
2026-10-24 18:23:35 +13:00
JJenkxandClaude Opus 5.5 99abd2604d fix(libc): compute expm1 with FreeBSD msun's algorithm, as titles' libc.prx does
expm1 returned the host's expm1, whose last bit differs from the titles'
copy on Windows on 35,152,346 of 320 million random arguments. The titles'
copy is FreeBSD msun's s_expm1.c, and it sets ERANGE only when a finite
argument overflows to infinity. expm1 now computes that algorithm and sets
ERANGE there.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-24 00:43:08 -04:00
Dean Galvin 2f5366ea80 Merge main into feat/libc-swscanf-wide-synonyms 2026-10-24 17:17:02 +13:00
Dean Galvin 18b13fbe64 Merge main into 9945 2026-10-24 15:49:35 +13:00
Dean Galvin 5ec0cdec84 Merge main into 9342 2026-10-24 15:49:35 +13:00
orezraeyandClaude Opus 5.5 c216a3b82d Merge main into fix/libc-strftime-measured-ps5
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-23 23:46:23 -03:00
Yunus Shaikh a809ad7d2f fix(libc): fail a q length in scanf as the console's libc does
The console's own sscanf, run natively from three titles' libc.prx, returns 0 for %qd and stores nothing, where FreeBSD 11.4's source reads q as ll. A q directive now ends the scan there, and the count of conversions before it is returned. The test adds the console's rows for wrapping narrow conversions, saturating 64-bit ones with ERANGE, and %qd.
2026-10-23 19:26:15 -07:00
Dean d7f0c005a9 Merge pull request #9862 from JJenkx/windows/libc-cbrtf-msun
fix(libc): compute cbrtf with FreeBSD msun's algorithm, as titles' libc.prx does
2026-10-24 15:23:06 +13:00
Dean 5669dff560 Merge pull request #9596 from JJenkx/windows/fgetws-console-contract
fix(libc): follow the console fgetws for short buffers and read errors
2026-10-24 15:22:31 +13:00
Dean d1d67190a8 Merge pull request #8720 from orezraey/fix/libc-heap-measured-ps5
fix(libc): follow the default heap's alignment, errno and realloc to zero as measured on a PS5
2026-10-24 14:34:38 +13:00
Adrià FranchandClaude Sonnet 5.5 b443b9f9f0 fix(libc): compare only with std::thread::hardware_concurrency, record host count in debt
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-24 03:31:05 +02:00
orezraeyandClaude Opus 5.5 81d0a5dc15 Merge main into fix/libc-strftime-measured-ps5
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-23 22:26:02 -03:00
Dean 72641c92f6 Merge pull request #9841 from JJenkx/windows/libc-logf-msun
fix(libc): compute logf with FreeBSD msun's algorithm, as titles' libc.prx does
2026-10-24 14:19:40 +13:00
thuanquangandClaude 17c723d8fa docs(libc): correct stale rmdir, nanf and bad_optional_access debt statements
Co-Authored-By: Claude <[email protected]>
2026-10-24 07:59:41 +07:00
JJenkxandClaude Opus 5.5 4fe55c1fbc test(libc): cover powf NaN pairs and pin the msun 9.0.0 revision
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-23 20:17:22 -04:00
JJenkxandClaude Opus 5.5 a29bf781c8 fix(libc): compute powf like the libc.prx that titles ship
powf returned the host pow, except for base 1, so its last bit and errno
depended on the host: on Windows the bits differ from titles' libc.prx on
3,171,678 of 100,001,089 sampled argument pairs. That libc.prx is the
older form of FreeBSD msun's e_powf.c: a NaN argument returns x + y, so
powf(1, NaN) is NaN rather than 1, and (+-1)**+-inf is NaN. It sets EDOM
for a negative base with a non-integer exponent and ERANGE only in its
final overflow and underflow returns.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-23 20:17:22 -04:00
JJenkxandClaude Opus 5.5 8b83c68aad fix(libc): compute exp2f with FreeBSD msun's algorithm, as titles' libc.prx does
exp2f returned the host exp2, so its last bit and errno depended on the
host: on Windows the bits differ from the libc.prx that titles ship on
213,306,266 of the 2^32 floats. That libc.prx is msun's s_exp2f.c, setting
ERANGE only in its overflow and underflow branches. The port gives the same
bits and errno as PPSA07923's, PPSA05916's and PPSA13934's copies for every
argument.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-23 20:16:32 -04:00
orezraeyandClaude Opus 5.5 974e0a89f2 fix(libc): follow the console's week rule and write composites part by part
%U and %W take the weekday as (tm_wday + 7) % 7 and (tm_wday + 6) % 7
with the C remainder, which fits the PS5 rows of libSceLibcInternal.sprx
and of the libc.prx titles ship. A composite conversion is written part
by part, each part all or nothing. %G, %g and %V throw for a tm_yday
past the year and a tm_wday below -6, where no rule fits the console.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-23 21:06:30 -03:00
Dean d284c98b2e Merge pull request #10001 from MarcZX10/codex/libc-coshf-msun
fix(libc): follow msun for coshf
2026-10-24 12:52:24 +13:00
Queuze 897bf2ef6c fix(libc): attach missing standard streams to NUL 2026-10-24 00:51:42 +01:00
p3nicillinandClaude Opus 5.5 02cf85ef89 fix(libc): open NUL on standard descriptors without a stream on Windows
A Windows process started without a standard handle, such as a detached
process or a --windows-gui executable started from Explorer, has
descriptors 0 to 2 whose _get_osfhandle is -2. fcntl then threw on their
unknown file type, which stopped Halo: Combat Evolved (PPSA99500) at
start-up. Open NUL on each of them when libc loads, as Linux and macOS
already open /dev/null on a closed standard descriptor.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-24 00:51:42 +01:00
orezraeyandClaude Opus 5.5 3b962f06ed Merge main into docs/libc-memmem-memccpy-exports
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-23 20:05:29 -03:00
Dean 4dad3f50c3 Merge pull request #8864 from valenciana-nc/fix/bessel-float-zero-exceptions
fix(libc): avoid spurious float Bessel exceptions at zero
2026-10-24 11:57:10 +13:00
Dean 097a9514a0 Merge pull request #8865 from hypermoist/fix/libc-strtof-sign-hex-range
fix(libc): keep the sign of a failed strtof and match libc.prx strtof ERANGE
2026-10-24 11:56:01 +13:00
Dean 11b175a6b9 Merge pull request #9967 from JJenkx/windows/libc-setlocale-console
fix(libc): accept any setlocale category and only the C locale, as titles' libc.prx does
2026-10-24 10:38:40 +13:00
JJenkxandClaude Opus 5.5 8251179fc2 fix(libc): return the upper 32 bits of the state from drand48 and erand48 as titles' libc.prx does
drand48 and erand48 returned the whole 48-bit state over 2^48, as FreeBSD
does. The libc.prx bundled with eleven titles returns its upper 32 bits
over 2^32, so the low 16 bits never reach the result; both functions now
do the same. The generator and the other rand48 functions are unchanged.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-23 16:52:02 -04:00
JJenkxandClaude Opus 5.5 f41f455f87 fix(libc): return only the sign from strcasecmp and strncasecmp as titles' libc.prx does
strcasecmp and strncasecmp returned the folded unsigned-byte difference,
following FreeBSD 11.4's strcasecmp.c (#3966, #9642). The libc.prx bundled
with eleven titles returns -1, 0 or 1, the sign of that difference; both
functions now do the same, and the byte-pair tests expect it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-23 16:06:06 -04:00
orezraeyandClaude Opus 5.5 5e36c33142 Merge main into fix/libc-strftime-measured-ps5
The %Z check now expects the guest tzname, since main leaves tzname[1] as three spaces for a zone without daylight saving time.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-23 16:44:05 -03:00
orezraeyandClaude Opus 5.5 ecae349210 Merge main into fix/libc-gethostname-measured-ps5
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-23 16:41:23 -03:00
Adrià 8cc82c85bf Merge pull request #6469 from QRMOE/fix-low-guest-address-mappings
fix(memory): honor low guest mapping hints
2026-10-23 21:06:11 +02:00
Dean 278ec2d356 Merge pull request #8279 from mugurc/fix/libs-macos-build-main
fix(libs): build getifaddrs and two tests on macOS hosts
2026-10-24 07:31:38 +13:00
Dean 9e91d6bf61 Merge pull request #8546 from Retr0G28/fix/tzname-no-dst
fix(libc): leave tzname[1] as three spaces for a zone without daylight saving time
2026-10-24 07:31:04 +13:00
Dean 216e9a6f98 Merge pull request #9290 from thuanquang/fix/wcsncat-s-overlap-console-rule
fix(libc): reject a wcsncat_s copy only when its written and read ranges overlap
2026-10-24 07:29:30 +13:00
Dean 2e5a125982 Merge pull request #9777 from JJenkx/windows/libc-atanf-msun
fix(libc): compute atanf with FreeBSD msun's algorithm, as titles' libc.prx does
2026-10-24 07:27:14 +13:00
Dean f59f545b8a Merge pull request #8284 from mugurc/fix/tests-path-length-macos
fix(tests): skip the 1023-byte guest path check on macOS hosts
2026-10-24 07:25:45 +13:00
ntamas94andClaude Opus 5.5 8305168f39 fix(libc): answer strerror as the titles' libc.prx does
The libc.prx that PS4 titles ship (measured for CUSA04865 and CUSA12435 on a
PS4 Pro, firmware 10.71) names 0 "No error", 1 to 94 with the FreeBSD texts
(30 is "Read-only filesystem"), answers every other number, 95 and 96
included, with "error_code=0x%08x", and leaves errno alone. AnyPS5 returned
"No error: 0", named 95 and 96, answered "Unknown error: %d" and set errno
to 22. strerror_r and perror keep their wording; only the shared EROFS text
changes for them.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-23 19:19:40 +02:00
orezraeyandClaude Opus 5.5 a75706d40f docs(libc): record fopen and freopen of directories as measured on a PS5
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-23 12:33:25 -03:00
orezraeyandClaude Opus 5.5 5415895377 docs(libc): record reallocf as measured on a PS5
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-23 12:28:46 -03:00
orezraeyandClaude Opus 5.5 f90172bf48 fix(libc): keep the host diagnostic line and use the gettid system call
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-23 12:01:35 -03:00
orezraeyandClaude Opus 5.5 7009b00a86 fix(libc): print sceLibcInternalHeapErrorReportForGame's report as a PS5 does
A payload process on a PS5 (firmware 13.60) writes the mspace name at heap+0x3B0, its number at heap+0x3F4, the reason for error 1 and the pid and tid to standard output, then returns.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-23 12:00:22 -03:00