From 47099897acebedcf105a31ccaec7af4f53691be2 Mon Sep 17 00:00:00 2001 From: boykopovar Date: Thu, 20 Aug 2026 23:58:06 +0300 Subject: [PATCH] fix(libs): fix libscelibcinternal crt symbol conflict, stray macro in pthread_once, missing typedefs, unnamed params --- core/libs/CMakeLists.txt | 4 ++ core/libs/SceTypes.hpp | 5 +++ core/libs/prx/CMakeLists.txt | 40 -------------------- core/libs/prx/libSceLibcInternal/Export.cpp | 7 ++++ core/libs/prx/libSceSystemGesture/Export.cpp | 32 +++++++++------- core/libs/prx/libkernel/Export.cpp | 2 +- core/libs/prx/libkernel_sys/Export.cpp | 2 +- core/libs/prx/libkernel_web/Export.cpp | 2 +- 8 files changed, 37 insertions(+), 57 deletions(-) delete mode 100644 core/libs/prx/CMakeLists.txt diff --git a/core/libs/CMakeLists.txt b/core/libs/CMakeLists.txt index d62bd5c71..fbfba157c 100644 --- a/core/libs/CMakeLists.txt +++ b/core/libs/CMakeLists.txt @@ -26,6 +26,10 @@ foreach(LIB_DIR ${LIBS_DIRS}) set(RPX_FILE ${CMAKE_CURRENT_BINARY_DIR}/libs/${LIB_NAME}.prx) set(STAMP_FILE ${CMAKE_CURRENT_BINARY_DIR}/libs/${LIB_NAME}.patched) + if(${LIB_NAME} STREQUAL "libSceLibcInternal") + target_link_options(${LIB_NAME} PRIVATE -nostartfiles -Wl,--allow-multiple-definition) + endif() + add_custom_command( OUTPUT ${STAMP_FILE} COMMAND $ ${LIB_NAME} ${RPX_FILE} diff --git a/core/libs/SceTypes.hpp b/core/libs/SceTypes.hpp index 3b44d1cbb..0ad627700 100644 --- a/core/libs/SceTypes.hpp +++ b/core/libs/SceTypes.hpp @@ -163,6 +163,11 @@ using PthreadRwlockattr = PthreadRwlockattrPrivate*; using PthreadCond = PthreadCondPrivate*; using PthreadCondattr = PthreadCondattrPrivate*; using PthreadKey = int; +using pthread_entry_func_t = void* (*)(void*); +using pthread_key_destructor_func_t = void (*)(void*); +using thread_dtors_func_t = void (*)(); +using get_thread_atexit_count_func_t = int (*)(KernelModule); +using thread_atexit_report_func_t = void (*)(KernelModule); struct FileStat { std::uint32_t st_dev; diff --git a/core/libs/prx/CMakeLists.txt b/core/libs/prx/CMakeLists.txt deleted file mode 100644 index f31ca0f04..000000000 --- a/core/libs/prx/CMakeLists.txt +++ /dev/null @@ -1,40 +0,0 @@ -add_executable(nid_patcher - ${CMAKE_CURRENT_SOURCE_DIR}/nid/src/Sha1.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/nid/src/NidCompute.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/nid/src/main.cpp -) -target_include_directories(nid_patcher PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/nid/include) -target_compile_features(nid_patcher PRIVATE cxx_std_20) - -file(GLOB LIBS_DIRS LIST_DIRECTORIES true ${CMAKE_CURRENT_SOURCE_DIR}/lib*) - -set(PATCHED_STAMPS) - -foreach(LIB_DIR ${LIBS_DIRS}) - if(IS_DIRECTORY ${LIB_DIR}) - get_filename_component(LIB_NAME ${LIB_DIR} NAME) - - add_library(${LIB_NAME} SHARED EXCLUDE_FROM_ALL ${LIB_DIR}/Export.cpp) - set_target_properties(${LIB_NAME} PROPERTIES - PREFIX "" - SUFFIX .rpx - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/libs - LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/libs - ) - - set(RPX_FILE ${CMAKE_CURRENT_BINARY_DIR}/libs/${LIB_NAME}.prx) - set(STAMP_FILE ${CMAKE_CURRENT_BINARY_DIR}/libs/${LIB_NAME}.patched) - - add_custom_command( - OUTPUT ${STAMP_FILE} - COMMAND $ ${LIB_NAME} ${RPX_FILE} - COMMAND ${CMAKE_COMMAND} -E touch ${STAMP_FILE} - DEPENDS nid_patcher ${LIB_NAME} - COMMENT "Patching NIDs for ${LIB_NAME}" - ) - - list(APPEND PATCHED_STAMPS ${STAMP_FILE}) - endif() -endforeach() - -add_custom_target(libs DEPENDS ${PATCHED_STAMPS}) diff --git a/core/libs/prx/libSceLibcInternal/Export.cpp b/core/libs/prx/libSceLibcInternal/Export.cpp index b56bbc019..b30ac4898 100644 --- a/core/libs/prx/libSceLibcInternal/Export.cpp +++ b/core/libs/prx/libSceLibcInternal/Export.cpp @@ -2,6 +2,13 @@ #include #include "SceTypes.hpp" +extern "C" int __stdcall DllMainCRTStartup(void* hinstDLL, unsigned long fdwReason, void* lpReserved) { + (void)hinstDLL; + (void)fdwReason; + (void)lpReserved; + return 1; +} + extern "C" { [[noreturn]] void abort(uint64_t arg0, uint64_t arg1, uint64_t arg2, uint64_t arg3, uint64_t arg4, uint64_t arg5) { diff --git a/core/libs/prx/libSceSystemGesture/Export.cpp b/core/libs/prx/libSceSystemGesture/Export.cpp index 9c0a4ae48..85530dae0 100644 --- a/core/libs/prx/libSceSystemGesture/Export.cpp +++ b/core/libs/prx/libSceSystemGesture/Export.cpp @@ -15,11 +15,12 @@ int sceSystemGestureClose(int32_t gesture_handle) { return 0; } -int sceSystemGestureCreateTouchRecognizer(int32_t gesture_handle, SystemGestureTouchRecognizer* recognizer, int32_t, const SystemGestureRectangle*, const void*) { +int sceSystemGestureCreateTouchRecognizer(int32_t gesture_handle, SystemGestureTouchRecognizer* recognizer, int32_t type, const SystemGestureRectangle* rectangle, const void* param) { (void)gesture_handle; (void)recognizer; - (void)int32_t; - (void)SystemGestureRectangle; + (void)type; + (void)rectangle; + (void)param; return 0; } @@ -27,16 +28,16 @@ int sceSystemGestureFinalizePrimitiveTouchRecognizer(void) { return 0; } -int sceSystemGestureGetPrimitiveTouchEventByIndex(int32_t gesture_handle, uint32_t, SystemGesturePrimitiveTouchEvent* event) { +int sceSystemGestureGetPrimitiveTouchEventByIndex(int32_t gesture_handle, uint32_t index, SystemGesturePrimitiveTouchEvent* event) { (void)gesture_handle; - (void)uint32_t; + (void)index; (void)event; return 0; } -int sceSystemGestureGetPrimitiveTouchEventByPrimitiveID(int32_t gesture_handle, uint16_t, SystemGesturePrimitiveTouchEvent* event) { +int sceSystemGestureGetPrimitiveTouchEventByPrimitiveID(int32_t gesture_handle, uint16_t primitiveId, SystemGesturePrimitiveTouchEvent* event) { (void)gesture_handle; - (void)uint16_t; + (void)primitiveId; (void)event; return 0; } @@ -54,18 +55,18 @@ int sceSystemGestureGetPrimitiveTouchEventsCount(int32_t gesture_handle) { return 0; } -int sceSystemGestureGetTouchEventByEventID(int32_t gesture_handle, const SystemGestureTouchRecognizer* recognizer, uint32_t, SystemGestureTouchEvent* event) { +int sceSystemGestureGetTouchEventByEventID(int32_t gesture_handle, const SystemGestureTouchRecognizer* recognizer, uint32_t eventId, SystemGestureTouchEvent* event) { (void)gesture_handle; (void)recognizer; - (void)uint32_t; + (void)eventId; (void)event; return 0; } -int sceSystemGestureGetTouchEventByIndex(int32_t gesture_handle, const SystemGestureTouchRecognizer* recognizer, uint32_t, SystemGestureTouchEvent* event) { +int sceSystemGestureGetTouchEventByIndex(int32_t gesture_handle, const SystemGestureTouchRecognizer* recognizer, uint32_t index, SystemGestureTouchEvent* event) { (void)gesture_handle; (void)recognizer; - (void)uint32_t; + (void)index; (void)event; return 0; } @@ -92,12 +93,14 @@ int sceSystemGestureGetTouchRecognizerInformation(int32_t gesture_handle, const return 0; } -int sceSystemGestureInitializePrimitiveTouchRecognizer(const void*) { +int sceSystemGestureInitializePrimitiveTouchRecognizer(const void* param) { + (void)param; return 0; } -int32_t sceSystemGestureOpen(int32_t input_type, const void*) { +int32_t sceSystemGestureOpen(int32_t input_type, const void* param) { (void)input_type; + (void)param; return 0; } @@ -123,8 +126,9 @@ int sceSystemGestureUpdateAllTouchRecognizer(int32_t gesture_handle) { return 0; } -int sceSystemGestureUpdatePrimitiveTouchRecognizer(int32_t gesture_handle, const void*) { +int sceSystemGestureUpdatePrimitiveTouchRecognizer(int32_t gesture_handle, const void* param) { (void)gesture_handle; + (void)param; return 0; } diff --git a/core/libs/prx/libkernel/Export.cpp b/core/libs/prx/libkernel/Export.cpp index 718712b00..84cfd49f7 100644 --- a/core/libs/prx/libkernel/Export.cpp +++ b/core/libs/prx/libkernel/Export.cpp @@ -406,7 +406,7 @@ int pthread_mutexattr_settype(PthreadMutexattr* attr, int type) { return 0; } -int pthread_once(void* once_control, void(KYTY_SYSV_ABI* init_routine)()) { +int pthread_once(void* once_control, void (*init_routine)()) { (void)once_control; (void)init_routine; return 0; diff --git a/core/libs/prx/libkernel_sys/Export.cpp b/core/libs/prx/libkernel_sys/Export.cpp index 718712b00..84cfd49f7 100644 --- a/core/libs/prx/libkernel_sys/Export.cpp +++ b/core/libs/prx/libkernel_sys/Export.cpp @@ -406,7 +406,7 @@ int pthread_mutexattr_settype(PthreadMutexattr* attr, int type) { return 0; } -int pthread_once(void* once_control, void(KYTY_SYSV_ABI* init_routine)()) { +int pthread_once(void* once_control, void (*init_routine)()) { (void)once_control; (void)init_routine; return 0; diff --git a/core/libs/prx/libkernel_web/Export.cpp b/core/libs/prx/libkernel_web/Export.cpp index 718712b00..84cfd49f7 100644 --- a/core/libs/prx/libkernel_web/Export.cpp +++ b/core/libs/prx/libkernel_web/Export.cpp @@ -406,7 +406,7 @@ int pthread_mutexattr_settype(PthreadMutexattr* attr, int type) { return 0; } -int pthread_once(void* once_control, void(KYTY_SYSV_ABI* init_routine)()) { +int pthread_once(void* once_control, void (*init_routine)()) { (void)once_control; (void)init_routine; return 0;