From 4a62b6220bbf387ac71cd4cde8e6a77f551425ea Mon Sep 17 00:00:00 2001 From: tototomate123 Date: Sun, 11 Oct 2026 11:50:44 +0200 Subject: [PATCH] fix(build): export the Windows dynamic loader test executable --- core/libs/prx/libkernel/CMakeLists.txt | 3 +-- core/libs/tests/GuestDynamicLoader.cpp | 13 +++++++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/core/libs/prx/libkernel/CMakeLists.txt b/core/libs/prx/libkernel/CMakeLists.txt index eec0b0fc8..726f7ca1e 100644 --- a/core/libs/prx/libkernel/CMakeLists.txt +++ b/core/libs/prx/libkernel/CMakeLists.txt @@ -163,11 +163,10 @@ if(BUILD_TESTING) target_link_libraries(guest_dynamic_loader_tests PRIVATE libkernel libc) configure_windows_unwind(guest_dynamic_loader_tests) add_dependencies(guest_dynamic_loader_tests guest_module_fixture) + set_target_properties(guest_dynamic_loader_tests PROPERTIES ENABLE_EXPORTS ON) if(WIN32) file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/GuestDynamicLoader.def" CONTENT "EXPORTS\nGuestDefaultScopeOnly\n") target_sources(guest_dynamic_loader_tests PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/GuestDynamicLoader.def") - else() - set_target_properties(guest_dynamic_loader_tests PROPERTIES ENABLE_EXPORTS ON) endif() add_test(NAME guest_dynamic_loader COMMAND guest_dynamic_loader_tests $) set_tests_properties(guest_dynamic_loader PROPERTIES diff --git a/core/libs/tests/GuestDynamicLoader.cpp b/core/libs/tests/GuestDynamicLoader.cpp index dc6d66465..1eb0a5fb4 100644 --- a/core/libs/tests/GuestDynamicLoader.cpp +++ b/core/libs/tests/GuestDynamicLoader.cpp @@ -1,12 +1,14 @@ #include "prx/libc/include/general/VabiMacros.hpp" #include #include +#include #include #include #ifndef _WIN32 #include #endif #include +#include #include extern "C" { int APS5_VABI sceKernelDlsym(std::int32_t, const char*, void**); @@ -17,7 +19,11 @@ char* APS5_VABI dlerror_nid_postfix(); int APS5_VABI _sceKernelRtldThreadAtexitIncrement_nid_postfix(const void*); int APS5_VABI _sceKernelRtldThreadAtexitDecrement_nid_postfix(const void*); } -static void Require(bool value) { if (!value) std::abort(); } +static void Require(bool value, const std::source_location& location = std::source_location::current()) { + if (value) return; + std::fprintf(stderr, "guest_dynamic_loader: failed at %s:%u\n", location.file_name(), location.line()); + std::abort(); +} extern "C" int APS5_VABI GuestDefaultScopeOnly(int a, int b) { return a * b; } template static bool ThrowsRuntimeError(TFunction function) { @@ -37,7 +43,9 @@ int main(int argc, char** argv) { Require(dlopen_nid_postfix("anyps5-missing-module-for-test.prx", 2) == nullptr); Require(dlerror_nid_postfix() != nullptr); void* mainSymbol = nullptr; - Require(sceKernelDlsym(0, "GuestDefaultScopeOnly", &mainSymbol) == 0 && mainSymbol != nullptr); + const int mainResult = sceKernelDlsym(0, "GuestDefaultScopeOnly", &mainSymbol); + std::fprintf(stderr, "sceKernelDlsym(0, GuestDefaultScopeOnly): result=0x%08x, symbol=%p\n", static_cast(mainResult), mainSymbol); + Require(mainResult == 0 && mainSymbol != nullptr); using MainFunction = int (APS5_VABI *)(int, int); Require(reinterpret_cast(mainSymbol)(6, 7) == 42); Require(sceKernelDlsym(0, "anyps5_missing_main_symbol", &mainSymbol) == static_cast(0x80020003u)); @@ -117,4 +125,5 @@ int main(int argc, char** argv) { Require(dlsym_nid_postfix(nullptr, "malloc") == nullptr); Require(::dlclose(host) == 0); #endif + std::puts("guest_dynamic_loader: all checks passed"); }