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)); }