mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-10 08:51:28 +12:00
Small fix
This commit is contained in:
parent
89b944c397
commit
0a0ccb54bf
1 changed files with 47 additions and 8 deletions
|
@ -15,6 +15,18 @@ Module *cellSync = nullptr;
|
||||||
#include "prx_libsre.h"
|
#include "prx_libsre.h"
|
||||||
u32 libsre;
|
u32 libsre;
|
||||||
u32 libsre_rtoc;
|
u32 libsre_rtoc;
|
||||||
|
|
||||||
|
void fix_import(Module* module, u32 func, u32 addr)
|
||||||
|
{
|
||||||
|
Memory.Write32((addr), 0x3d600000 | (func >> 16)); /* lis r11, (func_id >> 16) */
|
||||||
|
Memory.Write32((addr) + 4, 0x616b0000 | (func & 0xffff)); /* ori r11, (func_id & 0xffff) */
|
||||||
|
Memory.Write64((addr) + 8, 0x440000024e800020ull); /* sc + blr */
|
||||||
|
|
||||||
|
module->Load(func);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define FIX_IMPORT(module, func, addr) fix_import(module, getFunctionId(#func), addr)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
s32 syncMutexInitialize(mem_ptr_t<CellSyncMutex> mutex)
|
s32 syncMutexInitialize(mem_ptr_t<CellSyncMutex> mutex)
|
||||||
|
@ -1501,6 +1513,8 @@ s32 _cellSyncLFQueuePushBody(mem_ptr_t<CellSyncLFQueue> queue, u32 buffer_addr,
|
||||||
// cellSyncLFQueuePush has 1 in isBlocking param, cellSyncLFQueueTryPush has 0
|
// cellSyncLFQueuePush has 1 in isBlocking param, cellSyncLFQueueTryPush has 0
|
||||||
cellSync->Warning("_cellSyncLFQueuePushBody(queue_addr=0x%x, buffer_addr=0x%x, isBlocking=%d)", queue.GetAddr(), buffer_addr, isBlocking);
|
cellSync->Warning("_cellSyncLFQueuePushBody(queue_addr=0x%x, buffer_addr=0x%x, isBlocking=%d)", queue.GetAddr(), buffer_addr, isBlocking);
|
||||||
|
|
||||||
|
//return GetCurrentPPUThread().FastCall2(libsre + 0x1674, libsre_rtoc); // test
|
||||||
|
|
||||||
if (!queue || !buffer_addr)
|
if (!queue || !buffer_addr)
|
||||||
{
|
{
|
||||||
return CELL_SYNC_ERROR_NULL_POINTER;
|
return CELL_SYNC_ERROR_NULL_POINTER;
|
||||||
|
@ -2210,16 +2224,41 @@ void cellSync_init()
|
||||||
memcpy(Memory + libsre, libsre_data, sizeof(libsre_data));
|
memcpy(Memory + libsre, libsre_data, sizeof(libsre_data));
|
||||||
libsre_rtoc = libsre + 0x399B0;
|
libsre_rtoc = libsre + 0x399B0;
|
||||||
|
|
||||||
#define FIX_IMPORT(addr, func) \
|
extern Module* sysPrxForUser;
|
||||||
Memory.Write32((addr), 0x3d600000 | (getFunctionId(#func) >> 16)); /* lis r11, (func_id >> 16) */\
|
|
||||||
Memory.Write32((addr), 0x616b0000 | (getFunctionId(#func) & 0xffff)); /* ori r11, (func_id & 0xffff) */\
|
|
||||||
Memory.Write64((addr), 0x440000024e800020ull) /* sc + blr */
|
|
||||||
|
|
||||||
|
FIX_IMPORT(sysPrxForUser, _sys_strncmp , libsre + 0x1D5FC);
|
||||||
|
FIX_IMPORT(sysPrxForUser, _sys_strcat , libsre + 0x1D61C);
|
||||||
#undef FIX_IMPORT
|
FIX_IMPORT(sysPrxForUser, _sys_vsnprintf , libsre + 0x1D63C);
|
||||||
|
FIX_IMPORT(sysPrxForUser, _sys_snprintf , libsre + 0x1D65C);
|
||||||
|
FIX_IMPORT(sysPrxForUser, sys_lwmutex_lock , libsre + 0x1D67C);
|
||||||
|
FIX_IMPORT(sysPrxForUser, sys_lwmutex_unlock , libsre + 0x1D69C);
|
||||||
|
FIX_IMPORT(sysPrxForUser, sys_lwcond_destroy , libsre + 0x1D6BC);
|
||||||
|
FIX_IMPORT(sysPrxForUser, sys_ppu_thread_create , libsre + 0x1D6DC);
|
||||||
|
FIX_IMPORT(sysPrxForUser, sys_lwcond_wait , libsre + 0x1D6FC);
|
||||||
|
FIX_IMPORT(sysPrxForUser, _sys_strlen , libsre + 0x1D71C);
|
||||||
|
FIX_IMPORT(sysPrxForUser, sys_lwmutex_create , libsre + 0x1D73C);
|
||||||
|
FIX_IMPORT(sysPrxForUser, _sys_spu_printf_detach_group , libsre + 0x1D75C);
|
||||||
|
FIX_IMPORT(sysPrxForUser, _sys_memset , libsre + 0x1D77C);
|
||||||
|
FIX_IMPORT(sysPrxForUser, _sys_memcpy , libsre + 0x1D79C);
|
||||||
|
FIX_IMPORT(sysPrxForUser, _sys_strncat , libsre + 0x1D7BC);
|
||||||
|
FIX_IMPORT(sysPrxForUser, _sys_strcpy , libsre + 0x1D7DC);
|
||||||
|
FIX_IMPORT(sysPrxForUser, _sys_printf , libsre + 0x1D7FC);
|
||||||
|
fix_import(sysPrxForUser, 0x9FB6228E , libsre + 0x1D81C);
|
||||||
|
FIX_IMPORT(sysPrxForUser, sys_ppu_thread_exit , libsre + 0x1D83C);
|
||||||
|
FIX_IMPORT(sysPrxForUser, sys_lwmutex_destroy , libsre + 0x1D85C);
|
||||||
|
FIX_IMPORT(sysPrxForUser, _sys_strncpy , libsre + 0x1D87C);
|
||||||
|
FIX_IMPORT(sysPrxForUser, sys_lwcond_create , libsre + 0x1D89C);
|
||||||
|
FIX_IMPORT(sysPrxForUser, _sys_spu_printf_attach_group , libsre + 0x1D8BC);
|
||||||
|
FIX_IMPORT(sysPrxForUser, sys_prx_get_module_id_by_name , libsre + 0x1D8DC);
|
||||||
|
FIX_IMPORT(sysPrxForUser, sys_spu_image_close , libsre + 0x1D8FC);
|
||||||
|
fix_import(sysPrxForUser, 0xE75C40F2 , libsre + 0x1D91C);
|
||||||
|
FIX_IMPORT(sysPrxForUser, sys_spu_image_import , libsre + 0x1D93C);
|
||||||
|
FIX_IMPORT(sysPrxForUser, sys_lwcond_signal , libsre + 0x1D95C);
|
||||||
|
FIX_IMPORT(sysPrxForUser, _sys_vprintf , libsre + 0x1D97C);
|
||||||
|
FIX_IMPORT(sysPrxForUser, _sys_memcmp , libsre + 0x1D99C);
|
||||||
});
|
});
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#undef PRX_DEBUG
|
#undef PRX_DEBUG
|
||||||
|
#undef FIX_IMPORT
|
Loading…
Add table
Add a link
Reference in a new issue