< prev index next >

src/share/vm/jvmci/jvmciCompiler.cpp

Print this page

        

*** 110,119 **** --- 110,128 ---- tty->print_cr(" in " JLONG_FORMAT " ms (compiled %d methods)", os::javaTimeMillis() - start, _methodsCompiled); } _bootstrapping = false; } + #define CHECK_ABORT THREAD); \ + if (HAS_PENDING_EXCEPTION) { \ + char buf[256]; \ + jio_snprintf(buf, 256, "Uncaught exception at %s:%d", __FILE__, __LINE__); \ + JVMCICompiler::abort_on_pending_exception(PENDING_EXCEPTION, buf); \ + return; \ + } \ + (void)(0 + void JVMCICompiler::compile_method(const methodHandle& method, int entry_bci, JVMCIEnv* env) { JVMCI_EXCEPTION_CONTEXT bool is_osr = entry_bci != InvocationEntryBci; if (_bootstrapping && is_osr) {
*** 148,172 **** // An uncaught exception was thrown during compilation. Generally these // should be handled by the Java code in some useful way but if they leak // through to here report them instead of dying or silently ignoring them. if (HAS_PENDING_EXCEPTION) { ! Handle throwable = PENDING_EXCEPTION; CLEAR_PENDING_EXCEPTION; ! JVMCIRuntime::call_printStackTrace(throwable, THREAD); ! if (HAS_PENDING_EXCEPTION) { ! CLEAR_PENDING_EXCEPTION; } // Something went wrong so disable compilation at this level method->set_not_compilable(CompLevel_full_optimization); } else { _methodsCompiled++; } } // Compilation entry point for methods void JVMCICompiler::compile_method(ciEnv* env, ciMethod* target, int entry_bci, DirectiveSet* directive) { ShouldNotReachHere(); } --- 157,203 ---- // An uncaught exception was thrown during compilation. Generally these // should be handled by the Java code in some useful way but if they leak // through to here report them instead of dying or silently ignoring them. if (HAS_PENDING_EXCEPTION) { ! Handle exception(THREAD, PENDING_EXCEPTION); CLEAR_PENDING_EXCEPTION; ! { ! ttyLocker ttyl; ! java_lang_Throwable::print_stack_trace(exception, tty); } // Something went wrong so disable compilation at this level method->set_not_compilable(CompLevel_full_optimization); } else { _methodsCompiled++; } } + /** + * Aborts the VM due to an unexpected exception. + */ + void JVMCICompiler::abort_on_pending_exception(Handle exception, const char* message, bool dump_core) { + Thread* THREAD = Thread::current(); + CLEAR_PENDING_EXCEPTION; + + { + ttyLocker ttyl; + tty->print_raw_cr(message); + java_lang_Throwable::print_stack_trace(exception, tty); + } + + // Give other aborting threads to also print their stack traces. + // This can be very useful when debugging class initialization + // failures. + assert(THREAD->is_Java_thread(), "compiler threads should be Java threads"); + const bool interruptible = true; + os::sleep(THREAD, 200, interruptible); + + vm_abort(dump_core); + } // Compilation entry point for methods void JVMCICompiler::compile_method(ciEnv* env, ciMethod* target, int entry_bci, DirectiveSet* directive) { ShouldNotReachHere(); }
< prev index next >