< prev index next >

src/hotspot/share/oops/method.cpp

Print this page




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 }


< prev index next >