Black Myth: Wukong (PPSA23226) exits at start-up with STATUS_DLL_NOT_FOUND after "Failed to load module: libs\libSceDbgThreadSanitizer.prx". The executable does not need the library: its bundled sce_module/libSceJobManager_nosubmission.prx lists it in DT_NEEDED and imports __tsan_acquire and __tsan_release from it, plus sceKernelIsThreadSanitizerEnabled from libkernel. The relinker converts every module in sce_module and loads it at start-up (only --module-dir directories are deferred), and GuestModuleBuilder adds each module's host dependencies to the executable's DT_NEEDED, which the Windows start-up stub loads. libSceDbgThreadSanitizer now exports __tsan_acquire and __tsan_release with the void(void* addr) signatures of LLVM compiler-rt's tsan_interface.h (llvm-project 87f0227cb601, LLVM 20.1.8). Both throw: AnyPS5 runs no race detector, and the module calls them only after sceKernelIsThreadSanitizerEnabled reports the sanitizer enabled. libkernel's sceKernelIsThreadSanitizerEnabled returns 0, as sceKernelIsAddressSanitizerEnabled does; its int(void) signature is assumed and recorded in the libkernel debt file. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| Aio/src | ||
| AppMetadata | ||
| Apr | ||
| DirectMemory | ||
| Equeue | ||
| EventFlag/src | ||
| File | ||
| Module | ||
| Pthread | ||
| Semaphore | ||
| Socket | ||
| SyncOnAddress/src | ||
| System | ||
| Time | ||
| CMakeLists.txt | ||
| KernelErrors.hpp | ||
| Unimplemented.cpp | ||