< prev index next >

src/hotspot/share/runtime/sharedRuntime.cpp

Print this page

        

*** 464,473 **** --- 464,477 ---- // JVMCI's ExceptionHandlerStub expects the thread local exception PC to be clear // and other exception handler continuations do not read it thread->set_exception_pc(NULL); #endif // INCLUDE_JVMCI + if (Continuation::is_return_barrier_entry(return_address)) { + return StubRoutines::cont_returnBarrierExc(); + } + // The fastest case first CodeBlob* blob = CodeCache::find_blob(return_address); CompiledMethod* nm = (blob != NULL) ? blob->as_compiled_method_or_null() : NULL; if (nm != NULL) { // Set flag if return address is a method handle call site.
*** 505,514 **** --- 509,519 ---- guarantee(!VtableStubs::contains(return_address), "NULL exceptions in vtables should have been handled already!"); #ifndef PRODUCT { ResourceMark rm; tty->print_cr("No exception handler found for exception at " INTPTR_FORMAT " - potential problems:", p2i(return_address)); + os::print_location(tty, (intptr_t)return_address); tty->print_cr("a) exception happened in (new?) code stubs/buffers that is not handled here"); tty->print_cr("b) other problem"); } #endif // PRODUCT
*** 530,540 **** // Should be an nmethod guarantee(cb != NULL && cb->is_compiled(), "safepoint polling: pc must refer to an nmethod"); // Look up the relocation information assert(((CompiledMethod*)cb)->is_at_poll_or_poll_return(pc), ! "safepoint polling: type must be poll"); #ifdef ASSERT if (!((NativeInstruction*)pc)->is_safepoint_poll()) { tty->print_cr("bad pc: " PTR_FORMAT, p2i(pc)); Disassembler::decode(cb); --- 535,545 ---- // Should be an nmethod guarantee(cb != NULL && cb->is_compiled(), "safepoint polling: pc must refer to an nmethod"); // Look up the relocation information assert(((CompiledMethod*)cb)->is_at_poll_or_poll_return(pc), ! "safepoint polling: type must be poll at pc " INTPTR_FORMAT, p2i(pc)); #ifdef ASSERT if (!((NativeInstruction*)pc)->is_safepoint_poll()) { tty->print_cr("bad pc: " PTR_FORMAT, p2i(pc)); Disassembler::decode(cb);
*** 697,713 **** } #endif if (t == NULL) { ttyLocker ttyl; ! tty->print_cr("MISSING EXCEPTION HANDLER for pc " INTPTR_FORMAT " and handler bci %d", p2i(ret_pc), handler_bci); tty->print_cr(" Exception:"); exception->print(); tty->cr(); tty->print_cr(" Compiled exception table :"); table.print(); ! nm->print_code(); guarantee(false, "missing exception handler"); return NULL; } return nm->code_begin() + t->pco(); --- 702,719 ---- } #endif if (t == NULL) { ttyLocker ttyl; ! tty->print_cr("MISSING EXCEPTION HANDLER for pc " INTPTR_FORMAT " and handler bci %d, catch_pco: %d", p2i(ret_pc), handler_bci, catch_pco); tty->print_cr(" Exception:"); exception->print(); tty->cr(); tty->print_cr(" Compiled exception table :"); table.print(); ! nm->print(); ! // nm->print_code(); guarantee(false, "missing exception handler"); return NULL; } return nm->code_begin() + t->pco();
*** 2750,2760 **** ttyLocker ttyl; entry->print_adapter_on(tty); tty->print_cr("i2c argument handler #%d for: %s %s %s (%d bytes generated)", _adapters->number_of_entries(), (method->is_static() ? "static" : "receiver"), method->signature()->as_C_string(), fingerprint->as_string(), insts_size); ! tty->print_cr("c2i argument handler starts at %p", entry->get_c2i_entry()); if (Verbose || PrintStubCode) { address first_pc = entry->base_address(); if (first_pc != NULL) { Disassembler::decode(first_pc, first_pc + insts_size); tty->cr(); --- 2756,2766 ---- ttyLocker ttyl; entry->print_adapter_on(tty); tty->print_cr("i2c argument handler #%d for: %s %s %s (%d bytes generated)", _adapters->number_of_entries(), (method->is_static() ? "static" : "receiver"), method->signature()->as_C_string(), fingerprint->as_string(), insts_size); ! tty->print_cr("c2i argument handler starts at " INTPTR_FORMAT, p2i(entry->get_c2i_entry())); if (Verbose || PrintStubCode) { address first_pc = entry->base_address(); if (first_pc != NULL) { Disassembler::decode(first_pc, first_pc + insts_size); tty->cr();
*** 3050,3059 **** --- 3056,3074 ---- // results *arg_size = cnt; return regs; } + JRT_LEAF(jlong, SharedRuntime::continuation_getFP(JavaThread* thread) ) + RegisterMap reg_map2(thread); + assert(false, ""); + frame stubFrame = thread->last_frame(); + // Caller-frame is a compiled frame + frame callerFrame = stubFrame.sender(&reg_map2); + return (jlong) callerFrame.real_fp(); + JRT_END + // OSR Migration Code // // This code is used convert interpreter frames into compiled frames. It is // called from very start of a compiled OSR nmethod. A temp array is // allocated to hold the interesting bits of the interpreter frame. All
*** 3200,3210 **** CompiledMethod* nm = NULL; int count = 1; assert(fr.is_java_frame(), "Must start on Java frame"); ! while (true) { Method* method = NULL; bool found = false; if (fr.is_interpreted_frame()) { method = fr.interpreter_frame_method(); if (method != NULL && method->has_reserved_stack_access()) { --- 3215,3229 ---- CompiledMethod* nm = NULL; int count = 1; assert(fr.is_java_frame(), "Must start on Java frame"); ! RegisterMap map(JavaThread::current(), false, true); // don't update; walk continuations ! for (; !fr.is_first_frame(); fr = fr.sender(&map)) { ! if (!fr.is_java_frame()) ! continue; ! Method* method = NULL; bool found = false; if (fr.is_interpreted_frame()) { method = fr.interpreter_frame_method(); if (method != NULL && method->has_reserved_stack_access()) {
*** 3234,3248 **** if (event.should_commit()) { event.set_method(method); event.commit(); } } - if (fr.is_first_java_frame()) { - break; - } else { - fr = fr.java_sender(); - } } return activation; } void SharedRuntime::on_slowpath_allocation_exit(JavaThread* thread) { --- 3253,3262 ----
< prev index next >