< prev index next >

src/hotspot/share/classfile/javaClasses.cpp

Print this page

*** 1213,1232 **** archived_mirror->metadata_field_put(_array_klass_offset, reloc_arr); } return archived_mirror; } void java_lang_Class::update_archived_mirror_native_pointers(oop archived_mirror) { Klass* k = ((Klass*)archived_mirror->metadata_field(_klass_offset)); - if (k != NULL) { // k is NULL for the primitive classes such as java.lang.Byte::TYPE archived_mirror->metadata_field_put(_klass_offset, (Klass*)(address(k) + MetaspaceShared::mapping_delta())); - } Klass* ak = ((Klass*)archived_mirror->metadata_field(_array_klass_offset)); if (ak != NULL) { archived_mirror->metadata_field_put(_array_klass_offset, (Klass*)(address(ak) + MetaspaceShared::mapping_delta())); } } // Returns true if the mirror is updated, false if no archived mirror // data is present. After the archived mirror object is restored, the --- 1213,1243 ---- archived_mirror->metadata_field_put(_array_klass_offset, reloc_arr); } return archived_mirror; } + void java_lang_Class::update_archived_primitive_mirror_native_pointers(oop archived_mirror) { + if (MetaspaceShared::mapping_delta() != 0) { + assert(archived_mirror->metadata_field(_klass_offset) == NULL, "must be for primitive class"); + + Klass* ak = ((Klass*)archived_mirror->metadata_field(_array_klass_offset)); + if (ak != NULL) { + archived_mirror->metadata_field_put(_array_klass_offset, (Klass*)(address(ak) + MetaspaceShared::mapping_delta())); + } + } + } + void java_lang_Class::update_archived_mirror_native_pointers(oop archived_mirror) { + if (MetaspaceShared::mapping_delta() != 0) { Klass* k = ((Klass*)archived_mirror->metadata_field(_klass_offset)); archived_mirror->metadata_field_put(_klass_offset, (Klass*)(address(k) + MetaspaceShared::mapping_delta())); Klass* ak = ((Klass*)archived_mirror->metadata_field(_array_klass_offset)); if (ak != NULL) { archived_mirror->metadata_field_put(_array_klass_offset, (Klass*)(address(ak) + MetaspaceShared::mapping_delta())); } + } } // Returns true if the mirror is updated, false if no archived mirror // data is present. After the archived mirror object is restored, the
*** 1241,1260 **** fixup_mirror_list()->push(k); return true; } oop m = HeapShared::materialize_archived_object(k->archived_java_mirror_raw_narrow()); - if (m == NULL) { return false; } - log_debug(cds, mirror)("Archived mirror is: " PTR_FORMAT, p2i(m)); - update_archived_mirror_native_pointers(m); - // mirror is archived, restore assert(HeapShared::is_archived_object(m), "must be archived mirror object"); Handle mirror(THREAD, m); if (!k->is_array_klass()) { // - local static final fields with initial values were initialized at dump time --- 1252,1270 ---- fixup_mirror_list()->push(k); return true; } oop m = HeapShared::materialize_archived_object(k->archived_java_mirror_raw_narrow()); if (m == NULL) { return false; } // mirror is archived, restore + log_debug(cds, mirror)("Archived mirror is: " PTR_FORMAT, p2i(m)); assert(HeapShared::is_archived_object(m), "must be archived mirror object"); + update_archived_mirror_native_pointers(m); + assert(as_Klass(m) == k, "must be"); Handle mirror(THREAD, m); if (!k->is_array_klass()) { // - local static final fields with initial values were initialized at dump time
< prev index next >