diff --git a/rpcs3/Emu/Cell/PPUModule.cpp b/rpcs3/Emu/Cell/PPUModule.cpp index dfd3fa0924..b5f438e7d2 100644 --- a/rpcs3/Emu/Cell/PPUModule.cpp +++ b/rpcs3/Emu/Cell/PPUModule.cpp @@ -1345,7 +1345,7 @@ void ppu_load_exec(const ppu_exec_object& elf) } } } - + if (!load_libs.empty()) { const std::string lle_dir = vfs::get("/dev_flash/sys/external/"); @@ -1426,6 +1426,18 @@ void ppu_load_exec(const ppu_exec_object& elf) *args++ = arg_addr; } + // Fix primary stack size + switch (primary_stacksize) + { + case 0x10: primary_stacksize = 32 * 1024; break; // SYS_PROCESS_PRIMARY_STACK_SIZE_32K + case 0x20: primary_stacksize = 64 * 1024; break; // SYS_PROCESS_PRIMARY_STACK_SIZE_64K + case 0x30: primary_stacksize = 96 * 1024; break; // SYS_PROCESS_PRIMARY_STACK_SIZE_96K + case 0x40: primary_stacksize = 128 * 1024; break; // SYS_PROCESS_PRIMARY_STACK_SIZE_128K + case 0x50: primary_stacksize = 256 * 1024; break; // SYS_PROCESS_PRIMARY_STACK_SIZE_256K + case 0x60: primary_stacksize = 512 * 1024; break; // SYS_PROCESS_PRIMARY_STACK_SIZE_512K + case 0x70: primary_stacksize = 1024 * 1024; break; // SYS_PROCESS_PRIMARY_STACK_SIZE_1M + } + // Initialize main thread auto ppu = idm::make_ptr("main_thread", primary_prio, primary_stacksize); diff --git a/rpcs3/Emu/Cell/PPUThread.cpp b/rpcs3/Emu/Cell/PPUThread.cpp index e7ad2a7a50..0388ae86be 100644 --- a/rpcs3/Emu/Cell/PPUThread.cpp +++ b/rpcs3/Emu/Cell/PPUThread.cpp @@ -677,7 +677,7 @@ ppu_thread::~ppu_thread() ppu_thread::ppu_thread(const std::string& name, u32 prio, u32 stack) : cpu_thread(idm::last_id()) , prio(prio) - , stack_size(stack ? ::align(std::min(stack, 0x100000), 0x1000) : 0x4000) + , stack_size(stack >= 0x1000 ? ::align(std::min(stack, 0x100000), 0x1000) : 0x4000) , stack_addr(0) , start_time(get_system_time()) , m_name(name)