From 4bcc2a23195d48404748c18fbde15f31a28630c2 Mon Sep 17 00:00:00 2001 From: lizzie Date: Sun, 20 Sep 2026 12:52:02 +0000 Subject: [PATCH] 2026-09-20 12:52:02 Signed-off-by: lizzie --- src/core/hle/kernel/kernel.cpp | 20 +++++++++----------- src/core/hle/kernel/kernel.h | 5 ++--- src/core/hle/kernel/slab_helpers.h | 7 ++++--- src/core/memory/dmnt_cheat_vm.cpp | 16 +++++++++++++++- src/core/memory/dmnt_cheat_vm.h | 18 ++++++++++-------- 5 files changed, 40 insertions(+), 26 deletions(-) diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp index 4f1d849209..39bb57826e 100644 --- a/src/core/hle/kernel/kernel.cpp +++ b/src/core/hle/kernel/kernel.cpp @@ -967,12 +967,16 @@ Kernel::KHardwareTimer& KernelCore::HardwareTimer() { return *impl->hardware_timer; } -KAutoObjectWithListContainer& KernelCore::ObjectListContainer() { - return *impl->global_object_list_container; +KAutoObjectWithListContainer* KernelCore::ObjectListContainer() { + if (!impl->global_object_list_container) + return nullptr; + return std::addressof(*impl->global_object_list_container); } -const KAutoObjectWithListContainer& KernelCore::ObjectListContainer() const { - return *impl->global_object_list_container; +const KAutoObjectWithListContainer* KernelCore::ObjectListContainer() const { + if (!impl->global_object_list_container) + return nullptr; + return std::addressof(*impl->global_object_list_container); } void KernelCore::PrepareReschedule(std::size_t id) { @@ -1001,16 +1005,10 @@ void KernelCore::UnregisterInUseObject(KAutoObject* object) { void KernelCore::RunServer(std::unique_ptr&& server_manager) { auto* manager = server_manager.get(); - - { + if (!impl->is_shutting_down) { std::scoped_lock lk{impl->server_lock}; - if (impl->is_shutting_down) { - return; - } - impl->server_managers.emplace_back(std::move(server_manager)); } - manager->LoopProcess(); } diff --git a/src/core/hle/kernel/kernel.h b/src/core/hle/kernel/kernel.h index 2d44654f4d..c0c1932a6f 100644 --- a/src/core/hle/kernel/kernel.h +++ b/src/core/hle/kernel/kernel.h @@ -175,9 +175,8 @@ public: /// Stops execution of 'id' core, in order to reschedule a new thread. void PrepareReschedule(std::size_t id); - KAutoObjectWithListContainer& ObjectListContainer(); - - const KAutoObjectWithListContainer& ObjectListContainer() const; + KAutoObjectWithListContainer* ObjectListContainer(); + const KAutoObjectWithListContainer* ObjectListContainer() const; /// Registers all kernel objects with the global emulation state, this is purely for tracking /// leaks after emulation has been shutdown. diff --git a/src/core/hle/kernel/slab_helpers.h b/src/core/hle/kernel/slab_helpers.h index 95e6b9f6e6..aed36e1f02 100644 --- a/src/core/hle/kernel/slab_helpers.h +++ b/src/core/hle/kernel/slab_helpers.h @@ -151,7 +151,8 @@ public: const bool is_initialized = this->IsInitialized(); uintptr_t arg = 0; if (is_initialized) { - kernel.ObjectListContainer().Unregister(this); + if (auto const olc = kernel.ObjectListContainer(); olc) + olc->Unregister(this); arg = this->GetPostDestroyArgument(); this->Finalize(kernel); } @@ -175,7 +176,7 @@ public: public: static void InitializeSlabHeap(KernelCore& kernel, void* memory, size_t memory_size) { kernel.SlabHeap().Initialize(memory, memory_size); - kernel.ObjectListContainer().Initialize(); + kernel.ObjectListContainer()->Initialize(); } static Derived* Create(KernelCore& kernel) { @@ -186,7 +187,7 @@ public: } static void Register(KernelCore& kernel, Derived* obj) { - return kernel.ObjectListContainer().Register(obj); + return kernel.ObjectListContainer()->Register(obj); } static size_t GetObjectSize(KernelCore& kernel) { diff --git a/src/core/memory/dmnt_cheat_vm.cpp b/src/core/memory/dmnt_cheat_vm.cpp index caceeec4fc..242e59d447 100644 --- a/src/core/memory/dmnt_cheat_vm.cpp +++ b/src/core/memory/dmnt_cheat_vm.cpp @@ -1,6 +1,12 @@ // SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later +// gcc14 bug +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" +#endif + #include "common/assert.h" #include "common/scope_exit.h" #include "core/memory/dmnt_cheat_types.h" @@ -223,7 +229,10 @@ DmntCheatVm::Callbacks::~Callbacks() = default; bool DmntCheatVm::DecodeNextOpcode(CheatVmOpcode& out) { // If we've ever seen a decode failure, return false. bool valid = decode_success; - CheatVmOpcode opcode = {}; + CheatVmOpcode opcode = { + .begin_conditional_block = false, + .opcode = {} + }; SCOPE_EXIT { decode_success &= valid; if (valid) { @@ -1266,3 +1275,8 @@ void DmntCheatVm::Execute(const CheatProcessMetadata& metadata) { } } // namespace Core::Memory + + +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#endif diff --git a/src/core/memory/dmnt_cheat_vm.h b/src/core/memory/dmnt_cheat_vm.h index de5e81add2..692474a5b2 100644 --- a/src/core/memory/dmnt_cheat_vm.h +++ b/src/core/memory/dmnt_cheat_vm.h @@ -254,14 +254,16 @@ struct UnrecognizedInstruction { struct CheatVmOpcode { bool begin_conditional_block{}; - std::variant - opcode{}; + std::variant< + std::monostate, + StoreStaticOpcode, BeginConditionalOpcode, EndConditionalOpcode, ControlLoopOpcode, + LoadRegisterStaticOpcode, LoadRegisterMemoryOpcode, StoreStaticToAddressOpcode, + PerformArithmeticStaticOpcode, BeginKeypressConditionalOpcode, + PerformArithmeticRegisterOpcode, StoreRegisterToAddressOpcode, + BeginRegisterConditionalOpcode, SaveRestoreRegisterOpcode, + SaveRestoreRegisterMaskOpcode, ReadWriteStaticRegisterOpcode, PauseProcessOpcode, + ResumeProcessOpcode, DebugLogOpcode, UnrecognizedInstruction + > opcode{}; }; class DmntCheatVm {