Skip to content

sync(upstream): integrate Batch 42 relinker, AGC driver, libc/libkernel and PRX exports - #583

Open
RINNECODER wants to merge 181 commits into
mainfrom
team/upstream42
Open

RINNECODER wants to merge 181 commits into
mainfrom
team/upstream42

Conversation

@RINNECODER

@RINNECODER RINNECODER commented Oct 19, 2026 •

Copy link
Copy Markdown
Owner

Integrates upstream Sync Batch 42 (five slices team/u42-0..4, each cherry-picked with -x onto origin/main, merged --no-ff).

150 upstream commits applied (153 picked, 3 reverted after build), plus fork ports e094fb91e (PositionExportLayout fix on the Metal copies) and 954c4cb4f (follow-up to 538b63e).

Applied, by area (upstream PRs)

Reverted during integration

Integration fixes: union of the AGC test lists in libSceAgcDriver/CMakeLists.txt; one ParseInteger copy in SonyCrt.hpp (main already had it); one __fpclassifyl (upstream's raw-bits version in MathExact.cpp); one GuestEbadf; the sceRtcInit/sceRtcEnd silent-stub debt entry.

Skipped (summary)

  • Relinker: 5 (2 already in the fork; 3 need the Linux fixed-base patcher / upstream Conversion pipeline).
  • AGC driver: ~93, mostly missing infrastructure clusters: table snapshot reuse (b02c442), read guards, MSAA sample/pixel-iteration infra, depth range remap and serializer format 33, Vulkan depth plane owners, host-import / AsyncLog / PerformanceTrace test infra, queued-draw held-read ordering cluster (c9af5d9..aca898e); 6 already in the fork. Worth a manual port: f6c8e84 (indirect-dispatch arg read, GTA V fix).

Gates

Gate Result
Conventions check_conventions.py --base origin/main pass, 0 errors (21 warnings, pre-existing debt-length)
Rosetta build exit 0
Rosetta CTest 24/25; rosetta_image_cache fails identically on origin/main (2 overlap checks), sources untouched here
guest-replay build exit 0
guest-replay CTest 63/63
Replay agc-map --expect-hash 51a268f2e73efb9c match, bit-exact every repeat
Replay agc-live-map vs replay-ref-v3.png 79 / 81 px (timed repeats), limit 200
Replay agc-menu vs replay-ref-v3.png 72 / 87 px (timed repeats), limit 200
Gameplay gate (Civ VII, rosetta) all PASS: map at 196.9 s, 171.5 s gameplay, 0 black frames, clean exit; last frame shows the live 3D map with Turn 1 HUD and minimap
Map fps (median of last 60 frames_presented deltas) 5.97 fps vs main's 6.9 (not re-measured on main in the same session)

Risky resolutions to review

  • Relinker: RelinkerPipeline.cpp scanSegments copy with NOP-filled jump tables (f25f226); SyscallScanner.cpp now throws on size over buffer (80a987f); main.cpp OutputIdentityDirectory no longer Windows-only (502b557); GuestImageReader.cpp keeps the fork's RELATIVE-with-symbol block (5f56417).
  • AGC: GuestMemory.cpp stampWatchedPart passes complete=false for partly watched stores (c886c28); ShaderRegistry.cpp ResolveShaderAbi deferral ported onto the fork's transaction version; TessellationLowering.cpp dynamic-address branch only (9f429e6); BufferPool.cpp source fix only (5001f87).

Review fixes (2026-10-23)

Finding Verdict Commit
Review 1: ShaderRegistry deferred pushes use 5-field PreparedGraphicsStage fixed c19ae35
Review 2: section-symbol RELATIVE relocations rejected fixed (test proven to fail before) 448fb30
Review 3: WAIT_REG_MEM address masked at only some readers fixed, new Pm4::WaitAddress b0709e1
Review 4: Metal DecodeDrawDispatch missed NormalizeUnusedViewportDepth fixed ef0985b
Review 5: FmaskImageReads test without its fix (caae92c does not apply) reverted 57466a0 16b9c6a
Review 6: duplicate struct LiveCounter in tests/Graphics.cpp (also on main) fixed 76e1813
Review 7: d971ed0 untested (no harness) no change -
Relinker tests import missing guest_import_fixtures added upstream helper dc2d641
Port: upstream f6c8e84 indirect dispatch waits on address-based writers hand-ported 3bf808b
Codex P1: duplicate game-live-streaming target (+2 duplicates on main) fixed f0c4a27
Codex P1: Backtrace.cpp dropped from libc fixed 25405c3
Codex P2: graphics tests lost configure_windows_unwind fixed 51a5d97
Codex P1: application_heap_scripting in properties but not registered registered the test 25119fb
Codex P1: shader cache fake compiler rejects CMake linker probes took upstream probe handling 85b180d

🤖 Generated with Claude Code

simonbronk and others added 30 commits October 19, 2026 09:42
…sing the module

On x86-64 macOS, including under Rosetta, the host owns GS (it holds the
pthread TSD base, which the macOS TLS stubs read), so a guest instruction
that reads or writes through GS cannot be translated, and the TLS scan
refused the whole module. Prospero Win's (PPSA99995) Wine ntdll has six.
Overwrite each in place with ud2 and NOP padding of its own length, as the
Windows writer does in boykopovar#6102, and refuse one that is also an AMD-only
trampoline site.

(cherry picked from commit 55c6254)
__std_find_trivial(_unsized), __std_count_trivial, __std_min/max/minmax_element,
__std_reverse_trivially_swappable, __std_reverse_copy_trivially_copyable and
__std_swap_ranges_trivially_swappable_noalias for 1-, 2-, 4- and 8-byte
elements, matching the libc.prx bundled with PPSA08427 including the rescan of
the first aligned block in the unsized find.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q8tinbP1MUpUaDsbNWnGnu
(cherry picked from commit 6103a3e)
copysignl, fdiml, fmodl, remainderl, remquol, logbl, ilogbl, rintl, roundl,
lroundl, lrintl, llrintl, sqrtl, modfl, nanl, scalblnl, fmal, rint(f),
lrint(f), llrint(f), drem(f), scalbln(f), scalb(f), finite(f),
__fpclassifyl, __isinfl, __isnanl, __isnormall, _LDtest, _Dclass, _FDclass,
_LDclass and _LDsign, matching the libc.prx bundled with PPSA08427 bit for
bit, including NaN propagation, errno and FreeBSD fmal special cases.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q8tinbP1MUpUaDsbNWnGnu
(cherry picked from commit 4f608a8)
Morrowind imports fchown and stops at it once rtprio_thread and the pthread concurrency controls are in. Accept the guest's own owner and group (0) or unchanged (-1), fail an invalid descriptor with EBADF, and throw for another owner or group, since ownership is not modelled.

(cherry picked from commit 443df05)
MarkWritten and StoreOwnBytes return 0 for a range that is not wholly
watched, and they stamped none of its blocks. The watched blocks such a
store wrote kept their old stamps, so UnchangedSince and StoredOver over
them still read as unchanged after a GPU write that crossed into an
unwatched import. A vouched shader table column or a cached range then
kept bytes that had been replaced.

Both now stamp each block whose part of the store starts or ends in
watched memory, as the wholly watched path stamps every block. They still
return 0 and note the store as unstamped. This costs one or two coverage
lookups per block, and only on this path.

(cherry picked from commit c886c28)
… path

The runtime layout printed ../app0/sce_module/... under app0/ when the
output path contained . or .. components (./out.elf), because the module
paths are normal and the output directory was not.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit f40acdb)
A driver store and an own store across a watched block and an unwatched
one must stamp the watched block and no other. On Linux, a store across
the halves of a split block must stamp it, and a store into its unwatched
half alone must not.

