aboutsummaryrefslogtreecommitdiff
path: root/src/dolphin
diff options
context:
space:
mode:
Diffstat (limited to 'src/dolphin')
-rw-r--r--src/dolphin/CodeBlock.h29
-rw-r--r--src/dolphin/MemoryUtil.cpp182
-rw-r--r--src/dolphin/MemoryUtil.h22
3 files changed, 1 insertions, 232 deletions
diff --git a/src/dolphin/CodeBlock.h b/src/dolphin/CodeBlock.h
index 1434297..31a8d93 100644
--- a/src/dolphin/CodeBlock.h
+++ b/src/dolphin/CodeBlock.h
@@ -49,15 +49,6 @@ public:
CodeBlock(CodeBlock&&) = delete;
CodeBlock& operator=(CodeBlock&&) = delete;
- // Call this before you generate any code.
- void AllocCodeSpace(size_t size)
- {
- region_size = size;
- total_region_size = size;
- region = static_cast<u8*>(Common::AllocateExecutableMemory(total_region_size));
- T::SetCodePtr(region);
- }
-
// Always clear code space with breakpoints, so that if someone accidentally executes
// uninitialized, it just breaks into the debugger.
void ClearCodeSpace()
@@ -66,26 +57,8 @@ public:
ResetCodePtr();
}
- // Call this when shutting down. Don't rely on the destructor, even though it'll do the job.
- void FreeCodeSpace()
- {
- ASSERT(!m_is_child);
- Common::FreeMemoryPages(region, total_region_size);
- region = nullptr;
- region_size = 0;
- total_region_size = 0;
- for (CodeBlock* child : m_children)
- {
- child->region = nullptr;
- child->region_size = 0;
- child->total_region_size = 0;
- }
- }
-
bool IsInSpace(const u8* ptr) const { return ptr >= region && ptr < (region + region_size); }
- // Cannot currently be undone. Will write protect the entire code region.
- // Start over if you need to change the code (call FreeCodeSpace(), AllocCodeSpace()).
- void WriteProtect() { Common::WriteProtectMemory(region, region_size, true); }
+
void ResetCodePtr() { T::SetCodePtr(region); }
size_t GetSpaceLeft() const
{
diff --git a/src/dolphin/MemoryUtil.cpp b/src/dolphin/MemoryUtil.cpp
deleted file mode 100644
index 7273a8a..0000000
--- a/src/dolphin/MemoryUtil.cpp
+++ /dev/null
@@ -1,182 +0,0 @@
-// Copyright 2008 Dolphin Emulator Project
-// Licensed under GPLv2+
-// Refer to the license_dolphin.txt file included.
-
-#include <cstddef>
-#include <cstdlib>
-#include <string>
-
-#include "../types.h"
-#include "CommonFuncs.h"
-#include "Log.h"
-
-#ifdef _WIN32
-#include <windows.h>
-//#include "Common/StringUtil.h"
-#else
-#include <stdio.h>
-#include <sys/mman.h>
-#include <sys/types.h>
-#if defined __APPLE__ || defined __FreeBSD__ || defined __OpenBSD__
-#include <sys/sysctl.h>
-#elif defined __HAIKU__
-#include <OS.h>
-#else
-#include <sys/sysinfo.h>
-#endif
-#endif
-
-namespace Common
-{
-// This is purposely not a full wrapper for virtualalloc/mmap, but it
-// provides exactly the primitive operations that Dolphin needs.
-
-void* AllocateExecutableMemory(size_t size)
-{
-#if defined(_WIN32)
- void* ptr = VirtualAlloc(nullptr, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
-#else
- void* ptr =
- mmap(nullptr, size, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_ANON | MAP_PRIVATE, -1, 0);
-
- if (ptr == MAP_FAILED)
- ptr = nullptr;
-#endif
-
- if (ptr == nullptr)
- PanicAlert("Failed to allocate executable memory");
-
- return ptr;
-}
-
-void* AllocateMemoryPages(size_t size)
-{
-#ifdef _WIN32
- void* ptr = VirtualAlloc(nullptr, size, MEM_COMMIT, PAGE_READWRITE);
-#else
- void* ptr = mmap(nullptr, size, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0);
-
- if (ptr == MAP_FAILED)
- ptr = nullptr;
-#endif
-
- if (ptr == nullptr)
- PanicAlert("Failed to allocate raw memory");
-
- return ptr;
-}
-
-void* AllocateAlignedMemory(size_t size, size_t alignment)
-{
-#ifdef _WIN32
- void* ptr = _aligned_malloc(size, alignment);
-#else
- void* ptr = nullptr;
- if (posix_memalign(&ptr, alignment, size) != 0)
- ERROR_LOG(MEMMAP, "Failed to allocate aligned memory");
-#endif
-
- if (ptr == nullptr)
- PanicAlert("Failed to allocate aligned memory");
-
- return ptr;
-}
-
-void FreeMemoryPages(void* ptr, size_t size)
-{
- if (ptr)
- {
-#ifdef _WIN32
- if (!VirtualFree(ptr, 0, MEM_RELEASE))
- PanicAlert("FreeMemoryPages failed!\nVirtualFree: %s", GetLastErrorString().c_str());
-#else
- if (munmap(ptr, size) != 0)
- PanicAlert("FreeMemoryPages failed!\nmunmap: %s", LastStrerrorString().c_str());
-#endif
- }
-}
-
-void FreeAlignedMemory(void* ptr)
-{
- if (ptr)
- {
-#ifdef _WIN32
- _aligned_free(ptr);
-#else
- free(ptr);
-#endif
- }
-}
-
-void ReadProtectMemory(void* ptr, size_t size)
-{
-#ifdef _WIN32
- DWORD oldValue;
- if (!VirtualProtect(ptr, size, PAGE_NOACCESS, &oldValue))
- PanicAlert("ReadProtectMemory failed!\nVirtualProtect: %s", GetLastErrorString().c_str());
-#else
- if (mprotect(ptr, size, PROT_NONE) != 0)
- PanicAlert("ReadProtectMemory failed!\nmprotect: %s", LastStrerrorString().c_str());
-#endif
-}
-
-void WriteProtectMemory(void* ptr, size_t size, bool allowExecute)
-{
-#ifdef _WIN32
- DWORD oldValue;
- if (!VirtualProtect(ptr, size, allowExecute ? PAGE_EXECUTE_READ : PAGE_READONLY, &oldValue))
- PanicAlert("WriteProtectMemory failed!\nVirtualProtect: %s", GetLastErrorString().c_str());
-#else
- if (mprotect(ptr, size, allowExecute ? (PROT_READ | PROT_EXEC) : PROT_READ) != 0)
- PanicAlert("WriteProtectMemory failed!\nmprotect: %s", LastStrerrorString().c_str());
-#endif
-}
-
-void UnWriteProtectMemory(void* ptr, size_t size, bool allowExecute)
-{
-#ifdef _WIN32
- DWORD oldValue;
- if (!VirtualProtect(ptr, size, allowExecute ? PAGE_EXECUTE_READWRITE : PAGE_READWRITE, &oldValue))
- PanicAlert("UnWriteProtectMemory failed!\nVirtualProtect: %s", GetLastErrorString().c_str());
-#else
- if (mprotect(ptr, size,
- allowExecute ? (PROT_READ | PROT_WRITE | PROT_EXEC) : PROT_WRITE | PROT_READ) != 0)
- {
- PanicAlert("UnWriteProtectMemory failed!\nmprotect: %s", LastStrerrorString().c_str());
- }
-#endif
-}
-
-size_t MemPhysical()
-{
-#ifdef _WIN32
- MEMORYSTATUSEX memInfo;
- memInfo.dwLength = sizeof(MEMORYSTATUSEX);
- GlobalMemoryStatusEx(&memInfo);
- return memInfo.ullTotalPhys;
-#elif defined __APPLE__ || defined __FreeBSD__ || defined __OpenBSD__
- int mib[2];
- size_t physical_memory;
- mib[0] = CTL_HW;
-#ifdef __APPLE__
- mib[1] = HW_MEMSIZE;
-#elif defined __FreeBSD__
- mib[1] = HW_REALMEM;
-#elif defined __OpenBSD__
- mib[1] = HW_PHYSMEM;
-#endif
- size_t length = sizeof(size_t);
- sysctl(mib, 2, &physical_memory, &length, NULL, 0);
- return physical_memory;
-#elif defined __HAIKU__
- system_info sysinfo;
- get_system_info(&sysinfo);
- return static_cast<size_t>(sysinfo.max_pages * B_PAGE_SIZE);
-#else
- struct sysinfo memInfo;
- sysinfo(&memInfo);
- return (size_t)memInfo.totalram * memInfo.mem_unit;
-#endif
-}
-
-} // namespace Common
diff --git a/src/dolphin/MemoryUtil.h b/src/dolphin/MemoryUtil.h
deleted file mode 100644
index 607b7a8..0000000
--- a/src/dolphin/MemoryUtil.h
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright 2008 Dolphin Emulator Project
-// Licensed under GPLv2+
-// Refer to the license_dolphin.txt file included.
-
-#pragma once
-
-#include <cstddef>
-#include <string>
-
-namespace Common
-{
-void* AllocateExecutableMemory(size_t size);
-void* AllocateMemoryPages(size_t size);
-void FreeMemoryPages(void* ptr, size_t size);
-void* AllocateAlignedMemory(size_t size, size_t alignment);
-void FreeAlignedMemory(void* ptr);
-void ReadProtectMemory(void* ptr, size_t size);
-void WriteProtectMemory(void* ptr, size_t size, bool executable = false);
-void UnWriteProtectMemory(void* ptr, size_t size, bool allowExecute = false);
-size_t MemPhysical();
-
-} // namespace Common