Skip to content

Commit

Permalink
PPU Precompilation Fixup
Browse files Browse the repository at this point in the history
  • Loading branch information
elad335 committed Aug 6, 2023
1 parent 343ba87 commit ee869a4
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 3 deletions.
5 changes: 5 additions & 0 deletions rpcs3/Emu/Cell/PPUAnalyser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -532,6 +532,11 @@ namespace ppu_patterns

bool ppu_module::analyse(u32 lib_toc, u32 entry, const u32 sec_end, const std::basic_string<u32>& applied, std::function<bool()> check_aborted)
{
if (segs.empty())
{
return false;
}

// Assume first segment is executable
const u32 start = segs[0].addr;

Expand Down
2 changes: 1 addition & 1 deletion rpcs3/Emu/Cell/PPUModule.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1658,7 +1658,7 @@ std::shared_ptr<lv2_prx> ppu_load_prx(const ppu_prx_object& elf, bool virtual_lo

void ppu_unload_prx(const lv2_prx& prx)
{
if (prx.segs[0].ptr != vm::base(prx.segs[0].addr))
if (prx.segs.empty() || prx.segs[0].ptr != vm::base(prx.segs[0].addr))
{
return;
}
Expand Down
7 changes: 5 additions & 2 deletions rpcs3/Emu/Cell/PPUThread.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3199,7 +3199,7 @@ extern fs::file make_file_view(fs::file&& _file, u64 offset)

extern void ppu_finalize(const ppu_module& info)
{
if (!info.cache.empty())
if (info.name.empty())
{
// Don't remove main module from memory
return;
Expand Down Expand Up @@ -3573,7 +3573,7 @@ extern void ppu_precompile(std::vector<std::string>& dir_queue, std::vector<ppu_

if (std::memcpy(main_module.sha1, _main.sha1, sizeof(_main.sha1)) == 0)
{
continue;
break;
}

if (!_main.analyse(0, _main.elf_entry, _main.seg0_code_end, _main.applied_pathes, [](){ return Emu.IsStopped(); }))
Expand All @@ -3584,6 +3584,8 @@ extern void ppu_precompile(std::vector<std::string>& dir_queue, std::vector<ppu_
obj.clear(), src.close(); // Clear decrypted file and elf object memory

ppu_initialize(_main);

_main.name = ' '; // Make ppu_finalize work
ppu_finalize(_main);
_main = {};
break;
Expand All @@ -3600,6 +3602,7 @@ extern void ppu_precompile(std::vector<std::string>& dir_queue, std::vector<ppu_
}

g_fxo->get<main_ppu_module>() = std::move(main_module);
Emu.ConfigurePPUCache();
});

exec_worker();
Expand Down

0 comments on commit ee869a4

Please sign in to comment.