PPU: free prx segments

This commit is contained in:
Nekotekina 2017-07-05 22:52:02 +03:00
commit 74f2be7307
2 changed files with 10 additions and 1 deletions

View file

@ -890,6 +890,14 @@ std::shared_ptr<lv2_prx> ppu_load_prx(const ppu_prx_object& elf, const std::stri
return prx; return prx;
} }
void ppu_unload_prx(const lv2_prx& prx)
{
for (auto& seg : prx.segs)
{
vm::dealloc(seg.addr, vm::main);
}
}
void ppu_load_exec(const ppu_exec_object& elf) void ppu_load_exec(const ppu_exec_object& elf)
{ {
if (g_cfg.core.hook_functions) if (g_cfg.core.hook_functions)

View file

@ -12,6 +12,7 @@
namespace vm { using namespace ps3; } namespace vm { using namespace ps3; }
extern std::shared_ptr<lv2_prx> ppu_load_prx(const ppu_prx_object&, const std::string&); extern std::shared_ptr<lv2_prx> ppu_load_prx(const ppu_prx_object&, const std::string&);
extern void ppu_unload_prx(const lv2_prx& prx);
extern void ppu_initialize(const ppu_module&); extern void ppu_initialize(const ppu_module&);
logs::channel sys_prx("sys_prx"); logs::channel sys_prx("sys_prx");
@ -233,7 +234,7 @@ error_code _sys_prx_unload_module(u32 id, u64 flags, vm::ptr<sys_prx_unload_modu
return CELL_ESRCH; return CELL_ESRCH;
} }
//Memory.Free(prx->address); ppu_unload_prx(*prx);
//s32 result = prx->exit ? prx->exit() : CELL_OK; //s32 result = prx->exit ? prx->exit() : CELL_OK;