Files
AnyPS5/docs/dev/debt/libSceDbgThreadSanitizer.md
T
fdfawef324andClaude Opus 5.5 0f77f3e07f feat(libSceDbgThreadSanitizer): declare the TSan annotation calls and report the sanitizer disabled
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>
2026-10-13 02:12:05 -04:00

862 B

libSceDbgThreadSanitizer technical debt

Unknown function info

  • __tsan_acquire, __tsan_release (libSceDbgThreadSanitizer, NIDs XyX1104ACcU and IkoI44e0OXc) - declared as throwing stubs: AnyPS5 runs no race detector. The void (void* addr) signatures are those of LLVM compiler-rt's tsan_interface.h, whose names hash to the imported NIDs; that the console library has the same signatures is assumed. PPSA23226's bundled libSceJobManager_nosubmission.prx imports both and calls them only after sceKernelIsThreadSanitizerEnabled reports the sanitizer enabled, which it never does here