summaryrefslogtreecommitdiff
path: root/Source/Core/Common/MemArenaAndroid.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/Common/MemArenaAndroid.cpp')
-rw-r--r--Source/Core/Common/MemArenaAndroid.cpp25
1 files changed, 23 insertions, 2 deletions
diff --git a/Source/Core/Common/MemArenaAndroid.cpp b/Source/Core/Common/MemArenaAndroid.cpp
index bcba64e1e1..81c27b7677 100644
--- a/Source/Core/Common/MemArenaAndroid.cpp
+++ b/Source/Core/Common/MemArenaAndroid.cpp
@@ -123,9 +123,13 @@ void MemArena::ReleaseMemoryRegion()
}
}
-void* MemArena::MapInMemoryRegion(s64 offset, size_t size, void* base)
+void* MemArena::MapInMemoryRegion(s64 offset, size_t size, void* base, bool writeable)
{
- void* retval = mmap(base, size, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_FIXED, m_shm_fd, offset);
+ int prot = PROT_READ;
+ if (writeable)
+ prot |= PROT_WRITE;
+
+ void* retval = mmap(base, size, prot, MAP_SHARED | MAP_FIXED, m_shm_fd, offset);
if (retval == MAP_FAILED)
{
NOTICE_LOG_FMT(MEMMAP, "mmap failed");
@@ -137,6 +141,18 @@ void* MemArena::MapInMemoryRegion(s64 offset, size_t size, void* base)
}
}
+bool MemArena::ChangeMappingProtection(void* view, size_t size, bool writeable)
+{
+ int prot = PROT_READ;
+ if (writeable)
+ prot |= PROT_WRITE;
+
+ int retval = mprotect(view, size, prot);
+ if (retval != 0)
+ NOTICE_LOG_FMT(MEMMAP, "mprotect failed");
+ return retval == 0;
+}
+
void MemArena::UnmapFromMemoryRegion(void* view, size_t size)
{
void* retval = mmap(view, size, PROT_NONE, MAP_SHARED | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
@@ -144,6 +160,11 @@ void MemArena::UnmapFromMemoryRegion(void* view, size_t size)
NOTICE_LOG_FMT(MEMMAP, "mmap failed");
}
+size_t MemArena::GetPageSize() const
+{
+ return sysconf(_SC_PAGESIZE);
+}
+
LazyMemoryRegion::LazyMemoryRegion() = default;
LazyMemoryRegion::~LazyMemoryRegion()