First pass of ImageWriter

Change-Id: I4f189587a2e3cc1c265200b8fa64321b299947eb
diff --git a/src/mark_stack.cc b/src/mark_stack.cc
index 47aaf0c..19dc1c1 100644
--- a/src/mark_stack.cc
+++ b/src/mark_stack.cc
@@ -22,13 +22,14 @@
 
 bool MarkStack::Init(size_t maximum_size) {
   size_t length = 64 * MB;
-  void* addr = mmap(NULL, length, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
-  if (addr == MAP_FAILED) {
+  mem_map_.reset(MemMap::Map(length, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS));
+  if (mem_map_ == NULL) {
     PLOG(ERROR) << "mmap failed";
     return false;
   }
+  byte* addr = mem_map_->GetAddress();
   base_ = reinterpret_cast<const Object**>(addr);
-  limit_ = reinterpret_cast<const Object**>((byte*)addr + length);
+  limit_ = reinterpret_cast<const Object**>(addr + length);
   ptr_ = reinterpret_cast<Object const**>(addr);
   int result = madvise(addr, length, MADV_DONTNEED);
   if (result == -1) {
@@ -37,11 +38,6 @@
   return true;
 }
 
-MarkStack::~MarkStack() {
-  int result = munmap((void*)base_, limit_ - base_);
-  if (result == -1) {
-    PLOG(WARNING) << "munmap failed";
-  }
-}
+MarkStack::~MarkStack() {}
 
 }  // namespace art