1238 "Relocate mirror metadata field at _array_klass_offset from " PTR_FORMAT " ==> " PTR_FORMAT, 1239 p2i(arr), p2i(reloc_arr)); 1240 archived_mirror->metadata_field_put(_array_klass_offset, reloc_arr); 1241 } 1242 return archived_mirror; 1243 } 1244 1245 void java_lang_Class::update_archived_primitive_mirror_native_pointers(oop archived_mirror) { 1246 if (MetaspaceShared::relocation_delta() != 0) { 1247 assert(archived_mirror->metadata_field(_klass_offset) == NULL, "must be for primitive class"); 1248 1249 Klass* ak = ((Klass*)archived_mirror->metadata_field(_array_klass_offset)); 1250 if (ak != NULL) { 1251 archived_mirror->metadata_field_put(_array_klass_offset, 1252 (Klass*)(address(ak) + MetaspaceShared::relocation_delta())); 1253 } 1254 } 1255 } 1256 1257 void java_lang_Class::update_archived_mirror_native_pointers(oop archived_mirror) { 1258 if (MetaspaceShared::relocation_delta() != 0) { 1259 Klass* k = ((Klass*)archived_mirror->metadata_field(_klass_offset)); 1260 archived_mirror->metadata_field_put(_klass_offset, 1261 (Klass*)(address(k) + MetaspaceShared::relocation_delta())); 1262 1263 Klass* ak = ((Klass*)archived_mirror->metadata_field(_array_klass_offset)); 1264 if (ak != NULL) { 1265 archived_mirror->metadata_field_put(_array_klass_offset, 1266 (Klass*)(address(ak) + MetaspaceShared::relocation_delta())); 1267 } 1268 } 1269 } 1270 1271 1272 // Returns true if the mirror is updated, false if no archived mirror 1273 // data is present. After the archived mirror object is restored, the 1274 // shared klass' _has_raw_archived_mirror flag is cleared. 1275 bool java_lang_Class::restore_archived_mirror(Klass *k, 1276 Handle class_loader, Handle module, 1277 Handle protection_domain, TRAPS) { 1278 // Postpone restoring archived mirror until java.lang.Class is loaded. Please 1279 // see more details in SystemDictionary::resolve_well_known_classes(). 1280 if (!SystemDictionary::Class_klass_loaded()) { 1281 assert(fixup_mirror_list() != NULL, "fixup_mirror_list not initialized"); 1282 fixup_mirror_list()->push(k); 1283 return true; 1284 } 1285 1286 oop m = HeapShared::materialize_archived_object(k->archived_java_mirror_raw_narrow()); 1287 if (m == NULL) { 1288 return false; 1289 } 1290 1291 // mirror is archived, restore 1292 log_debug(cds, mirror)("Archived mirror is: " PTR_FORMAT, p2i(m)); 1293 assert(HeapShared::is_archived_object(m), "must be archived mirror object"); 1294 update_archived_mirror_native_pointers(m); 1295 assert(as_Klass(m) == k, "must be"); 1296 Handle mirror(THREAD, m); 1297 1298 if (!k->is_array_klass()) { 1299 // - local static final fields with initial values were initialized at dump time 1300 1301 // create the init_lock 1302 typeArrayOop r = oopFactory::new_typeArray(T_INT, 0, CHECK_(false)); 1303 set_init_lock(mirror(), r); 1304 1305 if (protection_domain.not_null()) { 1306 set_protection_domain(mirror(), protection_domain()); 1307 } 1308 } 1309 1310 assert(class_loader() == k->class_loader(), "should be same"); 1311 if (class_loader.not_null()) { 1312 set_class_loader(mirror(), class_loader()); 1313 } 1314 | 1238 "Relocate mirror metadata field at _array_klass_offset from " PTR_FORMAT " ==> " PTR_FORMAT, 1239 p2i(arr), p2i(reloc_arr)); 1240 archived_mirror->metadata_field_put(_array_klass_offset, reloc_arr); 1241 } 1242 return archived_mirror; 1243 } 1244 1245 void java_lang_Class::update_archived_primitive_mirror_native_pointers(oop archived_mirror) { 1246 if (MetaspaceShared::relocation_delta() != 0) { 1247 assert(archived_mirror->metadata_field(_klass_offset) == NULL, "must be for primitive class"); 1248 1249 Klass* ak = ((Klass*)archived_mirror->metadata_field(_array_klass_offset)); 1250 if (ak != NULL) { 1251 archived_mirror->metadata_field_put(_array_klass_offset, 1252 (Klass*)(address(ak) + MetaspaceShared::relocation_delta())); 1253 } 1254 } 1255 } 1256 1257 void java_lang_Class::update_archived_mirror_native_pointers(oop archived_mirror) { 1258 assert(MetaspaceShared::relocation_delta() != 0, "must be"); 1259 1260 Klass* k = ((Klass*)archived_mirror->metadata_field(_klass_offset)); 1261 archived_mirror->metadata_field_put(_klass_offset, 1262 (Klass*)(address(k) + MetaspaceShared::relocation_delta())); 1263 1264 Klass* ak = ((Klass*)archived_mirror->metadata_field(_array_klass_offset)); 1265 if (ak != NULL) { 1266 archived_mirror->metadata_field_put(_array_klass_offset, 1267 (Klass*)(address(ak) + MetaspaceShared::relocation_delta())); 1268 } 1269 } 1270 1271 1272 // Returns true if the mirror is updated, false if no archived mirror 1273 // data is present. After the archived mirror object is restored, the 1274 // shared klass' _has_raw_archived_mirror flag is cleared. 1275 bool java_lang_Class::restore_archived_mirror(Klass *k, 1276 Handle class_loader, Handle module, 1277 Handle protection_domain, TRAPS) { 1278 // Postpone restoring archived mirror until java.lang.Class is loaded. Please 1279 // see more details in SystemDictionary::resolve_well_known_classes(). 1280 if (!SystemDictionary::Class_klass_loaded()) { 1281 assert(fixup_mirror_list() != NULL, "fixup_mirror_list not initialized"); 1282 fixup_mirror_list()->push(k); 1283 return true; 1284 } 1285 1286 oop m = HeapShared::materialize_archived_object(k->archived_java_mirror_raw_narrow()); 1287 if (m == NULL) { 1288 return false; 1289 } 1290 1291 // mirror is archived, restore 1292 log_debug(cds, mirror)("Archived mirror is: " PTR_FORMAT, p2i(m)); 1293 assert(HeapShared::is_archived_object(m), "must be archived mirror object"); 1294 assert(as_Klass(m) == k, "must be"); 1295 Handle mirror(THREAD, m); 1296 1297 if (!k->is_array_klass()) { 1298 // - local static final fields with initial values were initialized at dump time 1299 1300 // create the init_lock 1301 typeArrayOop r = oopFactory::new_typeArray(T_INT, 0, CHECK_(false)); 1302 set_init_lock(mirror(), r); 1303 1304 if (protection_domain.not_null()) { 1305 set_protection_domain(mirror(), protection_domain()); 1306 } 1307 } 1308 1309 assert(class_loader() == k->class_loader(), "should be same"); 1310 if (class_loader.not_null()) { 1311 set_class_loader(mirror(), class_loader()); 1312 } 1313 |