If a card table or mark stack allocation fails, dump /proc/self/maps.

Change-Id: I075d3029be52af8568ec6862a4c5f32443971861
diff --git a/src/mark_stack.cc b/src/mark_stack.cc
index 53a342b..b61597b 100644
--- a/src/mark_stack.cc
+++ b/src/mark_stack.cc
@@ -7,6 +7,7 @@
 #include "UniquePtr.h"
 #include "globals.h"
 #include "logging.h"
+#include "utils.h"
 
 namespace art {
 
@@ -19,8 +20,13 @@
 void MarkStack::Init() {
   size_t length = 64 * MB;
   mem_map_.reset(MemMap::MapAnonymous("dalvik-mark-stack", NULL, length, PROT_READ | PROT_WRITE));
-  CHECK(mem_map_.get() != NULL) << "MemMap::Map() failed; aborting";
+  if (mem_map_.get() == NULL) {
+    std::string maps;
+    ReadFileToString("/proc/self/maps", &maps);
+    LOG(FATAL) << "couldn't allocate mark stack\n" << maps;
+  }
   byte* addr = mem_map_->GetAddress();
+  CHECK(addr != NULL);
   base_ = reinterpret_cast<const Object**>(addr);
   limit_ = reinterpret_cast<const Object**>(addr + length);
   ptr_ = reinterpret_cast<Object const**>(addr);