< prev index next >

src/hotspot/share/runtime/sharedRuntime.hpp

Print this page

*** 53,63 **** static bool resolve_sub_helper_internal(methodHandle callee_method, const frame& caller_frame, CompiledMethod* caller_nm, bool is_virtual, bool is_optimized, Handle receiver, CallInfo& call_info, Bytecodes::Code invoke_code, TRAPS); static methodHandle resolve_sub_helper(JavaThread *thread, bool is_virtual, ! bool is_optimized, TRAPS); // Shared stub locations static RuntimeStub* _wrong_method_blob; static RuntimeStub* _wrong_method_abstract_blob; --- 53,64 ---- static bool resolve_sub_helper_internal(methodHandle callee_method, const frame& caller_frame, CompiledMethod* caller_nm, bool is_virtual, bool is_optimized, Handle receiver, CallInfo& call_info, Bytecodes::Code invoke_code, TRAPS); static methodHandle resolve_sub_helper(JavaThread *thread, bool is_virtual, ! bool is_optimized, ! bool* caller_is_c1, TRAPS); // Shared stub locations static RuntimeStub* _wrong_method_blob; static RuntimeStub* _wrong_method_abstract_blob;
*** 321,354 **** // Resolves a call site- may patch in the destination of the call into the // compiled code. static methodHandle resolve_helper(JavaThread *thread, bool is_virtual, ! bool is_optimized, TRAPS); private: // deopt blob static void generate_deopt_blob(void); static bool handle_ic_miss_helper_internal(Handle receiver, CompiledMethod* caller_nm, const frame& caller_frame, methodHandle callee_method, Bytecodes::Code bc, CallInfo& call_info, ! bool& needs_ic_stub_refill, bool& is_optimized, TRAPS); public: static DeoptimizationBlob* deopt_blob(void) { return _deopt_blob; } // Resets a call-site in compiled code so it will get resolved again. ! static methodHandle reresolve_call_site(JavaThread *thread, bool& is_optimized, TRAPS); // In the code prolog, if the klass comparison fails, the inline cache // misses and the call site is patched to megamorphic ! static methodHandle handle_ic_miss_helper(JavaThread* thread, bool& is_optimized, TRAPS); // Find the method that called us. static methodHandle find_callee_method(JavaThread* thread, TRAPS); private: static Handle find_callee_info(JavaThread* thread, Bytecodes::Code& bc, CallInfo& callinfo, TRAPS); static Handle find_callee_info_helper(JavaThread* thread, --- 322,369 ---- // Resolves a call site- may patch in the destination of the call into the // compiled code. static methodHandle resolve_helper(JavaThread *thread, bool is_virtual, ! bool is_optimized, ! bool* caller_is_c1, TRAPS); private: // deopt blob static void generate_deopt_blob(void); static bool handle_ic_miss_helper_internal(Handle receiver, CompiledMethod* caller_nm, const frame& caller_frame, methodHandle callee_method, Bytecodes::Code bc, CallInfo& call_info, ! bool& needs_ic_stub_refill, bool& is_optimized, bool caller_is_c1, TRAPS); public: static DeoptimizationBlob* deopt_blob(void) { return _deopt_blob; } // Resets a call-site in compiled code so it will get resolved again. ! static methodHandle reresolve_call_site(JavaThread *thread, bool& is_optimized, bool& caller_is_c1, TRAPS); // In the code prolog, if the klass comparison fails, the inline cache // misses and the call site is patched to megamorphic ! static methodHandle handle_ic_miss_helper(JavaThread* thread, bool& is_optimized, bool& caller_is_c1, TRAPS); // Find the method that called us. static methodHandle find_callee_method(JavaThread* thread, TRAPS); + static address entry_for_handle_wrong_method(methodHandle callee_method, bool is_optimized, bool caller_is_c1) { + assert(callee_method->verified_code_entry() != NULL, "Jump to zero!"); + assert(callee_method->verified_value_code_entry() != NULL, "Jump to zero!"); + assert(callee_method->verified_value_ro_code_entry() != NULL, "Jump to zero!"); + if (caller_is_c1) { + return callee_method->verified_value_code_entry(); + } else if (is_optimized) { + return callee_method->verified_code_entry(); + } else { + return callee_method->verified_value_ro_code_entry(); + } + } + private: static Handle find_callee_info(JavaThread* thread, Bytecodes::Code& bc, CallInfo& callinfo, TRAPS); static Handle find_callee_info_helper(JavaThread* thread,
< prev index next >