(cherry picked from commit a0dc9d3)
…AY face

A DIM 2D image_load through a cube T# already reads texel (x, y) of the
T#'s BASE_ARRAY face (boykopovar#4139, measured on RDNA1). A DIM 2D image_store to
a cube T# had no matching runtime mode and threw "image descriptor is
incompatible with the static runtime image interface". Crimson Desert
writes a 16_16_16_16_FLOAT cube this way from a compute shader.

A mip-less image_store to an image the program only stores to now takes
the same face mode, writing texel (x, y) of the BASE_ARRAY face, the
face the measured load reads. Stores were not measured on hardware; the
debt entry says so. Formats that store through a conversion (SINT) keep
throwing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit dbf176f)
Co-authored-by: SuperCatElvis <39642318+SuperCatElvis@users.noreply.github.com>
(cherry picked from commit f25f226)
… output

macos_gs_traps converts the forms Wine's ntdll in Prospero Win (PPSA99995) uses, a store, an ALU read and a register-address form shorter than a jump, and checks that each becomes ud2 and NOP padding of its own length before the next instruction, with none of the original bytes left.

(cherry picked from commit 8da2483)
The macOS writer sets up guest TLS only for a module with a non-empty PT_TLS. A GS access in a module without one must still be trapped.

(cherry picked from commit 6f89fd7)
A flush stores a storage image's pending results to guest memory and
keeps the 64 KiB blocks the write tracker shows written since the image
was last in sync. An address-based dispatch marks the pages it stored to
only when its batch's completion runs. A flush between the GPU's store
and that completion found the blocks unwritten and stored the image's
older texels over the newer bytes; a CPU-resolved indirect dispatch then
read those texels as its workgroup counts.

