From 0cc655074d0b5389c7b7cc9723b2b94522e4bcbe Mon Sep 17 00:00:00 2001 From: Elad <18193363+elad335@users.noreply.github.com> Date: Wed, 25 Dec 2024 07:02:42 +0200 Subject: [PATCH] serialzation.hpp: Fix add_padding --- Utilities/StrFmt.cpp | 2 +- rpcs3/Emu/Cell/Modules/cellGem.cpp | 4 ---- rpcs3/Emu/Memory/vm.cpp | 3 +-- rpcs3/Emu/savestate_utils.cpp | 2 +- rpcs3/util/serialization.hpp | 16 +++++++++++----- 5 files changed, 14 insertions(+), 13 deletions(-) diff --git a/Utilities/StrFmt.cpp b/Utilities/StrFmt.cpp index e2c2198bdc..dd59303337 100644 --- a/Utilities/StrFmt.cpp +++ b/Utilities/StrFmt.cpp @@ -596,7 +596,7 @@ void fmt_class_string::format(std::string& out, u64 arg) } } - func = func.substr(0, index); + func = func.substr(0, index) + "()"; break; } diff --git a/rpcs3/Emu/Cell/Modules/cellGem.cpp b/rpcs3/Emu/Cell/Modules/cellGem.cpp index 57858dd3b3..f7d274c4d0 100644 --- a/rpcs3/Emu/Cell/Modules/cellGem.cpp +++ b/rpcs3/Emu/Cell/Modules/cellGem.cpp @@ -479,10 +479,6 @@ public: gem_config_data(utils::serial& ar) { save(ar); - - if (ar.is_writing()) - return; - load_configs(); } diff --git a/rpcs3/Emu/Memory/vm.cpp b/rpcs3/Emu/Memory/vm.cpp index 446d8d98a3..6ab0ecc71d 100644 --- a/rpcs3/Emu/Memory/vm.cpp +++ b/rpcs3/Emu/Memory/vm.cpp @@ -1749,8 +1749,7 @@ namespace vm if (is_memory_compatible_for_copy_from_executable_optimization(addr, shm.first)) { // Revert changes - ar.data.resize(ar.data.size() - (sizeof(u32) * 2 + sizeof(memory_page))); - ar.seek_end(); + ar.trunc(sizeof(u32) * 2 + sizeof(memory_page)); vm_log.success("Removed memory block matching the memory of the executable from savestate. (addr=0x%x, size=0x%x)", addr, shm.first); continue; } diff --git a/rpcs3/Emu/savestate_utils.cpp b/rpcs3/Emu/savestate_utils.cpp index 790da3b035..9559547260 100644 --- a/rpcs3/Emu/savestate_utils.cpp +++ b/rpcs3/Emu/savestate_utils.cpp @@ -393,7 +393,7 @@ namespace stx if ((saved ^ tag) & data_mask) { ensure(!ar.is_writing()); - fmt::throw_exception("serial_breathe_and_tag(%u): %s, object: '%s', next-object: '%s', expected/tag: 0x%x != 0x%x,", s_tls_call_count, ar, s_tls_object_name, name, tag, saved); + fmt::throw_exception("serial_breathe_and_tag(%u): %s\nobject: '%s', next-object: '%s', expected/tag: 0x%x != 0x%x,", s_tls_call_count, ar, s_tls_object_name, name, tag, saved); } s_tls_object_name = name; diff --git a/rpcs3/util/serialization.hpp b/rpcs3/util/serialization.hpp index bcc0fe8d97..120c70c606 100644 --- a/rpcs3/util/serialization.hpp +++ b/rpcs3/util/serialization.hpp @@ -108,10 +108,10 @@ public: { if (m_is_writing) return; - const u32 offset1 = ::offset32(first) + sizeof(first); + const u32 offset1 = ::offset32(first) + sizeof(T); const u32 offset2 = ::offset32(second); - AUDIT(offset2 >= offset1); + AUDIT(::offset32(first) <= ::offset32(second)); if (offset2 > offset1) { @@ -459,10 +459,16 @@ public: m_file_handler.reset(); } - usz seek_end(usz backwards = 0) + usz seek_end() { - ensure(data.size() + data_offset >= backwards); - pos = data.size() + data_offset - backwards; + pos = data.size() + data_offset; + return pos; + } + + usz trunc(usz count) + { + data.resize(data.size() - count); + seek_end(); return pos; }