diff --git a/rpcs3/Emu/Cell/PPUAnalyser.cpp b/rpcs3/Emu/Cell/PPUAnalyser.cpp index ebda9c2580..2a0186213c 100644 --- a/rpcs3/Emu/Cell/PPUAnalyser.cpp +++ b/rpcs3/Emu/Cell/PPUAnalyser.cpp @@ -532,6 +532,11 @@ namespace ppu_patterns bool ppu_module::analyse(u32 lib_toc, u32 entry, const u32 sec_end, const std::basic_string& applied, std::function check_aborted) { + if (segs.empty()) + { + return false; + } + // Assume first segment is executable const u32 start = segs[0].addr; diff --git a/rpcs3/Emu/Cell/PPUModule.cpp b/rpcs3/Emu/Cell/PPUModule.cpp index 51c60c31d7..060b767c7e 100644 --- a/rpcs3/Emu/Cell/PPUModule.cpp +++ b/rpcs3/Emu/Cell/PPUModule.cpp @@ -1658,7 +1658,7 @@ std::shared_ptr 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; } diff --git a/rpcs3/Emu/Cell/PPUThread.cpp b/rpcs3/Emu/Cell/PPUThread.cpp index 60f679be65..b339116c97 100644 --- a/rpcs3/Emu/Cell/PPUThread.cpp +++ b/rpcs3/Emu/Cell/PPUThread.cpp @@ -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; @@ -3573,7 +3573,7 @@ extern void ppu_precompile(std::vector& dir_queue, std::vector& dir_queue, std::vector& dir_queue, std::vectorget() = std::move(main_module); + Emu.ConfigurePPUCache(); }); exec_worker();