diff --git a/rpcs3/Emu/Cell/Modules/sysPrxForUser.cpp b/rpcs3/Emu/Cell/Modules/sysPrxForUser.cpp index 8e0b5c511a..172a3bda92 100644 --- a/rpcs3/Emu/Cell/Modules/sysPrxForUser.cpp +++ b/rpcs3/Emu/Cell/Modules/sysPrxForUser.cpp @@ -144,21 +144,27 @@ s32 sys_lv2coredump_D725F320() fmt::raw_error(__func__); } -// quick notes on sys_crash_dump_(get|set)_user_log_area -// (only tested with Destiny BLUS31181) -// unk1 is always 0 -// unk2 is a pointer to a cstring -// unk3 is a pointer to... something? a struct maybe? - -s32 sys_crash_dump_get_user_log_area(u32 unk1, vm::ptr unk2, vm::ptr unk3) +error_code sys_crash_dump_get_user_log_area(u8 index, vm::ptr entry) { - sysPrxForUser.todo("sys_crash_dump_get_user_log_area(unk1=%d, unk2=*0x%x, unk3=*0x%x)", unk1, unk2, unk3); + sysPrxForUser.todo("sys_crash_dump_get_user_log_area(index=%d, entry=*0x%x)", index, entry); + + if (index > SYS_CRASH_DUMP_MAX_LOG_AREA || !entry) + { + return CELL_EINVAL; + } + return CELL_OK; } -s32 sys_crash_dump_set_user_log_area(u32 unk1, vm::ptr unk2, vm::ptr unk3) +error_code sys_crash_dump_set_user_log_area(u8 index, vm::ptr new_entry) { - sysPrxForUser.todo("sys_crash_dump_set_user_log_area(unk1=%d, unk2=*0x%x %s, unk3=*0x%x)", unk1, unk2, unk2, unk3); + sysPrxForUser.todo("sys_crash_dump_set_user_log_area(index=%d, new_entry=*0x%x)", index, new_entry); + + if (index > SYS_CRASH_DUMP_MAX_LOG_AREA || !new_entry) + { + return CELL_EINVAL; + } + return CELL_OK; } diff --git a/rpcs3/Emu/Cell/Modules/sysPrxForUser.h b/rpcs3/Emu/Cell/Modules/sysPrxForUser.h index beedcd9c78..4472998c9e 100644 --- a/rpcs3/Emu/Cell/Modules/sysPrxForUser.h +++ b/rpcs3/Emu/Cell/Modules/sysPrxForUser.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once @@ -42,6 +42,19 @@ struct sys_lwmutex_locker } }; +enum +{ + SYS_CRASH_DUMP_MAX_LABEL_SIZE = 16, + SYS_CRASH_DUMP_MAX_LOG_AREA = 127 // not actually defined in CELL +}; + +struct sys_crash_dump_log_area_info_t +{ + char label[SYS_CRASH_DUMP_MAX_LABEL_SIZE]; // 15 + 1 (0 terminated) + vm::ptr addr; + be_t size; +}; + struct sys_lwcond_t; struct sys_lwcond_attribute_t;