summaryrefslogtreecommitdiff
path: root/Source/Core/Common/MemArenaUnix.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/Common/MemArenaUnix.cpp')
-rw-r--r--Source/Core/Common/MemArenaUnix.cpp53
1 files changed, 32 insertions, 21 deletions
diff --git a/Source/Core/Common/MemArenaUnix.cpp b/Source/Core/Common/MemArenaUnix.cpp
index 63465a5e22..1743c2ace0 100644
--- a/Source/Core/Common/MemArenaUnix.cpp
+++ b/Source/Core/Common/MemArenaUnix.cpp
@@ -22,6 +22,9 @@
namespace Common
{
+MemArena::MemArena() = default;
+MemArena::~MemArena() = default;
+
void MemArena::GrabSHMSegment(size_t size)
{
const std::string file_name = "/dolphin-emu." + std::to_string(getpid());
@@ -41,35 +44,18 @@ void MemArena::ReleaseSHMSegment()
close(fd);
}
-void* MemArena::CreateView(s64 offset, size_t size, void* base)
+void* MemArena::CreateView(s64 offset, size_t size)
{
- void* retval = mmap(base, size, PROT_READ | PROT_WRITE,
- MAP_SHARED | ((base == nullptr) ? 0 : MAP_FIXED), fd, offset);
-
- if (retval == MAP_FAILED)
- {
- NOTICE_LOG_FMT(MEMMAP, "mmap failed");
- return nullptr;
- }
- else
- {
- return retval;
- }
+ return MapInMemoryRegion(offset, size, nullptr);
}
void MemArena::ReleaseView(void* view, size_t size)
{
- munmap(view, size);
+ UnmapFromMemoryRegion(view, size);
}
-u8* MemArena::FindMemoryBase()
+u8* MemArena::ReserveMemoryRegion(size_t memory_size)
{
-#if _ARCH_32
- const size_t memory_size = 0x31000000;
-#else
- const size_t memory_size = 0x400000000;
-#endif
-
const int flags = MAP_ANON | MAP_PRIVATE;
void* base = mmap(nullptr, memory_size, PROT_NONE, flags, -1, 0);
if (base == MAP_FAILED)
@@ -80,4 +66,29 @@ u8* MemArena::FindMemoryBase()
munmap(base, memory_size);
return static_cast<u8*>(base);
}
+
+void MemArena::ReleaseMemoryRegion()
+{
+}
+
+void* MemArena::MapInMemoryRegion(s64 offset, size_t size, void* base)
+{
+ void* retval = mmap(base, size, PROT_READ | PROT_WRITE,
+ MAP_SHARED | ((base == nullptr) ? 0 : MAP_FIXED), fd, offset);
+
+ if (retval == MAP_FAILED)
+ {
+ NOTICE_LOG_FMT(MEMMAP, "mmap failed");
+ return nullptr;
+ }
+ else
+ {
+ return retval;
+ }
+}
+
+void MemArena::UnmapFromMemoryRegion(void* view, size_t size)
+{
+ munmap(view, size);
+}
} // namespace Common