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;
|