< prev index next >

src/hotspot/share/code/compiledMethod.cpp

Print this page

        

*** 23,33 **** */ #include "precompiled.hpp" #include "code/compiledIC.hpp" #include "code/compiledMethod.inline.hpp" - #include "code/exceptionHandlerTable.hpp" #include "code/scopeDesc.hpp" #include "code/codeCache.hpp" #include "code/icBuffer.hpp" #include "gc/shared/barrierSet.hpp" #include "gc/shared/gcBehaviours.hpp" --- 23,32 ----
*** 36,49 **** #include "logging/logTag.hpp" #include "memory/resourceArea.hpp" #include "oops/methodData.hpp" #include "oops/method.inline.hpp" #include "prims/methodHandles.hpp" - #include "runtime/deoptimization.hpp" #include "runtime/handles.inline.hpp" #include "runtime/mutexLocker.hpp" - #include "runtime/sharedRuntime.hpp" CompiledMethod::CompiledMethod(Method* method, const char* name, CompilerType type, const CodeBlobLayout& layout, int frame_complete_offset, int frame_size, ImmutableOopMapSet* oop_maps, bool caller_must_gc_arguments) : CodeBlob(name, type, layout, frame_complete_offset, frame_size, oop_maps, caller_must_gc_arguments), --- 35,46 ----
*** 639,688 **** os::is_readable_pointer(method) && os::is_readable_pointer(method->constants()) && os::is_readable_pointer(method->signature()); } - address CompiledMethod::continuation_for_implicit_exception(address pc, bool for_div0_check) { - // Exception happened outside inline-cache check code => we are inside - // an active nmethod => use cpc to determine a return address - int exception_offset = pc - code_begin(); - int cont_offset = ImplicitExceptionTable(this).continuation_offset( exception_offset ); - #ifdef ASSERT - if (cont_offset == 0) { - Thread* thread = Thread::current(); - ResetNoHandleMark rnm; // Might be called from LEAF/QUICK ENTRY - HandleMark hm(thread); - ResourceMark rm(thread); - CodeBlob* cb = CodeCache::find_blob(pc); - assert(cb != NULL && cb == this, ""); - ttyLocker ttyl; - tty->print_cr("implicit exception happened at " INTPTR_FORMAT, p2i(pc)); - print(); - method()->print_codes(); - print_code(); - print_pcs(); - } - #endif - if (cont_offset == 0) { - // Let the normal error handling report the exception - return NULL; - } - if (cont_offset == exception_offset) { - #if INCLUDE_JVMCI - Deoptimization::DeoptReason deopt_reason = for_div0_check ? Deoptimization::Reason_div0_check : Deoptimization::Reason_null_check; - JavaThread *thread = JavaThread::current(); - thread->set_jvmci_implicit_exception_pc(pc); - thread->set_pending_deoptimization(Deoptimization::make_trap_request(deopt_reason, - Deoptimization::Action_reinterpret)); - return (SharedRuntime::deopt_blob()->implicit_exception_uncommon_trap()); - #else - ShouldNotReachHere(); - #endif - } - return code_begin() + cont_offset; - } - class HasEvolDependency : public MetadataClosure { bool _has_evol_dependency; public: HasEvolDependency() : _has_evol_dependency(false) {} void do_metadata(Metadata* md) { --- 636,645 ----
< prev index next >