FlushPending now looks for an unfinished batch that writes the range or
holds it in an address-based lease (Recorder::PendingWriterSerial).
Batches that already finished are completed first. If the writer is
still unfinished, the flush finishes the in-flight batches up to it, or
syncs when the writer is in the open batch, so its marks land and its
blocks are kept. Inside a completion action it does not wait. If the
wait throws, the images it took stay registered as pending.

The test stores an image, then a global dword into the image's memory,
and flushes the image twice: once with the writer's batch finished on
the GPU but its completion not run, and once with the writer still in
the open batch. Each time the dword is kept and a texel in another block
is stored. Without write watching the in-flight case is skipped; the
open-batch case still runs, as the write-back then compares guest
memory, which the GPU has not written yet at the flush.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 9fffcea)
…acOS

sceNetCtlGetInfo found the host's default route in /proc/net/route, which
macOS does not have, so every IPv4 query threw "the host routing table is
unavailable" there. On macOS it now reads the IPv4 routes that have a
gateway with sysctl(NET_RT_FLAGS, RTF_GATEWAY) and keeps those to
0.0.0.0 that are up, neither rejecting nor host routes, on an interface
that still exists. An interface-scoped default route ranks after the
unscoped one, the route macOS sends traffic by. The parsing is exported
as NetCtlDefaultRoutes_nid_no_patch so it can be tested on a routing
table built by hand.

(cherry picked from commit 8af0802)
… route

A routing table built by hand with an unscoped default route, a host
route, a host route to 0.0.0.0, a rejecting default route, an
interface-scoped default route, one that is down, one on an interface
that does not exist and a truncated last message must give the unscoped
route first and the scoped one after it, and must count every match
while writing only as many as fit.

(cherry picked from commit 6d4cde8)
…s first use

sceAgcDriverResolveShaderAbi and sceAgcDriverResolveGraphicsStagesAbi
prepare every stage when the title creates its pipeline, and threw when
the recompiler could not: Resident Evil Village stops there on a pixel
shader whose T# pointer is a phi of user data and a ballot, and a
compute shader that calls user-data pointers stopped the same way
although its dispatch links the callees.

ResolveShaderAbi and PrepareGraphicsStages now catch the failure inside
their own preparation transaction, so the ShaderPreparationScope that
libSceAgc opens around the call still commits. The shader is logged
once, marked deferred like a shader deferred at registration, and the
ABI key is recorded, so a repeated call prepares nothing. The draw or
dispatch that uses the stage prepares it as before and fails there if
it cannot. ResolvePreparedGraphics skips the rectangles of a deferred
stage that has no artifact yet, which also lets a stage deferred at
registration through sceAgcDriverResolveGraphicsAbi.

Driver failures, ProcessShutdown and a failure stored by the shader's
registration preparation still propagate.

(cherry picked from commit 8c55d15)
Every OpGroupNonUniformBallot now goes through SpirvModule::AddSubgroupBallot.
A repeated ballot of the same predicate in the same block becomes an
OpCopyObject of the first ballot. Within one block the active invocations do
not change, so the result is identical. The cache is cleared at every label,
function boundary, function call and demote, and helper functions keep their
own cache.

