equal
deleted
inserted
replaced
3394 ciEnv::current()->record_out_of_memory_failure(); |
3394 ciEnv::current()->record_out_of_memory_failure(); |
3395 return; |
3395 return; |
3396 } |
3396 } |
3397 const int entry_point_toc_offset = __ offset_to_method_toc(entry_point_toc_addr); |
3397 const int entry_point_toc_offset = __ offset_to_method_toc(entry_point_toc_addr); |
3398 |
3398 |
|
3399 |
3399 // Emit the trampoline stub which will be related to the branch-and-link below. |
3400 // Emit the trampoline stub which will be related to the branch-and-link below. |
3400 CallStubImpl::emit_trampoline_stub(_masm, entry_point_toc_offset, start_offset); |
3401 CallStubImpl::emit_trampoline_stub(_masm, entry_point_toc_offset, start_offset); |
3401 if (ciEnv::current()->failing()) { return; } // Code cache may be full. |
3402 if (ciEnv::current()->failing()) { return; } // Code cache may be full. |
3402 __ relocate(_optimized_virtual ? |
3403 int method_index = resolved_method_index(cbuf); |
3403 relocInfo::opt_virtual_call_type : relocInfo::static_call_type); |
3404 __ relocate(_optimized_virtual ? opt_virtual_call_Relocate::spec(method_index) |
|
3405 : static_call_Relocate::spec(method_index)); |
3404 } |
3406 } |
3405 |
3407 |
3406 // The real call. |
3408 // The real call. |
3407 // Note: At this point we do not have the address of the trampoline |
3409 // Note: At this point we do not have the address of the trampoline |
3408 // stub, and the entry point might be too far away for bl, so __ pc() |
3410 // stub, and the entry point might be too far away for bl, so __ pc() |
3448 ? _load_ic_hi_node->_cbuf_insts_offset |
3450 ? _load_ic_hi_node->_cbuf_insts_offset |
3449 : _load_ic_node->_cbuf_insts_offset; |
3451 : _load_ic_node->_cbuf_insts_offset; |
3450 const address virtual_call_oop_addr = __ addr_at(virtual_call_oop_addr_offset); |
3452 const address virtual_call_oop_addr = __ addr_at(virtual_call_oop_addr_offset); |
3451 assert(MacroAssembler::is_load_const_from_method_toc_at(virtual_call_oop_addr), |
3453 assert(MacroAssembler::is_load_const_from_method_toc_at(virtual_call_oop_addr), |
3452 "should be load from TOC"); |
3454 "should be load from TOC"); |
3453 |
3455 int method_index = resolved_method_index(cbuf); |
3454 __ relocate(virtual_call_Relocation::spec(virtual_call_oop_addr)); |
3456 __ relocate(virtual_call_Relocation::spec(virtual_call_oop_addr, method_index)); |
3455 } |
3457 } |
3456 |
3458 |
3457 // At this point I do not have the address of the trampoline stub, |
3459 // At this point I do not have the address of the trampoline stub, |
3458 // and the entry point might be too far away for bl. Pc() serves |
3460 // and the entry point might be too far away for bl. Pc() serves |
3459 // as dummy and bl will be patched later. |
3461 // as dummy and bl will be patched later. |