The Linux output writes every import symbol with st_size 0 and copies
a COPY relocation into the output unchanged, so ld.so copies
MIN(st_size of the definition, 0) = 0 bytes and the variable stays
zero. Windows and macOS already rejected the type in the relocation
builder. ValidationPolicy now rejects type 5 before any target code,
so every target reports the same error, and the COPY case of the
fixed-base rebasing, which validation makes unreachable, is gone.
ShaderCacheVersion.cmake resolved every source's real path twice and
every include's real path once per include line: 1102 REALPATH calls
per run, about 1.6 ms each on Windows. Reuse the source paths from the
first pass and resolve each include path once. The generated version
file is unchanged.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
An exported symbol of the executable must lie inside a PT_LOAD segment,
executable for STT_FUNC, together with its size and at least one byte.
A non-TLS export in SHN_ABS is exempt from the range check, and any
other special section index is rejected. An STT_TLS export needs a
regular section index and a PT_TLS header and must lie inside it.
GuestImageReader applies the PT_LOAD, PF_X and PT_TLS bounds to every
symbol of a guest module, and the macOS target applied the bounds and
the section rule to the executable's exports. Linux rejected only a
special section index at a fixed base, and Windows only an STT_FUNC
export with a nonzero size outside the code, in code analysis; every
other export was copied into the output unchecked. The check now runs
in the pipeline, so every target reports the same error for an export
it rejects, and the macOS export test expects that message.
encodeState and decodeState carry colorRop, which changes the recipe codec. Main's journal format is already 9, so the bump to 9 this branch made is a no-op; use 10.
NpTrophy2Constants.hpp uses std::size_t but includes only <cstdint>.
libstdc++ happens to declare it through that header; libc++ does not,
so guest_nptrophy2_tests fails to compile on macOS with "no type named
'size_t' in namespace 'std'".
Co-Authored-By: Claude Opus 5.5 <[email protected]>
On windows-latest, TEMP is on C:, which writes 256 MiB in 1.9 s against
0.2 s on D:, where RUNNER_TEMP and the workspace live. The ctest step now
points TEMP and TMP at runner.temp. On a probe runner the optional byte-cap
capture test drops from a 6.4 s median to 1.3 s with four copies running,
and the git-heavy tool tests from 26-35 s to 24-26 s.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
CB_COLOR_FMASK's low 16 bits carry the surface's pipe-bank XOR, as with the other 64 KiB-aligned
metadata bases, so the guarded FMASK range starts at the 64 KiB-aligned surface.
With one fragment, CMASK code 0 marks a tile whose only fragment holds the clear color, as radeonsi's
CMASK fast clear writes it. Such tiles are materialized like a one-sample target's; codes other than 0
and 0xc-0xf still throw.
The FMASK of a one-fragment color target drawn on the host is added to the guarded host-only ranges, so
texture, storage, DMA and CPU reads of it throw on every lookup, including cached ones, and the guard is
dropped when the memory is unmapped. The range is the smallest footprint one FMASK bit per sample needs,
rounded to 64 KiB.
A one-fragment target now requires static DB_EQAA anchors at the depth target's sample count, the
configuration measured. Its CMASK may only hold codes 0x0 and 0xc-0xf, and materializing a fast clear
of it throws. A target with more fragments than samples gets its own message.
A color target whose CB_COLOR_ATTRIB has more samples than fragments (4 samples, 1 fragment) was refused
as EQAA. With one fragment, a write is kept only where sample 0 is covered, which is the truncated
coverage reduction one-sample targets beside a multisampled depth target already use. Decode such a
target as one sample, keep its coverage sample count, and take that path. Targets with more than one
but fewer fragments than samples still throw.
The host does not write the FMASK of these targets, so a guest FMASK read of one that was drawn on the
host throws.
EnterTitleDirectory named the run's directory after the current
steady_clock value. guest_rtc and guest_rtc_ps5_title run the same test
binary, and when ctest starts both at once they can read the same value
and share one directory; guest_rtc then writes its PS4 title there and
the PS5 run reads it and aborts. Name the directory with
std::random_device instead, as the other tests that make temporary
directories do.
Co-Authored-By: Claude Opus 5.5 <[email protected]>