Move super class verification to class linker

Verify super classes in the class linker and chain exceptions when super
class verification fails. Add support for dumping chained exceptions to
Throwable::Dump. Improve verifier error detail messages.

Fixes problem where super class verification would leave a pending
exception that would be tripped over elsewhere.

Change-Id: I3ca850fc66674c8601132d7ec40bebbf9c108ae3
diff --git a/src/dex_verifier_test.cc b/src/dex_verifier_test.cc
index 379e8c4..51fb1bc 100644
--- a/src/dex_verifier_test.cc
+++ b/src/dex_verifier_test.cc
@@ -33,7 +33,8 @@
     Class* klass = class_linker_->FindSystemClass(descriptor.c_str());
 
     // Verify the class
-    ASSERT_TRUE(DexVerifier::VerifyClass(klass));
+    std::string error_msg;
+    ASSERT_TRUE(DexVerifier::VerifyClass(klass, error_msg)) << error_msg;
   }
 
   void VerifyDexFile(const DexFile* dex, ClassLoader* class_loader) {
@@ -55,7 +56,8 @@
 TEST_F(DexVerifierTest, IntMath) {
   SirtRef<ClassLoader> class_loader(LoadDex("IntMath"));
   Class* klass = class_linker_->FindClass("LIntMath;", class_loader.get());
-  ASSERT_TRUE(DexVerifier::VerifyClass(klass));
+  std::string error_msg;
+  ASSERT_TRUE(DexVerifier::VerifyClass(klass, error_msg)) << error_msg;
 }
 
 TEST_F(DexVerifierTest, RegTypes_Primitives) {