From c751fdcc9491c1b60c3db517fbc41bb98e92441f Mon Sep 17 00:00:00 2001 From: Mathieu Chartier Date: Sun, 30 Mar 2014 15:25:44 -0700 Subject: 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 --- runtime/runtime.cc | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'runtime/runtime.cc') 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 @@ bool Runtime::Init(const Options& raw_options, bool ignore_unrecognized) { 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 @@ bool Runtime::Init(const Options& raw_options, bool ignore_unrecognized) { 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_, -- cgit v1.1