aboutsummaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorlizzie <lizzie@eden-emu.dev>2025-10-31 17:37:21 +0100
committercrueter <crueter@eden-emu.dev>2025-10-31 17:37:21 +0100
commitdbc98f758e1bd46594b2c7ade0509fba16c775e5 (patch)
treeab08525603b5f5e46691d2c68537a1c3c6eae1dd /src/core
parent84db3351abd70cb11430b83d8c5224607169f2ad (diff)
[core/memory] Remove defered heap allocation on Linux. (#2587)
Authored-by: weakboson <weakboson@eden-emu.dev> Signed-off-by: lizzie <lizzie@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2587 Reviewed-by: crueter <crueter@eden-emu.dev> Reviewed-by: MaranBr <maranbr@eden-emu.dev> Co-authored-by: lizzie <lizzie@eden-emu.dev> Co-committed-by: lizzie <lizzie@eden-emu.dev>
Diffstat (limited to 'src/core')
-rw-r--r--src/core/CMakeLists.txt1
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic.cpp49
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic.h23
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic_32.cpp5
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic_64.cpp5
-rw-r--r--src/core/memory.cpp15
-rw-r--r--src/core/memory.h5
7 files changed, 6 insertions, 97 deletions
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index 452e5f42e4..4bf1f851c0 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 e6e9fc45be..0000000000
--- a/src/core/arm/dynarmic/arm_dynarmic.cpp
+++ /dev/null
@@ -1,49 +0,0 @@
-// 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 53dd188151..0633a9eb5a 100644
--- a/src/core/arm/dynarmic/arm_dynarmic.h
+++ b/src/core/arm/dynarmic/arm_dynarmic.h
@@ -1,3 +1,6 @@
+// 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
@@ -26,24 +29,4 @@ constexpr HaltReason TranslateHaltReason(Dynarmic::HaltReason hr) {
return static_cast<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
diff --git a/src/core/arm/dynarmic/arm_dynarmic_32.cpp b/src/core/arm/dynarmic/arm_dynarmic_32.cpp
index a5d2e1928d..5fcc928b86 100644
--- a/src/core/arm/dynarmic/arm_dynarmic_32.cpp
+++ b/src/core/arm/dynarmic/arm_dynarmic_32.cpp
@@ -341,15 +341,11 @@ bool ArmDynarmic32::IsInThumbMode() const {
}
HaltReason ArmDynarmic32::RunThread(Kernel::KThread* thread) {
- ScopedJitExecution sj(thread->GetOwnerProcess());
-
m_jit->ClearExclusiveState();
return TranslateHaltReason(m_jit->Run());
}
HaltReason ArmDynarmic32::StepThread(Kernel::KThread* thread) {
- ScopedJitExecution sj(thread->GetOwnerProcess());
-
m_jit->ClearExclusiveState();
return TranslateHaltReason(m_jit->Step());
}
@@ -391,7 +387,6 @@ ArmDynarmic32::ArmDynarmic32(System& system, bool uses_wall_clock, Kernel::KProc
m_cp15(std::make_shared<DynarmicCP15>(*this)), m_core_index{core_index} {
auto& page_table_impl = process->GetPageTable().GetBasePageTable().GetImpl();
m_jit = MakeJit(&page_table_impl);
- ScopedJitExecution::RegisterHandler();
}
ArmDynarmic32::~ArmDynarmic32() = default;
diff --git a/src/core/arm/dynarmic/arm_dynarmic_64.cpp b/src/core/arm/dynarmic/arm_dynarmic_64.cpp
index 5ca91f0e1e..55975f4cdc 100644
--- a/src/core/arm/dynarmic/arm_dynarmic_64.cpp
+++ b/src/core/arm/dynarmic/arm_dynarmic_64.cpp
@@ -372,15 +372,11 @@ std::shared_ptr<Dynarmic::A64::Jit> ArmDynarmic64::MakeJit(Common::PageTable* pa
}
HaltReason ArmDynarmic64::RunThread(Kernel::KThread* thread) {
- ScopedJitExecution sj(thread->GetOwnerProcess());
-
m_jit->ClearExclusiveState();
return TranslateHaltReason(m_jit->Run());
}
HaltReason ArmDynarmic64::StepThread(Kernel::KThread* thread) {
- ScopedJitExecution sj(thread->GetOwnerProcess());
-
m_jit->ClearExclusiveState();
return TranslateHaltReason(m_jit->Step());
}
@@ -420,7 +416,6 @@ ArmDynarmic64::ArmDynarmic64(System& system, bool uses_wall_clock, Kernel::KProc
auto& page_table = process->GetPageTable().GetBasePageTable();
auto& page_table_impl = page_table.GetImpl();
m_jit = MakeJit(&page_table_impl, page_table.GetAddressSpaceWidth());
- ScopedJitExecution::RegisterHandler();
}
ArmDynarmic64::~ArmDynarmic64() = default;
diff --git a/src/core/memory.cpp b/src/core/memory.cpp
index 2583aae867..4f1854a2e5 100644
--- a/src/core/memory.cpp
+++ b/src/core/memory.cpp
@@ -1230,22 +1230,7 @@ bool Memory::InvalidateNCE(Common::ProcessAddress vaddr, size_t size) {
if (rasterizer) {
impl->InvalidateGPUMemory(ptr, size);
}
-
-#ifdef __linux__
- if (!rasterizer && mapped) {
- impl->buffer->DeferredMapSeparateHeap(GetInteger(vaddr));
- }
-#endif
-
return mapped && ptr != nullptr;
}
-bool Memory::InvalidateSeparateHeap(void* fault_address) {
-#ifdef __linux__
- return impl->buffer->DeferredMapSeparateHeap(static_cast<u8*>(fault_address));
-#else
- return false;
-#endif
-}
-
} // namespace Core::Memory
diff --git a/src/core/memory.h b/src/core/memory.h
index dcca26892b..c23b41a111 100644
--- a/src/core/memory.h
+++ b/src/core/memory.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
+// SPDX-License-Identifier: GPL-3.0-or-later
+
// SPDX-FileCopyrightText: 2014 Citra Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -492,8 +495,6 @@ public:
bool InvalidateNCE(Common::ProcessAddress vaddr, size_t size);
- bool InvalidateSeparateHeap(void* fault_address);
-
private:
Core::System& system;