src/share/vm/c1/c1_Runtime1.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 7102657 Cdiff src/share/vm/c1/c1_Runtime1.cpp

src/share/vm/c1/c1_Runtime1.cpp

Print this page

        

*** 679,688 **** --- 679,705 ---- } else { ObjectSynchronizer::fast_exit(obj, lock->lock(), THREAD); } JRT_END + // Cf. OptoRuntime::deoptimize_caller_frame + JRT_ENTRY(void, Runtime1::deoptimize(JavaThread* thread)) + // Called from within the owner thread, so no need for safepoint + RegisterMap reg_map(thread, false); + frame stub_frame = thread->last_frame(); + assert(stub_frame.is_runtime_frame(), "sanity check"); + frame caller_frame = stub_frame.sender(&reg_map); + + // We are coming from a compiled method; check this is true. + assert(CodeCache::find_nmethod(caller_frame.pc()) != NULL, "sanity"); + + // Deoptimize the caller frame. + Deoptimization::deoptimize_frame(thread, caller_frame.id()); + + // Return to the now deoptimized frame. + JRT_END + static klassOop resolve_field_return_klass(methodHandle caller, int bci, TRAPS) { Bytecode_field field_access(caller, bci); // This can be static or non-static field access Bytecodes::Code code = field_access.code();
src/share/vm/c1/c1_Runtime1.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File