From 56ef51965a90d36ac5d0e907a1e046307b941cb1 Mon Sep 17 00:00:00 2001 From: lizzie Date: Wed, 26 Aug 2026 17:30:15 +0000 Subject: [PATCH] remove custom allocator lool --- .../dynarmic/backend/x64/block_of_code.cpp | 69 +------------------ .../src/dynarmic/backend/x64/block_of_code.h | 4 +- 2 files changed, 3 insertions(+), 70 deletions(-) diff --git a/src/dynarmic/src/dynarmic/backend/x64/block_of_code.cpp b/src/dynarmic/src/dynarmic/backend/x64/block_of_code.cpp index a2947ac519..24bfa799f2 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/block_of_code.cpp +++ b/src/dynarmic/src/dynarmic/backend/x64/block_of_code.cpp @@ -61,73 +61,6 @@ namespace { constexpr size_t CONSTANT_POOL_SIZE = 2 * 1024 * 1024; constexpr size_t PRELUDE_COMMIT_SIZE = 16 * 1024 * 1024; -class CustomXbyakAllocator : public Xbyak::Allocator { -public: -#ifdef _WIN32 - uint8_t* alloc(size_t size) override { - void* p = VirtualAlloc(nullptr, size, MEM_RESERVE, PAGE_READWRITE); - if (p == nullptr) { - using Xbyak::Error; - XBYAK_THROW(Xbyak::ERR_CANT_ALLOC); - } - return static_cast(p); - } - - void free(uint8_t* p) override { - VirtualFree(static_cast(p), 0, MEM_RELEASE); - } - - bool useProtect() const override { return false; } -#else - static constexpr size_t DYNARMIC_PAGE_SIZE = 4096; - - // Can't subclass Xbyak::MmapAllocator because it is not a pure interface - // and doesn't expose its construtor - uint8_t* alloc(size_t size) override { - // Waste a page to store the size - size += DYNARMIC_PAGE_SIZE; - - int mode = MAP_PRIVATE; -#if defined(MAP_ANONYMOUS) - mode |= MAP_ANONYMOUS; -#elif defined(MAP_ANON) - mode |= MAP_ANON; -#else -# error "not supported" -#endif -#ifdef MAP_JIT - mode |= MAP_JIT; -#endif - int prot = PROT_READ | PROT_WRITE; -#ifdef PROT_MPROTECT - // https://man.netbsd.org/mprotect.2 specifies that an mprotect() that is LESS - // restrictive than the original mapping MUST fail - prot |= PROT_MPROTECT(PROT_READ) | PROT_MPROTECT(PROT_WRITE) | PROT_MPROTECT(PROT_EXEC); -#endif - void* p = mmap(nullptr, size, prot, mode, -1, 0); - if (p == MAP_FAILED) { - using Xbyak::Error; - XBYAK_THROW(Xbyak::ERR_CANT_ALLOC); - } - std::memcpy(p, &size, sizeof(size_t)); - return static_cast(p) + DYNARMIC_PAGE_SIZE; - } - - void free(uint8_t* p) override { - size_t size; - std::memcpy(&size, p - DYNARMIC_PAGE_SIZE, sizeof(size_t)); - munmap(p - DYNARMIC_PAGE_SIZE, size); - } - -# ifdef DYNARMIC_ENABLE_NO_EXECUTE_SUPPORT - bool useProtect() const override { return false; } -# endif -#endif -}; - -// This is threadsafe as Xbyak::Allocator does not contain any state; it is a pure interface. -CustomXbyakAllocator s_allocator; - #ifdef DYNARMIC_ENABLE_NO_EXECUTE_SUPPORT void ProtectMemory(const void* base, size_t size, bool is_executable) { # ifdef _WIN32 @@ -236,7 +169,7 @@ BlockOfCode::BlockOfCode(RunCodeCallbacks cb, JitStateInfo jsi, size_t total_cod #else , nullptr //Allow RWE #endif - , &s_allocator) + , nullptr) , constant_pool(*this, CONSTANT_POOL_SIZE) , jsi(jsi) , cb(std::move(cb)) diff --git a/src/dynarmic/src/dynarmic/backend/x64/block_of_code.h b/src/dynarmic/src/dynarmic/backend/x64/block_of_code.h index 39c4786a98..20012a070f 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/block_of_code.h +++ b/src/dynarmic/src/dynarmic/backend/x64/block_of_code.h @@ -176,10 +176,10 @@ private: ConstantPool constant_pool; JitStateInfo jsi; std::array return_from_run_code; - RunCodeCallbacks cb; - CodePtr code_begin = nullptr; RunCodeFuncType run_code = nullptr; RunCodeFuncType step_code = nullptr; + RunCodeCallbacks cb; + CodePtr code_begin = nullptr; #ifdef _WIN32 size_t committed_size = 0; #endif