From c6f3737c2aee98566adb30138975158c002d761e Mon Sep 17 00:00:00 2001 From: Elad <18193363+elad335@users.noreply.github.com> Date: Tue, 7 Jan 2025 19:39:37 +0200 Subject: [PATCH] PPU LLVM: Fixup patches enlisting in analyzer --- Utilities/bin_patch.cpp | 2 +- rpcs3/Emu/Cell/PPUThread.cpp | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/Utilities/bin_patch.cpp b/Utilities/bin_patch.cpp index 7e4c0709cd..933e148e2e 100644 --- a/Utilities/bin_patch.cpp +++ b/Utilities/bin_patch.cpp @@ -1449,7 +1449,7 @@ static usz apply_modification(std::vector& applied, patch_engine::patch_inf void patch_engine::apply(std::vector& applied_total, const std::string& name, std::function mem_translate, u32 filesz, u32 min_addr) { - applied_total.clear(); + // applied_total may be non-empty, do not clear it if (!m_map.contains(name)) { diff --git a/rpcs3/Emu/Cell/PPUThread.cpp b/rpcs3/Emu/Cell/PPUThread.cpp index 0f7b4bcabc..8da9cca8f0 100644 --- a/rpcs3/Emu/Cell/PPUThread.cpp +++ b/rpcs3/Emu/Cell/PPUThread.cpp @@ -4904,15 +4904,20 @@ bool ppu_initialize(const ppu_module& info, bool check_only, u64 file_s // Potentially occuring during patches // Avoid doing it for files with a single module such as most PRX - std::vector> addrs(info.funcs.size() + 1); - usz addr_index = 0; + std::vector> addrs; for (const ppu_function& func : info.funcs) { - addrs[addr_index++] = func.addr - reloc; + if (func.size == 0) + { + continue; + } + + addrs.emplace_back(func.addr - reloc); } - addrs.back() = ::size32(info.funcs); + // Hash its size too + addrs.emplace_back(::size32(addrs)); sha1_update(&ctx, reinterpret_cast(addrs.data()), addrs.size() * sizeof(be_t)); }