Add handler for printing java stack traces for compiled code SIGSEGV.

Added a new FaultHandler which attempts to print a java stack trace
when a SIGSEGV occurse in generated code. This should help debugging
compiler and GC related heap corruption.

Bug: 13725693
Bug: 12934910

Change-Id: Id54d83ea180c222eb86d449c61926e83f0b026ad
diff --git a/runtime/runtime.cc b/runtime/runtime.cc
index f016189..3e3b5e4 100644
--- a/runtime/runtime.cc
+++ b/runtime/runtime.cc
@@ -77,6 +77,7 @@
 
 namespace art {
 
+static constexpr bool kEnableJavaStackTraceHandler = true;
 Runtime* Runtime::instance_ = NULL;
 
 Runtime::Runtime()
@@ -523,12 +524,11 @@
 
   if (options->explicit_checks_ != (ParsedOptions::kExplicitSuspendCheck |
         ParsedOptions::kExplicitNullCheck |
-        ParsedOptions::kExplicitStackOverflowCheck)) {
-    // Initialize the fault manager.
+        ParsedOptions::kExplicitStackOverflowCheck) || kEnableJavaStackTraceHandler) {
     fault_manager.Init();
 
-    // These need to be in a specific order.  The null point check must be
-    // the last in the list.
+    // These need to be in a specific order.  The null point check handler must be
+    // after the suspend check and stack overflow check handlers.
     if ((options->explicit_checks_ & ParsedOptions::kExplicitSuspendCheck) == 0) {
       suspend_handler_ = new SuspensionHandler(&fault_manager);
     }
@@ -540,6 +540,10 @@
     if ((options->explicit_checks_ & ParsedOptions::kExplicitNullCheck) == 0) {
       null_pointer_handler_ = new NullPointerHandler(&fault_manager);
     }
+
+    if (kEnableJavaStackTraceHandler) {
+      new JavaStackTraceHandler(&fault_manager);
+    }
   }
 
   heap_ = new gc::Heap(options->heap_initial_size_,