(reland) Add GoldfishAddressSpaceBlock::memoryMap
To abstract from the platform we build for.
off64_t is replaced with uint64_t to fix mac builds.
Bug: 141385612
Test: build, boot, host side test
Change-Id: I306d801f575c2e46feaf1af359de46042e54d18a
Signed-off-by: Roman Kiryanov <rkir@google.com>
diff --git a/shared/OpenglCodecCommon/goldfish_address_space.h b/shared/OpenglCodecCommon/goldfish_address_space.h
index 4fa61b0..f02fa2e 100644
--- a/shared/OpenglCodecCommon/goldfish_address_space.h
+++ b/shared/OpenglCodecCommon/goldfish_address_space.h
@@ -83,6 +83,7 @@
void *guestPtr() const;
void replace(GoldfishAddressSpaceBlock *other);
void release();
+ static int memoryMap(void *addr, size_t len, address_space_handle_t fd, uint64_t off, void** dst);
static void memoryUnmap(void *ptr, size_t size);
private:
diff --git a/shared/OpenglCodecCommon/goldfish_address_space_android.impl b/shared/OpenglCodecCommon/goldfish_address_space_android.impl
index c3a9cec..90fc097 100644
--- a/shared/OpenglCodecCommon/goldfish_address_space_android.impl
+++ b/shared/OpenglCodecCommon/goldfish_address_space_android.impl
@@ -217,13 +217,14 @@
::abort();
}
- void *result = ::mmap64(NULL, m_size, PROT_WRITE, MAP_SHARED, m_handle, m_offset);
- if (result == MAP_FAILED) {
+ void *result;
+ const int res = memoryMap(NULL, m_size, m_handle, m_offset, &result);
+ if (res) {
ALOGE("%s: host memory map failed with size 0x%llx "
"off 0x%llx errno %d\n",
__func__,
(unsigned long long)m_size,
- (unsigned long long)m_offset, errno);
+ (unsigned long long)m_offset, res);
return NULL;
} else {
m_mmaped_ptr = result;
@@ -268,6 +269,20 @@
m_size = 0;
}
+int GoldfishAddressSpaceBlock::memoryMap(void *addr,
+ size_t len,
+ address_space_handle_t fd,
+ uint64_t off,
+ void** dst) {
+ void* ptr = ::mmap64(addr, len, PROT_WRITE, MAP_SHARED, fd, off);
+ if (MAP_FAILED == ptr) {
+ return errno;
+ } else {
+ *dst = ptr;
+ return 0;
+ }
+}
+
void GoldfishAddressSpaceBlock::memoryUnmap(void *ptr, size_t size)
{
::munmap(ptr, size);
diff --git a/shared/OpenglCodecCommon/goldfish_address_space_host.impl b/shared/OpenglCodecCommon/goldfish_address_space_host.impl
index 2a54b9c..7d07d8b 100644
--- a/shared/OpenglCodecCommon/goldfish_address_space_host.impl
+++ b/shared/OpenglCodecCommon/goldfish_address_space_host.impl
@@ -180,6 +180,15 @@
m_size = 0;
}
+int GoldfishAddressSpaceBlock::memoryMap(void *addr,
+ size_t,
+ address_space_handle_t,
+ uint64_t,
+ void** dst) {
+ *dst = addr;
+ return 0;
+}
+
void GoldfishAddressSpaceBlock::memoryUnmap(void *ptr, size_t size) {}
GoldfishAddressSpaceHostMemoryAllocator::GoldfishAddressSpaceHostMemoryAllocator()