1096 assert(mh->adapter() == adapter, "must be");
1097 assert(mh->_from_compiled_entry != NULL, "must be");
1098 } else {
1099 mh->set_adapter_entry(adapter);
1100 mh->_from_compiled_entry = adapter->get_c2i_entry();
1101 }
1102 return adapter->get_c2i_entry();
1103 }
1104
1105 void Method::restore_unshareable_info(TRAPS) {
1106 assert(is_method() && is_valid_method(), "ensure C++ vtable is restored");
1107
1108 // Since restore_unshareable_info can be called more than once for a method, don't
1109 // redo any work.
1110 if (adapter() == NULL) {
1111 methodHandle mh(THREAD, this);
1112 link_method(mh, CHECK);
1113 }
1114 }
1115
1116 volatile address Method::from_compiled_entry_no_trampoline() const {
1117 CompiledMethod *code = OrderAccess::load_acquire(&_code);
1118 if (code) {
1119 return code->verified_entry_point();
1120 } else {
1121 return adapter()->get_c2i_entry();
1122 }
1123 }
1124
1125 // The verified_code_entry() must be called when a invoke is resolved
1126 // on this method.
1127
1128 // It returns the compiled code entry point, after asserting not null.
1129 // This function is called after potential safepoints so that nmethod
1130 // or adapter that it points to is still live and valid.
1131 // This function must not hit a safepoint!
1132 address Method::verified_code_entry() {
1133 debug_only(NoSafepointVerifier nsv;)
1134 assert(_from_compiled_entry != NULL, "must be set");
1135 return _from_compiled_entry;
1136 }
|
1096 assert(mh->adapter() == adapter, "must be");
1097 assert(mh->_from_compiled_entry != NULL, "must be");
1098 } else {
1099 mh->set_adapter_entry(adapter);
1100 mh->_from_compiled_entry = adapter->get_c2i_entry();
1101 }
1102 return adapter->get_c2i_entry();
1103 }
1104
1105 void Method::restore_unshareable_info(TRAPS) {
1106 assert(is_method() && is_valid_method(), "ensure C++ vtable is restored");
1107
1108 // Since restore_unshareable_info can be called more than once for a method, don't
1109 // redo any work.
1110 if (adapter() == NULL) {
1111 methodHandle mh(THREAD, this);
1112 link_method(mh, CHECK);
1113 }
1114 }
1115
1116 address Method::from_compiled_entry_no_trampoline() const {
1117 CompiledMethod *code = OrderAccess::load_acquire(&_code);
1118 if (code) {
1119 return code->verified_entry_point();
1120 } else {
1121 return adapter()->get_c2i_entry();
1122 }
1123 }
1124
1125 // The verified_code_entry() must be called when a invoke is resolved
1126 // on this method.
1127
1128 // It returns the compiled code entry point, after asserting not null.
1129 // This function is called after potential safepoints so that nmethod
1130 // or adapter that it points to is still live and valid.
1131 // This function must not hit a safepoint!
1132 address Method::verified_code_entry() {
1133 debug_only(NoSafepointVerifier nsv;)
1134 assert(_from_compiled_entry != NULL, "must be set");
1135 return _from_compiled_entry;
1136 }
|