Better verification: Detection of missing card marks and dead system weaks.

Added a few additional verification functions.

Verification of missing card marks. Checks that all objects on clean cards do not reference objects in live stack.

Verification of system weaks. Checks that all of the system weaks are live.

Verify objects seems to also be fixed now. It is however, rediculously slow and barely usable.

Change-Id: Ieb5765df59210faa8fdf937cadf6ee51532d8bcb
diff --git a/src/mark_sweep.h b/src/mark_sweep.h
index d1e3481..aaeb0ff 100644
--- a/src/mark_sweep.h
+++ b/src/mark_sweep.h
@@ -142,6 +142,16 @@
   void SweepSystemWeaks(bool swap_bitmaps)
       SHARED_LOCKS_REQUIRED(Locks::heap_bitmap_lock_);
 
+  static bool VerifyIsLiveCallback(const Object* obj, void* arg)
+      SHARED_LOCKS_REQUIRED(Locks::heap_bitmap_lock_);
+
+  void VerifySystemWeaks()
+      SHARED_LOCKS_REQUIRED(Locks::heap_bitmap_lock_);
+
+  // Verify that an object is live, either in a live bitmap or in the allocation stack.
+  void VerifyIsLive(const Object* obj)
+      SHARED_LOCKS_REQUIRED(Locks::heap_bitmap_lock_);
+
   template <typename Visitor>
   static void VisitObjectReferences(const Object* obj, const Visitor& visitor)
       SHARED_LOCKS_REQUIRED(Locks::heap_bitmap_lock_,