When SPIRV-Tools is enabled, block merging and specialization can still put
two ballots of one predicate into the same block after emission, so
ValidateAndOptimizeSpirv collapses repeated block ballots the same way on
every module it returns, optimized or not.

NVIDIA 580's SPIR-V compiler segfaulted (libnvidia-gpucomp+0xe3facc) on GTA V
compute shaders that ballot one predicate many times in a block. One such
shader had 163 repeated ballots across three blocks. With them collapsed, both
crashing captures (compute-fe506552cec99bfc and compute-c02e5e3f35010fa5)
compile.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit d83f541)
RINNECODER and others added 10 commits October 19, 2026 10:16
# Conflicts:
#	core/libs/prx/libSceAgcDriver/CMakeLists.txt
Drop the second ParseInteger copy (main already carries it) and list the
sceRtcInit/sceRtcEnd silent stubs as upstream's debt doc does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Reverts 3fc8b2b: all 149 stubs it appends already exist in the fork's
Export.cpp (redefinition errors).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Upstream moved it to MathExact.cpp (raw x87 bits, pseudo-denormal aware); drop the older Math.cpp copy.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Two Batch 42 picks each added it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Reverts 264467d: all 20 stubs it appends already exist in the fork's
Export.cpp (redefinition errors).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Reverts 96e373f: it calls WindowsLoadImage::GetImageBase, which the fork's
load image does not have. Pure refactor, no behaviour lost.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@RINNECODER

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-23T08:28:03.401487Z 51a5d97 Manual request
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@coderabbitai

coderabbitai Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 58c07370-3bbd-4c41-8684-972f7d3201e1
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: fd3402589c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread core/libs/CMakeLists.txt
"PATH=path_list_prepend:$<TARGET_FILE_DIR:libSceGameLiveStreaming>")
endif()

add_test_executable(guest_game_live_streaming_tests tests/GuestGameLiveStreaming.cpp)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Remove the duplicate game-live-streaming target

When BUILD_TESTING=ON, this repeats the identical add_test_executable(guest_game_live_streaming_tests ...) block already present at lines 298–306. CMake requires target names to be unique, so configuration stops at this second declaration before any tests can build; remove the newly duplicated block.

Useful? React with 👍 / 👎.

