ART: Modify --abort-on-hard-verifier-error

Add --no-abort-on-hard-verifier-error to turn off the behavior.

Use FATAL_WITHOUT_ABORT and abort() instead of LOG(FATAL) to avoid
multiple printouts of stacks. Just shutting down thread pools still
leads to three redundant stack dumps.

Bug: 36902714
Test: m
Change-Id: I35fef23fb36567b0d1deb7f16c2a2b43c3af47e8
diff --git a/compiler/driver/compiler_driver.cc b/compiler/driver/compiler_driver.cc
index 341ca59..756481d 100644
--- a/compiler/driver/compiler_driver.cc
+++ b/compiler/driver/compiler_driver.cc
@@ -924,8 +924,11 @@
   VLOG(compiler) << "Verify: " << GetMemoryUsageString(false);
 
   if (had_hard_verifier_failure_ && GetCompilerOptions().AbortOnHardVerifierFailure()) {
-    LOG(FATAL) << "Had a hard failure verifying all classes, and was asked to abort in such "
-               << "situations. Please check the log.";
+    // Avoid dumping threads. Even if we shut down the thread pools, there will still be three
+    // instances of this thread's stack.
+    LOG(FATAL_WITHOUT_ABORT) << "Had a hard failure verifying all classes, and was asked to abort "
+                             << "in such situations. Please check the log.";
+    abort();
   }
 
   if (compiler_options_->IsAnyCompilationEnabled()) {