diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index ad886b4300..83aabdbc72 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -1231,7 +1231,6 @@ endif() if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64) target_sources(core PRIVATE - arm/dynarmic/arm_dynarmic.cpp arm/dynarmic/arm_dynarmic.h arm/dynarmic/arm_dynarmic_64.cpp arm/dynarmic/arm_dynarmic_64.h diff --git a/src/core/arm/dynarmic/arm_dynarmic.cpp b/src/core/arm/dynarmic/arm_dynarmic.cpp deleted file mode 100644 index 06c8e40b08..0000000000 --- a/src/core/arm/dynarmic/arm_dynarmic.cpp +++ /dev/null @@ -1,52 +0,0 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project -// SPDX-License-Identifier: GPL-3.0-or-later - -// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#ifdef __linux__ - -#include "common/signal_chain.h" - -#include "core/arm/dynarmic/arm_dynarmic.h" -#include "core/hle/kernel/k_process.h" -#include "core/memory.h" - -namespace Core { - -namespace { - -thread_local Core::Memory::Memory* g_current_memory{}; -std::once_flag g_registered{}; -struct sigaction g_old_segv {}; - -void HandleSigSegv(int sig, siginfo_t* info, void* ctx) { - if (g_current_memory && g_current_memory->InvalidateSeparateHeap(info->si_addr)) { - return; - } - - return g_old_segv.sa_sigaction(sig, info, ctx); -} - -} // namespace - -ScopedJitExecution::ScopedJitExecution(Kernel::KProcess* process) { - g_current_memory = std::addressof(process->GetMemory()); -} - -ScopedJitExecution::~ScopedJitExecution() { - g_current_memory = nullptr; -} - -void ScopedJitExecution::RegisterHandler() { - std::call_once(g_registered, [] { - struct sigaction sa {}; - sa.sa_sigaction = &HandleSigSegv; - sa.sa_flags = SA_SIGINFO | SA_ONSTACK; - Common::SigAction(SIGSEGV, std::addressof(sa), std::addressof(g_old_segv)); - }); -} - -} // namespace Core - -#endif diff --git a/src/core/arm/dynarmic/arm_dynarmic.h b/src/core/arm/dynarmic/arm_dynarmic.h index e5c6f1be00..46384f7e6d 100644 --- a/src/core/arm/dynarmic/arm_dynarmic.h +++ b/src/core/arm/dynarmic/arm_dynarmic.h @@ -18,35 +18,13 @@ constexpr Dynarmic::HaltReason InstructionBreakpoint = Dynarmic::HaltReason::Use constexpr Dynarmic::HaltReason PrefetchAbort = Dynarmic::HaltReason::UserDefined6; constexpr HaltReason TranslateHaltReason(Dynarmic::HaltReason hr) { - static_assert(static_cast(HaltReason::StepThread) == static_cast(StepThread)); - static_assert(static_cast(HaltReason::DataAbort) == static_cast(DataAbort)); - static_assert(static_cast(HaltReason::BreakLoop) == static_cast(BreakLoop)); - static_assert(static_cast(HaltReason::SupervisorCall) == static_cast(SupervisorCall)); - static_assert(static_cast(HaltReason::InstructionBreakpoint) == - static_cast(InstructionBreakpoint)); - static_assert(static_cast(HaltReason::PrefetchAbort) == static_cast(PrefetchAbort)); - - return static_cast(hr); + static_assert(u64(HaltReason::StepThread) == u64(StepThread)); + static_assert(u64(HaltReason::DataAbort) == u64(DataAbort)); + static_assert(u64(HaltReason::BreakLoop) == u64(BreakLoop)); + static_assert(u64(HaltReason::SupervisorCall) == u64(SupervisorCall)); + static_assert(u64(HaltReason::InstructionBreakpoint) == u64(InstructionBreakpoint)); + static_assert(u64(HaltReason::PrefetchAbort) == u64(PrefetchAbort)); + return HaltReason(hr); } -#ifdef __linux__ - -class ScopedJitExecution { -public: - explicit ScopedJitExecution(Kernel::KProcess* process); - ~ScopedJitExecution(); - static void RegisterHandler(); -}; - -#else - -class ScopedJitExecution { -public: - explicit ScopedJitExecution(Kernel::KProcess* process) {} - ~ScopedJitExecution() {} - static void RegisterHandler() {} -}; - -#endif - } // namespace Core