Draw a glyph from sceFontGenerateCharGlyph through the sceFontRenderCharGlyphImage rasterizer at the glyph's own scale, with the renderer argument checked as sceFontBindRenderer checks it and the style frame argument, else the surface's frame, applied as surface frames are. The horizontal and vertical forms place the image like their character forms. The three functions build on RenderCodeWithStyle and ApplyStyleFrame from the previous commit and move out of Unimplemented.cpp.
RenderCharGlyphImageCore keeps its handle and bound-renderer checks and
hands the rest of the render, from the glyph lookup to the output fill,
to RenderCodeWithStyle, which takes the style as an argument. The
surface style-frame rule moves into ApplyStyleFrame, with
SurfaceStyleFrame finding a surface's valid frame, and
ResolveSurfaceStyleState now calls the two. The char render calls pass
the same style as before and behave as before.
The check that refuses leaves without pushes that push or pop also refused
`push rbp; mov rbp, rsp` leaves without other pushes, whose `pop rbp` it
counted, since rbp is not in their list of pushes. A unit test and an
execution test now cover such a leaf with a 4-byte prologue and a 2-byte
exit. The debt entry also notes that the check refuses shrink-wrapped leaves
whose later pushes and pops balance.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
libSceImeBackend only re-exported libSceIme, so a title that imports
the backend's own functions did not load. Declare the 22 that such a
title imports, without parameters: their signatures and behaviour are
not established, so each call throws through NotImplemented_nid_no_patch.
Co-Authored-By: Claude <[email protected]>
ApplicationProcessParameters used the dl_iterate_phdr search only on Linux,
so any guest using the application heap threw "unsupported executable
format" on macOS, where GuestImages.cpp already provides dl_iterate_phdr.
ProcessParametersFixture::Install also had no macOS branch and returned
false; it now fills a __APS5DATA,__meta section with version-2 relinker
metadata.
Co-authored-by: Himansh Raj <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
parse_db silently skipped a row that had no symbol name and accepted any
text as a NID, so a malformed database produced Unknown stubs and
technical-debt lines for NIDs that did have a name, with no hint that the
database was at fault. Reject such rows with a path:line error, the way
parse_nids already rejects malformed NIDs.
Wait for the exact completed confirmation before inspecting submitted draw tokens. Preserve the existing assertions and inspect the completed trace for failures.
Fixes#10835
AI-assisted: yes (Codex)
The font-set record path still throws in production, but the test no
longer asserts it: tests cover implemented behaviour only. The null-output
check on a font-set handle stays. The outline profile debt entry states
the gap without naming a source.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
log1p returned the host's log1p, whose last bit differs from the titles'
copy on Windows on 24,477,433 of 320 million random arguments. The titles'
copy is FreeBSD msun's s_log1p.c, and it sets EDOM at msun's NaN return,
for arguments below -1, -inf and negative NaNs, but not for log1p(-1).
log1p now computes that algorithm and sets EDOM there.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Culprit: none by code; run 40167585870 (main 2400596055) failed guest_job_manager_worker_spin
(check at line 688: noPending 27 ms vs parked 10.6 ms + interval/3 8.5 ms). The sample
only adds CPU when the runner is noisy, so the minimum of 3 is the right estimator.
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
--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]>
main's sceKernelMunmap takes a uint64_t address; the test passed a pointer. The publish-on-CPU flag moves to HostThreadLocal so it follows the host thread-local rule.
The write threw inside GetNativeStream, which the wide writers catch and
report as EINVAL. fputc, fputs and vfwprintf fail a closed stream with
errno 9; putwc and putwchar go through fputwc.
ungetwc on a stream that a failed freopen closed reached GetHandle() and threw
out of the export. ungetc and the other narrow stream calls return failure
with errno 9.
- libSceOpusCeltEnc and libSceOpusSilkEnc forward Initialize, Terminate,
GetSize, Create, CreateEx, Encode, EncodeFloat and Destroy to bundled
libopus with OPUS_APPLICATION_RESTRICTED_CELT and OPUS_APPLICATION_RESTRICTED_SILK
- state pointers are host registry keys; nothing is written into guest memory,
Create without CreateEx binds an internal context id, and a live CreateEx
encoder makes Terminate throw
- validation mirrors the recovered libSceOpusCeltDec order: channels before
sample rate before application, offsets 0/1/2/3/6/7/8/9/13
- Ctl and the priority, timeout, batch and cancel exports still throw and are
documented in libSceOpusCeltEnc.md and libSceOpusSilkEnc.md
- new guest_opus_celt_enc and guest_opus_silk_enc tests require bit-exact
packets against a raw libopus encoder with the same restricted application,
celt-mode or silk-only TOC values, an alternating sine decoded through
opus_decode, and the negative error paths
On macOS, FIONREAD on a datagram socket counts more than the queued
payload, so after one 5-byte datagram sceNetIoctl reported 37.
libkernel's sockets already ask a macOS datagram socket for SO_NREAD,
the size of the next datagram, instead; do the same for sceNetSocket
sockets that are not streams.
Co-authored-by: Himansh Raj <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>