@@ -79,7 +82,6 @@ target_sources(libc PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src/RealPath.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/CxxAbiSupport.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/Threads.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/Backtrace.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/exception/Exports.cpp

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Restore Backtrace.cpp to the libc target

Removing src/Backtrace.cpp from target_sources(libc ...) drops the only definitions of sceLibcBacktraceGetBufferSize_nid_postfix and sceLibcBacktraceSelf_nid_postfix. Guest modules importing those supported functions can no longer resolve them, and the existing Unix guest_backtrace_tests executable directly references both symbols and therefore cannot link.

Useful? React with 👍 / 👎.


set_target_properties(agc_driver_graphics_tests PROPERTIES CXX_EXTENSIONS OFF)
configure_windows_unwind(agc_driver_graphics_tests)
if(BUILD_TESTING)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Restore Windows unwind setup for the graphics tests

On MinGW builds, this replacement also removes configure_windows_unwind(agc_driver_graphics_tests), even though the target contains many throw/catch paths. That hook renames the executable's .eh_frame section to .ehfram, which the custom libc unwinder scans on Windows; without it, exceptions crossing graphics-test frames cannot be unwound reliably and the newly registered tests may terminate instead of reaching their handlers.

Useful? React with 👍 / 👎.

RINNECODER and others added 11 commits October 23, 2026 03:10
…ushes

The deferred-registration pushes used upstream's five-field initializer;
the fork's PreparedGraphicsStage has only snapshot and entry.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… check

Upstream's section-relative fixture uses a section symbol (Info 3, value 0)
with a non-zero addend, which the fork's symbol==addend check rejected.
Drop the now-dead info rewrite for symbol-less RELATIVE entries.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Pm4::Validate now accepts misaligned wait addresses, but the Metal pending
label check, DispatchAhead and the draw-pipeline keep check still used the
raw address. Add Pm4::WaitAddress and use it at all WAIT_REG_MEM readers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
DecodeDrawDispatch is the fork-only decode Metal uses; upstream's
NormalizeUnusedViewportDepth was only added to the Vulkan DrawDecode path.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Reverts 57466a0 (upstream e8544ef). Its fix, upstream caae92c, does not
apply to the fork (ShaderMemory.cpp, ResourceMaterializer.cpp,
SpirvImageEmitter.cpp, SpirvDescriptors.cpp conflict), so the globbed test
would fail. Re-add it together with a port of caae92c.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
tests/Graphics.cpp defined struct LiveCounter twice (also on main), so the
graphics test target could not compile.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
test_guest_relative_section_symbols and test_guest_none_relocations import
it, but the fork never took the module (upstream 723d02c), so both
failed with ModuleNotFoundError.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…atch arguments

Hand port of upstream f6c8e84. CPU reads of DISPATCH_INDIRECT arguments
now finish leased batches (Graphics::FinishLeaseWork) so an address-based
producer has run; a read-ahead whose counts differ from the re-read is
dropped. Conflicts kept the fork's re-decode after adopting a parked packet
and its NVIDIA split message (now with the CPU-read note).
The new test drops upstream's code-address PrepareDispatch argument, which
the fork's VulkanDevice does not take.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
guest_game_live_streaming_tests was added twice by this sync; the
agc_constant_select and guest_binary_word duplicates are already on main.
Any configure that reaches these directories with BUILD_TESTING failed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Dinkumware atomics pick (5e45c8d) dropped it, removing the only
definitions of sceLibcBacktraceSelf and sceLibcBacktraceGetBufferSize.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The fence-failure test pick replaced the target's tail and dropped
CXX_EXTENSIONS OFF and configure_windows_unwind, which MinGW needs for
the libc unwinder to see the test's throw/catch frames.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@RINNECODER

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 51a5d97eae

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@@ -754,7 +773,7 @@ if(BUILD_TESTING)
add_test(NAME application_heap_lazy COMMAND application_heap_tests lazy)
endif()
if(WIN32)
set_tests_properties(application_heap_replacement application_heap_invalid_metadata application_heap_default application_heap_exit_order application_heap_lazy
set_tests_properties(application_heap_replacement application_heap_invalid_metadata application_heap_default application_heap_exit_order application_heap_scripting application_heap_lazy

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Remove the nonexistent heap test from the property list

On every Windows configuration with BUILD_TESTING=ON, this includes application_heap_scripting, but no test with that name is registered anywhere in the repository; the surrounding block only creates the replacement, invalid-metadata, default, exit-order, and lazy tests. As confirmed by cmake --help-command set_tests_properties (“If the test is not found, CMake will report an error”), this makes Windows configuration fail before anything can build.

Useful? React with 👍 / 👎.

if os.name == 'nt':
compiler.write_text('@echo off\nif "%~1"=="-print-sysroot" if "%~2"=="" exit /b 0\nif "%~1"=="--version" if "%~2"=="" exit /b 0\n>>"%~dp0compiler-invoked" echo %*\nexit /b 99\n', encoding='utf-8')
else:
compiler.write_text('#!/bin/sh\nif [ "$#" -eq 1 ]; then case "$1" in -print-sysroot|--version) exit 0;; esac; fi\nprintf "%s\\n" "$*" >> "$(dirname "$0")/compiler-invoked"\nexit 99\n', encoding='utf-8')

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Permit CMake's linker probe in the fake compiler

With the repository's CMake 3.28.3, running this newly registered test invokes the fake compiler as -Wl,--help; the script records that as an unexpected invocation, so every one of the eight test methods fails before exercising the shader-cache assertions. This test runs in the full Linux ctest job, so the fake compiler must also handle CMake's linker probe (or the fixture must avoid treating that probe as a failure).

Useful? React with 👍 / 👎.

RINNECODER and others added 2 commits October 23, 2026 03:28
8dd0b5d added the name to the Windows set_tests_properties list, but the
add_test from upstream was never picked, so Windows configure failed on
the unknown test. Register it as upstream does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…probes

CMake 3.28 calls the compiler with -Wl,--help, -Wl,--version and -v --help;
the fake compiler logged them as unexpected and every case failed. Take
upstream's probe handling.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.