469 void make_klasses_shareable(); |
469 void make_klasses_shareable(); |
470 void sort_methods(InstanceKlass* ik) const; |
470 void sort_methods(InstanceKlass* ik) const; |
471 void set_symbols_permanent(); |
471 void set_symbols_permanent(); |
472 void relocate_buffer_to_target(); |
472 void relocate_buffer_to_target(); |
473 void write_archive(char* read_only_tables_start); |
473 void write_archive(char* read_only_tables_start); |
|
474 void write_regions(FileMapInfo* dynamic_info); |
474 |
475 |
475 void init_first_dump_space(address reserved_bottom) { |
476 void init_first_dump_space(address reserved_bottom) { |
476 address first_space_base = reserved_bottom; |
477 address first_space_base = reserved_bottom; |
477 DumpRegion* rw_space = MetaspaceShared::read_write_dump_space(); |
478 DumpRegion* rw_space = MetaspaceShared::read_write_dump_space(); |
478 MetaspaceShared::init_shared_dump_space(rw_space, first_space_base); |
479 MetaspaceShared::init_shared_dump_space(rw_space, first_space_base); |
909 Array<u8>* table = _header->shared_path_table().table(); |
910 Array<u8>* table = _header->shared_path_table().table(); |
910 table = to_target(table); |
911 table = to_target(table); |
911 _header->relocate_shared_path_table(table); |
912 _header->relocate_shared_path_table(table); |
912 } |
913 } |
913 |
914 |
914 static void write_archive_info(FileMapInfo* dynamic_info, DynamicArchiveHeader *header) { |
915 void DynamicArchiveBuilder::write_regions(FileMapInfo* dynamic_info) { |
915 dynamic_info->write_header(); |
|
916 dynamic_info->align_file_position(); |
|
917 dynamic_info->write_region(MetaspaceShared::rw, |
916 dynamic_info->write_region(MetaspaceShared::rw, |
918 MetaspaceShared::read_write_dump_space()->base(), |
917 MetaspaceShared::read_write_dump_space()->base(), |
919 MetaspaceShared::read_write_dump_space()->used(), |
918 MetaspaceShared::read_write_dump_space()->used(), |
920 /*read_only=*/false,/*allow_exec=*/false); |
919 /*read_only=*/false,/*allow_exec=*/false); |
921 dynamic_info->write_region(MetaspaceShared::ro, |
920 dynamic_info->write_region(MetaspaceShared::ro, |
935 _header->set_read_only_tables_start(to_target(read_only_tables_start)); |
934 _header->set_read_only_tables_start(to_target(read_only_tables_start)); |
936 |
935 |
937 FileMapInfo* dynamic_info = FileMapInfo::dynamic_info(); |
936 FileMapInfo* dynamic_info = FileMapInfo::dynamic_info(); |
938 assert(dynamic_info != NULL, "Sanity"); |
937 assert(dynamic_info != NULL, "Sanity"); |
939 |
938 |
940 // Populate the file offsets, region crcs, etc. No data is written out. |
|
941 write_archive_info(dynamic_info, _header); |
|
942 |
|
943 // the header will no longer change. Compute its crc. |
|
944 dynamic_info->set_header_crc(dynamic_info->compute_header_crc()); |
|
945 |
|
946 // Now write the archived data including the file offsets. |
939 // Now write the archived data including the file offsets. |
947 const char* archive_name = Arguments::GetSharedDynamicArchivePath(); |
940 const char* archive_name = Arguments::GetSharedDynamicArchivePath(); |
948 dynamic_info->open_for_write(archive_name); |
941 dynamic_info->open_for_write(archive_name); |
949 write_archive_info(dynamic_info, _header); |
942 write_regions(dynamic_info); |
|
943 dynamic_info->set_header_crc(dynamic_info->compute_header_crc()); |
|
944 dynamic_info->write_header(); |
950 dynamic_info->close(); |
945 dynamic_info->close(); |
951 |
|
952 |
946 |
953 address base = to_target(_alloc_bottom); |
947 address base = to_target(_alloc_bottom); |
954 address top = address(current_dump_space()->top()) + _buffer_to_target_delta; |
948 address top = address(current_dump_space()->top()) + _buffer_to_target_delta; |
955 size_t file_size = pointer_delta(top, base, sizeof(char)); |
949 size_t file_size = pointer_delta(top, base, sizeof(char)); |
956 |
950 |