554 if (CDSConfig::is_dumping_dynamic_archive() && AOTMetaspace::in_aot_cache(obj)) {
555 // Don't dump existing shared metadata again.
556 return point_to_it;
557 } else if (ref->msotype() == MetaspaceObj::MethodDataType ||
558 ref->msotype() == MetaspaceObj::MethodCountersType ||
559 ref->msotype() == MetaspaceObj::KlassTrainingDataType ||
560 ref->msotype() == MetaspaceObj::MethodTrainingDataType ||
561 ref->msotype() == MetaspaceObj::CompileTrainingDataType) {
562 return (TrainingData::need_data() || TrainingData::assembling_data()) ? make_a_copy : set_to_null;
563 } else if (ref->msotype() == MetaspaceObj::AdapterHandlerEntryType) {
564 return CDSConfig::is_dumping_adapters() ? make_a_copy : set_to_null;
565 } else {
566 if (ref->msotype() == MetaspaceObj::ClassType) {
567 Klass* klass = (Klass*)ref->obj();
568 assert(klass->is_klass(), "must be");
569 if (RegeneratedClasses::has_been_regenerated(klass)) {
570 klass = RegeneratedClasses::get_regenerated_object(klass);
571 }
572 if (is_excluded(klass)) {
573 ResourceMark rm;
574 log_debug(cds, dynamic)("Skipping class (excluded): %s", klass->external_name());
575 return set_to_null;
576 }
577 }
578
579 return make_a_copy;
580 }
581 }
582
583 void ArchiveBuilder::start_dump_region(DumpRegion* next) {
584 current_dump_region()->pack(next);
585 _current_dump_region = next;
586 }
587
588 char* ArchiveBuilder::ro_strdup(const char* s) {
589 char* archived_str = ro_region_alloc((int)strlen(s) + 1);
590 strcpy(archived_str, s);
591 return archived_str;
592 }
593
594 // The objects that have embedded pointers will sink
833 }
834
835 for (int i = 0; i < klasses()->length(); i++) {
836 const char* type;
837 const char* unlinked = "";
838 const char* kind = "";
839 const char* hidden = "";
840 const char* old = "";
841 const char* generated = "";
842 const char* aotlinked_msg = "";
843 const char* inited_msg = "";
844 Klass* k = get_buffered_addr(klasses()->at(i));
845 bool inited = false;
846 k->remove_java_mirror();
847 #ifdef _LP64
848 if (UseCompactObjectHeaders) {
849 Klass* requested_k = to_requested(k);
850 address narrow_klass_base = _requested_static_archive_bottom; // runtime encoding base == runtime mapping start
851 const int narrow_klass_shift = precomputed_narrow_klass_shift();
852 narrowKlass nk = CompressedKlassPointers::encode_not_null_without_asserts(requested_k, narrow_klass_base, narrow_klass_shift);
853 k->set_prototype_header(markWord::prototype().set_narrow_klass(nk));
854 }
855 #endif //_LP64
856 if (k->is_objArray_klass()) {
857 // InstanceKlass and TypeArrayKlass will in turn call remove_unshareable_info
858 // on their array classes.
859 num_obj_array_klasses ++;
860 type = "array";
861 } else if (k->is_typeArray_klass()) {
862 num_type_array_klasses ++;
863 type = "array";
864 k->remove_unshareable_info();
865 } else {
866 assert(k->is_instance_klass(), " must be");
867 InstanceKlass* ik = InstanceKlass::cast(k);
868 InstanceKlass* src_ik = get_source_addr(ik);
869 bool aotlinked = AOTClassLinker::is_candidate(src_ik);
870 inited = ik->has_aot_initialized_mirror();
871 ADD_COUNT(num_instance_klasses);
872 if (ik->is_hidden()) {
873 ADD_COUNT(num_hidden_klasses);
874 hidden = " hidden";
875 oop loader = k->class_loader();
876 if (loader == nullptr) {
877 type = "boot";
878 ADD_COUNT(num_boot_klasses);
879 } else if (loader == SystemDictionary::java_platform_loader()) {
880 type = "plat";
|
554 if (CDSConfig::is_dumping_dynamic_archive() && AOTMetaspace::in_aot_cache(obj)) {
555 // Don't dump existing shared metadata again.
556 return point_to_it;
557 } else if (ref->msotype() == MetaspaceObj::MethodDataType ||
558 ref->msotype() == MetaspaceObj::MethodCountersType ||
559 ref->msotype() == MetaspaceObj::KlassTrainingDataType ||
560 ref->msotype() == MetaspaceObj::MethodTrainingDataType ||
561 ref->msotype() == MetaspaceObj::CompileTrainingDataType) {
562 return (TrainingData::need_data() || TrainingData::assembling_data()) ? make_a_copy : set_to_null;
563 } else if (ref->msotype() == MetaspaceObj::AdapterHandlerEntryType) {
564 return CDSConfig::is_dumping_adapters() ? make_a_copy : set_to_null;
565 } else {
566 if (ref->msotype() == MetaspaceObj::ClassType) {
567 Klass* klass = (Klass*)ref->obj();
568 assert(klass->is_klass(), "must be");
569 if (RegeneratedClasses::has_been_regenerated(klass)) {
570 klass = RegeneratedClasses::get_regenerated_object(klass);
571 }
572 if (is_excluded(klass)) {
573 ResourceMark rm;
574 aot_log_trace(aot)("pointer set to null: class (excluded): %s", klass->external_name());
575 return set_to_null;
576 }
577 if (klass->is_array_klass() && CDSConfig::is_dumping_dynamic_archive()) {
578 ResourceMark rm;
579 aot_log_trace(aot)("pointer set to null: array class not supported in dynamic region: %s", klass->external_name());
580 return set_to_null;
581 }
582 }
583
584 return make_a_copy;
585 }
586 }
587
588 void ArchiveBuilder::start_dump_region(DumpRegion* next) {
589 current_dump_region()->pack(next);
590 _current_dump_region = next;
591 }
592
593 char* ArchiveBuilder::ro_strdup(const char* s) {
594 char* archived_str = ro_region_alloc((int)strlen(s) + 1);
595 strcpy(archived_str, s);
596 return archived_str;
597 }
598
599 // The objects that have embedded pointers will sink
838 }
839
840 for (int i = 0; i < klasses()->length(); i++) {
841 const char* type;
842 const char* unlinked = "";
843 const char* kind = "";
844 const char* hidden = "";
845 const char* old = "";
846 const char* generated = "";
847 const char* aotlinked_msg = "";
848 const char* inited_msg = "";
849 Klass* k = get_buffered_addr(klasses()->at(i));
850 bool inited = false;
851 k->remove_java_mirror();
852 #ifdef _LP64
853 if (UseCompactObjectHeaders) {
854 Klass* requested_k = to_requested(k);
855 address narrow_klass_base = _requested_static_archive_bottom; // runtime encoding base == runtime mapping start
856 const int narrow_klass_shift = precomputed_narrow_klass_shift();
857 narrowKlass nk = CompressedKlassPointers::encode_not_null_without_asserts(requested_k, narrow_klass_base, narrow_klass_shift);
858 k->set_prototype_header_klass(nk);
859 }
860 #endif //_LP64
861 if (k->is_flatArray_klass()) {
862 num_obj_array_klasses ++;
863 type = "flat array";
864 } else if (k->is_refArray_klass()) {
865 num_obj_array_klasses ++;
866 type = "ref array";
867 } else if (k->is_objArray_klass()) {
868 // InstanceKlass and TypeArrayKlass will in turn call remove_unshareable_info
869 // on their array classes.
870 num_obj_array_klasses ++;
871 type = "obj array";
872 } else if (k->is_typeArray_klass()) {
873 num_type_array_klasses ++;
874 type = "array";
875 k->remove_unshareable_info();
876 } else {
877 assert(k->is_instance_klass(), " must be");
878 InstanceKlass* ik = InstanceKlass::cast(k);
879 InstanceKlass* src_ik = get_source_addr(ik);
880 bool aotlinked = AOTClassLinker::is_candidate(src_ik);
881 inited = ik->has_aot_initialized_mirror();
882 ADD_COUNT(num_instance_klasses);
883 if (ik->is_hidden()) {
884 ADD_COUNT(num_hidden_klasses);
885 hidden = " hidden";
886 oop loader = k->class_loader();
887 if (loader == nullptr) {
888 type = "boot";
889 ADD_COUNT(num_boot_klasses);
890 } else if (loader == SystemDictionary::java_platform_loader()) {
891 type = "plat";
|