From c7a7fe15e592af37f5837ce08af040b3974bfc9a Mon Sep 17 00:00:00 2001 From: lizzie Date: Fri, 28 Nov 2025 22:22:05 +0000 Subject: [PATCH] do not register handlers for fastmem if fastmem is disabled Signed-off-by: lizzie --- .../src/dynarmic/backend/exception_handler_posix.cpp | 4 ++-- src/dynarmic/src/dynarmic/backend/x64/a32_emit_x64.cpp | 6 ++++-- src/dynarmic/src/dynarmic/backend/x64/a64_emit_x64.cpp | 6 ++++-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/dynarmic/src/dynarmic/backend/exception_handler_posix.cpp b/src/dynarmic/src/dynarmic/backend/exception_handler_posix.cpp index 9f508f72e5..27d40a9504 100644 --- a/src/dynarmic/src/dynarmic/backend/exception_handler_posix.cpp +++ b/src/dynarmic/src/dynarmic/backend/exception_handler_posix.cpp @@ -57,7 +57,7 @@ class SigHandler { public: SigHandler() noexcept { signal_stack_size = std::max(SIGSTKSZ, 2 * 1024 * 1024); - signal_stack_memory = mmap(nullptr, signal_stack_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + signal_stack_memory = std::malloc(signal_stack_size); stack_t signal_stack{}; signal_stack.ss_sp = signal_stack_memory; @@ -89,7 +89,7 @@ public: } ~SigHandler() noexcept { - munmap(signal_stack_memory, signal_stack_size); + std::free(signal_stack_memory); } void AddCodeBlock(u64 offset, CodeBlockInfo cbi) noexcept { diff --git a/src/dynarmic/src/dynarmic/backend/x64/a32_emit_x64.cpp b/src/dynarmic/src/dynarmic/backend/x64/a32_emit_x64.cpp index 986a6659b1..49986a3531 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/a32_emit_x64.cpp +++ b/src/dynarmic/src/dynarmic/backend/x64/a32_emit_x64.cpp @@ -81,8 +81,10 @@ FP::FPCR A32EmitContext::FPCR(bool fpcr_controlled) const { } A32EmitX64::A32EmitX64(BlockOfCode& code, A32::UserConfig conf, A32::Jit* jit_interface) - : EmitX64(code), conf(std::move(conf)), jit_interface(jit_interface) { - GenFastmemFallbacks(); + : EmitX64(code), conf(std::move(conf)), jit_interface(jit_interface) { + if (conf.fastmem_pointer) + GenFastmemFallbacks(); + // GenTerminalHandlers(); code.PreludeComplete(); ClearFastDispatchTable(); diff --git a/src/dynarmic/src/dynarmic/backend/x64/a64_emit_x64.cpp b/src/dynarmic/src/dynarmic/backend/x64/a64_emit_x64.cpp index 044249a26b..250bd75a32 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/a64_emit_x64.cpp +++ b/src/dynarmic/src/dynarmic/backend/x64/a64_emit_x64.cpp @@ -54,9 +54,11 @@ FP::FPCR A64EmitContext::FPCR(bool fpcr_controlled) const { } A64EmitX64::A64EmitX64(BlockOfCode& code, A64::UserConfig conf, A64::Jit* jit_interface) - : EmitX64(code), conf(conf), jit_interface{jit_interface} { + : EmitX64(code), conf(conf), jit_interface{jit_interface} { + if (conf.fastmem_pointer) + GenFastmemFallbacks(); + // GenMemory128Accessors(); - GenFastmemFallbacks(); GenTerminalHandlers(); code.PreludeComplete(); ClearFastDispatchTable();