Separate oat from image

Change-Id: If2abdb99826ead14e3465d90ba2acffd89709389
diff --git a/src/heap.cc b/src/heap.cc
index 015f638..2051051 100644
--- a/src/heap.cc
+++ b/src/heap.cc
@@ -74,7 +74,9 @@
       LOG(FATAL) << "Failed to create space from " << boot_image_file_name;
     }
     spaces_.push_back(boot_space);
-    requested_base = boot_space->GetBase() + RoundUp(boot_space->Size(), kPageSize);
+    byte* oat_limit_addr = boot_space->GetImageHeader().GetOatLimitAddr();
+    requested_base = reinterpret_cast<byte*>(RoundUp(reinterpret_cast<uintptr_t>(oat_limit_addr),
+                                                     kPageSize));
   }
 
   std::vector<Space*> image_spaces;
@@ -85,7 +87,9 @@
     }
     image_spaces.push_back(space);
     spaces_.push_back(space);
-    requested_base = space->GetBase() + RoundUp(space->Size(), kPageSize);
+    byte* oat_limit_addr = space->GetImageHeader().GetOatLimitAddr();
+    requested_base = reinterpret_cast<byte*>(RoundUp(reinterpret_cast<uintptr_t>(oat_limit_addr),
+                                                     kPageSize));
   }
 
   Space* space = Space::Create(initial_size, maximum_size, requested_base);