void CompiledStaticCall::verify() { // Verify call. NativeCall::verify(); if (os::is_MP()) { verify_alignment(); } // Verify stub. address stub = find_stub(); assert(stub != NULL, "no stub found for static call"); // Creation also verifies the object. NativeMovConstReg* method_holder = nativeMovConstReg_at(stub); NativeJump* jump = nativeJump_at(method_holder->next_instruction_address()); // Verify state. assert(is_clean() || is_call_to_compiled() || is_call_to_interpreted(), "sanity check"); }
void CompiledStaticCall::set_to_interpreted(methodHandle callee, address entry) { address stub=find_stub(); assert(stub!=NULL, "stub not found"); if (TraceICs) { ResourceMark rm; tty->print_cr("CompiledStaticCall@" INTPTR_FORMAT ": set_to_interpreted %s", instruction_address(), callee->name_and_sig_as_C_string()); } NativeMovConstReg* method_holder = nativeMovConstReg_at(stub); // creation also verifies the object NativeJump* jump = nativeJump_at(method_holder->next_instruction_address()); assert(method_holder->data() == 0 || method_holder->data() == (intptr_t)callee(), "a) MT-unsafe modification of inline cache"); assert(jump->jump_destination() == (address)-1 || jump->jump_destination() == entry, "b) MT-unsafe modification of inline cache"); // Update stub method_holder->set_data((intptr_t)callee()); jump->set_jump_destination(entry); // Update jump to call set_destination_mt_safe(stub); }
static address find_itable_stub(int itable_index) { return find_stub(false, itable_index); }
static address find_vtable_stub(int vtable_index) { return find_stub(true, vtable_index); }