Hold() queues a pipeline job that spins on a Gate until it is released,
and captured the Gate by reference. Each Gate lives in a block of
main(), and its destructor only sets the flag. When the block ends
before the job's next poll, the job reads the Gate's stack slot after
the scope is gone. An ANYPS5_ENABLE_ASAN build reports a
stack-use-after-scope in the job (PipelinedDma.cpp:52, the Gate of the
block at line 111), and the test fails.
The Gate now owns its flag through a shared_ptr that the job captures by
value, as the pipelined indirect draw test's blocker does since #9647.
The job can then poll it after the block ends, and releasing the Gate
works as before.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
imellag's earlier #11047 (guest TLS) and #11048 (guest start, main-thread
SDL) carry the same libkernel imports this PR added in libc, and #10876
carries the same ApplicationProcessParameters change. Drop those parts here
and keep only what no open PR has: the 0x400-byte reserve after the Mach-O
load commands, so codesign's LC_CODE_SIGNATURE no longer overwrites the
entry stub.
sceCesRefersUcsProfileCp858 threw. It now returns a single-byte profile
accepted by sceCesSbcToUtf8, sceCesUtf8ToSbc and the MBCS context
conversions. Code page 858 is code page 850 with byte 0xD5 mapped to the
euro sign (U+20AC) instead of U+0131; that is the whole high half of
ICU's ibm-858_P100-1997.ucm. Bytes 0x00-0x7F stay unchanged, as in the
other single-byte profiles.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01FzhWRMauD3ouc8kSxT2NnT
The debt entry for 11_11_10 float color targets covers rendering but not the
resolve. A CB resolve of a multisampled 11_11_10 float source stays refused;
the new entry says that its averaging and rounding are not measured, that no
known source describes them, and that PPSA12361 reaches it (issue #11362).
AI-assisted: yes
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
The three guard exports had no test. The new one checks the Itanium C++
ABI guard protocol: a fresh guard is acquired once and reads initialized
after the release, an aborted acquisition leaves it uninitialized and
lets the next acquire succeed, two different guards nest on one thread,
and a second thread blocks until the holder releases (then sees the
object initialized) or takes over after an abort.
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Console libSceLibcInternal exports Y9C9GeKyZ3A as a 136-byte STT_OBJECT;
titles that resolve the wide num_get vtable as data need a zeroed 17-slot
object matching the narrow num_get layout on console.
A create over a marked state now retires the encoder its instance id
names before any state write or allocation, so a replacement lost to a
host allocation failure or the libopus OPUS_ALLOC_FAIL branch cannot
strand an entry the state no longer names: Destroy and Terminate stay
consistent on every failure path. The debt notes record the
replacement rule as our choice with the console failed-replace
behaviour unmeasured and why the tests cannot force the failure
paths.
The review found no console or reference source for the averaging and the
rounding of this resolve, and asked for the refusal and its regression
coverage to stay. The resolve pass, its execution test and the changed decode
case are taken out again; State.cpp, MultisampleTarget.cpp, the CMake file and
tests/Graphics.cpp are back to the state of the base, so the refusal in
State.cpp and the expectFailure case in tests/Graphics.cpp are unchanged.
AI-assisted: yes
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>