< prev index next >

src/hotspot/share/oops/method.cpp

Print this page


1201   } else {
1202     mh->set_adapter_entry(adapter);
1203     mh->_from_compiled_entry = adapter->get_c2i_entry();
1204     mh->_from_compiled_value_entry = adapter->get_c2i_value_entry();
1205     mh->_from_compiled_value_ro_entry = adapter->get_c2i_value_ro_entry();
1206   }
1207   return adapter->get_c2i_entry();
1208 }
1209 
1210 void Method::restore_unshareable_info(TRAPS) {
1211   assert(is_method() && is_valid_method(this), "ensure C++ vtable is restored");
1212 
1213   // Since restore_unshareable_info can be called more than once for a method, don't
1214   // redo any work.
1215   if (adapter() == NULL) {
1216     methodHandle mh(THREAD, this);
1217     link_method(mh, CHECK);
1218   }
1219 }
1220 
1221 address Method::from_compiled_entry_no_trampoline() const {
1222   CompiledMethod *code = OrderAccess::load_acquire(&_code);









1223   if (code) {
1224     return code->verified_entry_point();
1225   } else {
1226     return adapter()->get_c2i_entry();

1227   }
1228 }
1229 
1230 // The verified_code_entry() must be called when a invoke is resolved
1231 // on this method.
1232 
1233 // It returns the compiled code entry point, after asserting not null.
1234 // This function is called after potential safepoints so that nmethod
1235 // or adapter that it points to is still live and valid.
1236 // This function must not hit a safepoint!
1237 address Method::verified_code_entry() {
1238   debug_only(NoSafepointVerifier nsv;)
1239   assert(_from_compiled_entry != NULL, "must be set");
1240   return _from_compiled_entry;
1241 }
1242 
1243 address Method::verified_value_code_entry() {
1244   debug_only(NoSafepointVerifier nsv;)
1245   assert(_from_compiled_value_entry != NULL, "must be set");
1246   return _from_compiled_value_entry;




1201   } else {
1202     mh->set_adapter_entry(adapter);
1203     mh->_from_compiled_entry = adapter->get_c2i_entry();
1204     mh->_from_compiled_value_entry = adapter->get_c2i_value_entry();
1205     mh->_from_compiled_value_ro_entry = adapter->get_c2i_value_ro_entry();
1206   }
1207   return adapter->get_c2i_entry();
1208 }
1209 
1210 void Method::restore_unshareable_info(TRAPS) {
1211   assert(is_method() && is_valid_method(this), "ensure C++ vtable is restored");
1212 
1213   // Since restore_unshareable_info can be called more than once for a method, don't
1214   // redo any work.
1215   if (adapter() == NULL) {
1216     methodHandle mh(THREAD, this);
1217     link_method(mh, CHECK);
1218   }
1219 }
1220 
1221 address Method::from_compiled_entry_no_trampoline(bool caller_is_c1) const {
1222   CompiledMethod *code = OrderAccess::load_acquire(&_code);
1223   if (caller_is_c1) {
1224     // C1 - value arguments are passed as objects
1225     if (code) {
1226       return code->verified_value_entry_point();
1227     } else {
1228       return adapter()->get_c2i_value_entry();
1229     }
1230   } else {
1231     // C2 - value arguments may be passed as unpacked fields
1232     if (code) {
1233       return code->verified_entry_point();
1234     } else {
1235       return adapter()->get_c2i_entry();
1236     }
1237   }
1238 }
1239 
1240 // The verified_code_entry() must be called when a invoke is resolved
1241 // on this method.
1242 
1243 // It returns the compiled code entry point, after asserting not null.
1244 // This function is called after potential safepoints so that nmethod
1245 // or adapter that it points to is still live and valid.
1246 // This function must not hit a safepoint!
1247 address Method::verified_code_entry() {
1248   debug_only(NoSafepointVerifier nsv;)
1249   assert(_from_compiled_entry != NULL, "must be set");
1250   return _from_compiled_entry;
1251 }
1252 
1253 address Method::verified_value_code_entry() {
1254   debug_only(NoSafepointVerifier nsv;)
1255   assert(_from_compiled_value_entry != NULL, "must be set");
1256   return _from_compiled_value_entry;


< prev index next >