Report unsupported syscall test toolchains explicitly

This commit is contained in:
Alexandros Mandravillis
2026-09-05 20:09:57 +03:00
parent f3229541a1
commit 49d5f6233c
2 changed files with 23 additions and 5 deletions
+11 -2
View File
@@ -16,6 +16,15 @@ The specification allows K0 to change; this direct handler preserves it too.
The host-only `cpu->pc = 0` continuation and C return value remain unchanged.
`exit_critical_section_test` compiles the real `traps.c` implementation with
GNU LTO and tests 16 combinations of incoming `v0` and SR. It checks the full
CPU state, allowing only the documented SR update and host continuation change.
LTO and tests 16 combinations of incoming `v0` and SR. It checks the full CPU
state, allowing only the documented SR update and host continuation change.
The test uses no BIOS, generated retail code, or game data.
The fixture links only the real trap unit and its test driver. It relies on
interprocedural optimization removing syscall paths that the driver never
calls, rather than providing fake scheduler or exception implementations.
This link contract is verified with Windows x64 MinGW GCC 16.1.0 and is enabled
only for that toolchain. Other configurations still register the test, but
CTest reports it as **Skipped** with the unsupported compiler and reason.
They do not provide register-preservation coverage until the fixture's link
contract is validated there or a portable real-dependency harness replaces it.
+12 -3
View File
@@ -183,9 +183,12 @@ if(BUILD_TESTING)
add_test(NAME mod_gpu_dma_aperture_test
COMMAND mod_gpu_dma_aperture_test)
# Compile the real syscall branch. GNU LTO discards the unrelated scheduler
# and exception paths, avoiding stubs which could hide register corruption.
if(CMAKE_C_COMPILER_ID STREQUAL "GNU" AND NOT APPLE)
# The real-handler fixture relies on LTO pruning its unused syscall paths.
# Enable only the toolchain on which that link contract is verified; keep
# the coverage gap visible in CTest for every other compiler/platform.
if(WIN32 AND MINGW AND CMAKE_SIZEOF_VOID_P EQUAL 8
AND CMAKE_C_COMPILER_ID STREQUAL "GNU"
AND CMAKE_C_COMPILER_VERSION VERSION_EQUAL "16.1.0")
add_executable(exit_critical_section_test
tests/test_exit_critical_section.c src/traps.c)
target_include_directories(exit_critical_section_test PRIVATE include)
@@ -193,6 +196,12 @@ if(BUILD_TESTING)
target_compile_options(exit_critical_section_test PRIVATE -O3 -flto -ffunction-sections)
target_link_options(exit_critical_section_test PRIVATE -flto -Wl,--gc-sections)
add_test(NAME exit_critical_section_test COMMAND exit_critical_section_test)
else()
add_test(NAME exit_critical_section_test
COMMAND "${CMAKE_COMMAND}" -E echo
"SKIP: real-handler LTO fixture is verified only on Windows x64 MinGW GCC 16.1.0; current compiler is ${CMAKE_C_COMPILER_ID} ${CMAKE_C_COMPILER_VERSION}")
set_tests_properties(exit_critical_section_test PROPERTIES
SKIP_REGULAR_EXPRESSION "^SKIP:")
endif()
add_executable(dma_gpu_linked_list_timing_test