(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()