Fix primary stack size

This commit is contained in:
Nekotekina 2017-12-25 21:06:09 +03:00
parent 3cf0fb60a4
commit 0a89f1db39
2 changed files with 14 additions and 2 deletions

View File

@ -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<ppu_thread>("main_thread", primary_prio, primary_stacksize);

View File

@ -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<u32>(stack, 0x100000), 0x1000) : 0x4000)
, stack_size(stack >= 0x1000 ? ::align(std::min<u32>(stack, 0x100000), 0x1000) : 0x4000)
, stack_addr(0)
, start_time(get_system_time())
, m_name(name)