AArch64: Add memory allocation in low 4GB
MAP_32BIT is implemented for only x86_64. Other 64bit platforms
don't have an equivalent.
This is a unsophisticated implemention of a scheme using msync and
MAP_FIXED to reproduce the functionality of MAP_32BIT.
Adds MAP_FIXED to RemapAtEnd, as the address used for the new mmap
doesn't get located correctly without it on aarch64.
Add MemMap::next_mem_pos_ to store last position. Add a safety assert.
Change-Id: I61871ff7fc327554c43e1d7f448c3d376490f1ea
diff --git a/runtime/mem_map.h b/runtime/mem_map.h
index e39c10e..4255d17 100644
--- a/runtime/mem_map.h
+++ b/runtime/mem_map.h
@@ -116,6 +116,10 @@
size_t base_size_; // Length of mapping. May be changed by RemapAtEnd (ie Zygote).
int prot_; // Protection of the map.
+#if defined(__LP64__) && !defined(__x86_64__)
+ static uintptr_t next_mem_pos_; // next memory location to check for low_4g extent
+#endif
+
friend class MemMapTest; // To allow access to base_begin_ and base_size_.
};
std::ostream& operator<<(std::ostream& os, const MemMap& mem_map);