2598 } |
2598 } |
2599 |
2599 |
2600 AdapterHandlerEntry* AdapterHandlerLibrary::get_adapter(const methodHandle& method) { |
2600 AdapterHandlerEntry* AdapterHandlerLibrary::get_adapter(const methodHandle& method) { |
2601 AdapterHandlerEntry* entry = get_adapter0(method); |
2601 AdapterHandlerEntry* entry = get_adapter0(method); |
2602 if (method->is_shared()) { |
2602 if (method->is_shared()) { |
|
2603 // See comments around Method::link_method() |
2603 MutexLocker mu(AdapterHandlerLibrary_lock); |
2604 MutexLocker mu(AdapterHandlerLibrary_lock); |
2604 if (method->adapter() == NULL) { |
2605 if (method->adapter() == NULL) { |
2605 method->update_adapter_trampoline(entry); |
2606 method->update_adapter_trampoline(entry); |
2606 } |
2607 } |
2607 address trampoline = method->from_compiled_entry(); |
2608 address trampoline = method->from_compiled_entry(); |
2608 if (*(int*)trampoline == 0) { |
2609 if (*(int*)trampoline == 0) { |
2609 CodeBuffer buffer(trampoline, (int)SharedRuntime::trampoline_size()); |
2610 CodeBuffer buffer(trampoline, (int)SharedRuntime::trampoline_size()); |
2610 MacroAssembler _masm(&buffer); |
2611 MacroAssembler _masm(&buffer); |
2611 SharedRuntime::generate_trampoline(&_masm, entry->get_c2i_entry()); |
2612 SharedRuntime::generate_trampoline(&_masm, entry->get_c2i_entry()); |
|
2613 assert(*(int*)trampoline != 0, "Instruction(s) for trampoline must not be encoded as zeros."); |
2612 |
2614 |
2613 if (PrintInterpreter) { |
2615 if (PrintInterpreter) { |
2614 Disassembler::decode(buffer.insts_begin(), buffer.insts_end()); |
2616 Disassembler::decode(buffer.insts_begin(), buffer.insts_end()); |
2615 } |
2617 } |
2616 } |
2618 } |