--- a/src/hotspot/share/memory/dynamicArchive.cpp Mon Sep 23 13:59:41 2019 -0700
+++ b/src/hotspot/share/memory/dynamicArchive.cpp Mon Sep 23 19:54:37 2019 -0700
@@ -471,6 +471,7 @@
void set_symbols_permanent();
void relocate_buffer_to_target();
void write_archive(char* read_only_tables_start);
+ void write_regions(FileMapInfo* dynamic_info);
void init_first_dump_space(address reserved_bottom) {
address first_space_base = reserved_bottom;
@@ -911,9 +912,7 @@
_header->relocate_shared_path_table(table);
}
-static void write_archive_info(FileMapInfo* dynamic_info, DynamicArchiveHeader *header) {
- dynamic_info->write_header();
- dynamic_info->align_file_position();
+void DynamicArchiveBuilder::write_regions(FileMapInfo* dynamic_info) {
dynamic_info->write_region(MetaspaceShared::rw,
MetaspaceShared::read_write_dump_space()->base(),
MetaspaceShared::read_write_dump_space()->used(),
@@ -937,19 +936,14 @@
FileMapInfo* dynamic_info = FileMapInfo::dynamic_info();
assert(dynamic_info != NULL, "Sanity");
- // Populate the file offsets, region crcs, etc. No data is written out.
- write_archive_info(dynamic_info, _header);
-
- // the header will no longer change. Compute its crc.
- dynamic_info->set_header_crc(dynamic_info->compute_header_crc());
-
// Now write the archived data including the file offsets.
const char* archive_name = Arguments::GetSharedDynamicArchivePath();
dynamic_info->open_for_write(archive_name);
- write_archive_info(dynamic_info, _header);
+ write_regions(dynamic_info);
+ dynamic_info->set_header_crc(dynamic_info->compute_header_crc());
+ dynamic_info->write_header();
dynamic_info->close();
-
address base = to_target(_alloc_bottom);
address top = address(current_dump_space()->top()) + _buffer_to_target_delta;
size_t file_size = pointer_delta(top, base, sizeof(char));