Skip to content

Commit 988ac4f

Browse files
committed
8230586: Encapsulate fields in filemap.hpp
Reviewed-by: ccheung
1 parent 99252bd commit 988ac4f

File tree

12 files changed

+374
-252
lines changed

12 files changed

+374
-252
lines changed

src/hotspot/share/classfile/classLoaderExt.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ bool ClassLoaderExt::_has_platform_classes = false;
5555
void ClassLoaderExt::append_boot_classpath(ClassPathEntry* new_entry) {
5656
if (UseSharedSpaces) {
5757
warning("Sharing is only supported for boot loader classes because bootstrap classpath has been appended");
58-
FileMapInfo::current_info()->header()->set_has_platform_or_app_classes(false);
58+
FileMapInfo::current_info()->set_has_platform_or_app_classes(false);
5959
}
6060
ClassLoader::add_to_boot_append_entries(new_entry);
6161
}

src/hotspot/share/classfile/systemDictionaryShared.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -744,11 +744,11 @@ bool SystemDictionaryShared::is_shared_class_visible_for_classloader(
744744
}
745745

746746
bool SystemDictionaryShared::has_platform_or_app_classes() {
747-
if (FileMapInfo::current_info()->header()->has_platform_or_app_classes()) {
747+
if (FileMapInfo::current_info()->has_platform_or_app_classes()) {
748748
return true;
749749
}
750750
if (DynamicArchive::is_mapped() &&
751-
FileMapInfo::dynamic_info()->header()->has_platform_or_app_classes()) {
751+
FileMapInfo::dynamic_info()->has_platform_or_app_classes()) {
752752
return true;
753753
}
754754
return false;

src/hotspot/share/include/cds.h

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,22 +36,23 @@
3636
#define NUM_CDS_REGIONS 8 // this must be the same as MetaspaceShared::n_regions
3737
#define CDS_ARCHIVE_MAGIC 0xf00baba2
3838
#define CDS_DYNAMIC_ARCHIVE_MAGIC 0xf00baba8
39-
#define CURRENT_CDS_ARCHIVE_VERSION 7
39+
#define CURRENT_CDS_ARCHIVE_VERSION 8
4040
#define INVALID_CDS_ARCHIVE_VERSION -1
4141

4242
struct CDSFileMapRegion {
43-
int _crc; // crc checksum of the current space
44-
size_t _file_offset; // sizeof(this) rounded to vm page size
43+
int _crc; // crc checksum of the current space
44+
size_t _file_offset; // sizeof(this) rounded to vm page size
4545
union {
46-
char* _base; // copy-on-write base address
47-
size_t _offset; // offset from the compressed oop encoding base, only used
48-
// by archive heap space
46+
char* _base; // copy-on-write base address
47+
size_t _offset; // offset from the compressed oop encoding base, only used
48+
// by archive heap space
4949
} _addr;
50-
size_t _used; // for setting space top on read
51-
int _read_only; // read only space?
52-
int _allow_exec; // executable code in space?
53-
void* _oopmap; // bitmap for relocating embedded oops
50+
size_t _used; // for setting space top on read
51+
int _read_only; // read only space?
52+
int _allow_exec; // executable code in space?
53+
void* _oopmap; // bitmap for relocating embedded oops
5454
size_t _oopmap_size_in_bits;
55+
int _is_heap_region; // used in debug build only.
5556
};
5657

5758
struct CDSFileMapHeaderBase {

src/hotspot/share/interpreter/abstractInterpreter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ AbstractInterpreter::MethodKind AbstractInterpreter::method_kind(const methodHan
208208

209209
address AbstractInterpreter::get_trampoline_code_buffer(AbstractInterpreter::MethodKind kind) {
210210
const size_t trampoline_size = SharedRuntime::trampoline_size();
211-
address addr = MetaspaceShared::cds_i2i_entry_code_buffers((size_t)(AbstractInterpreter::number_of_method_entries) * trampoline_size);
211+
address addr = MetaspaceShared::i2i_entry_code_buffers((size_t)(AbstractInterpreter::number_of_method_entries) * trampoline_size);
212212
addr += (size_t)(kind) * trampoline_size;
213213

214214
return addr;

src/hotspot/share/memory/dynamicArchive.cpp

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -652,7 +652,7 @@ class DynamicArchiveBuilder : ResourceObj {
652652
it->push(&_symbols->at(i));
653653
}
654654

655-
_header->_shared_path_table.metaspace_pointers_do(it);
655+
_header->shared_path_table_metaspace_pointers_do(it);
656656

657657
// Do not call these again, as we have already collected all the classes and symbols
658658
// that we want to archive. Also, these calls would corrupt the tables when
@@ -733,14 +733,13 @@ void DynamicArchiveBuilder::init_header(address reserved_bottom) {
733733
init_first_dump_space(reserved_bottom);
734734

735735
FileMapInfo* mapinfo = new FileMapInfo(false);
736-
_header = (DynamicArchiveHeader*)mapinfo->_header;
736+
_header = mapinfo->dynamic_header();
737737

738738
Thread* THREAD = Thread::current();
739739
FileMapInfo* base_info = FileMapInfo::current_info();
740-
int* crc = _header->_base_archive_crc;
741-
*crc++ = base_info->crc(); // base archive header crc
740+
_header->set_base_header_crc(base_info->crc());
742741
for (int i = 0; i < MetaspaceShared::n_regions; i++) {
743-
*crc++ = base_info->space_crc(i);
742+
_header->set_base_region_crc(i, base_info->space_crc(i));
744743
}
745744
_header->populate(base_info, os::vm_allocation_granularity());
746745
}
@@ -907,9 +906,9 @@ void DynamicArchiveBuilder::relocate_buffer_to_target() {
907906
RelocateBufferToTarget patcher(this, (address*)_alloc_bottom, _buffer_to_target_delta);
908907
_ptrmap.iterate(&patcher);
909908

910-
Array<u8>* table = _header->_shared_path_table.table();
909+
Array<u8>* table = _header->shared_path_table().table();
911910
table = to_target(table);
912-
_header->_shared_path_table.set_table(table);
911+
_header->relocate_shared_path_table(table);
913912
}
914913

915914
static void write_archive_info(FileMapInfo* dynamic_info, DynamicArchiveHeader *header) {
@@ -933,7 +932,7 @@ void DynamicArchiveBuilder::write_archive(char* read_only_tables_start) {
933932
int num_klasses = _klasses->length();
934933
int num_symbols = _symbols->length();
935934

936-
_header->_read_only_tables_start = to_target(read_only_tables_start);
935+
_header->set_read_only_tables_start(to_target(read_only_tables_start));
937936

938937
FileMapInfo* dynamic_info = FileMapInfo::dynamic_info();
939938
assert(dynamic_info != NULL, "Sanity");
@@ -953,10 +952,11 @@ void DynamicArchiveBuilder::write_archive(char* read_only_tables_start) {
953952

954953
address base = to_target(_alloc_bottom);
955954
address top = address(current_dump_space()->top()) + _buffer_to_target_delta;
956-
int file_size = int(top - base);
955+
size_t file_size = pointer_delta(top, base, sizeof(char));
957956

958-
log_info(cds, dynamic)("Written dynamic archive " PTR_FORMAT " - " PTR_FORMAT " [%d bytes header, %d bytes total]",
959-
p2i(base), p2i(top), (int)_header->_header_size, file_size);
957+
log_info(cds, dynamic)("Written dynamic archive " PTR_FORMAT " - " PTR_FORMAT
958+
" [" SIZE_FORMAT " bytes header, " SIZE_FORMAT " bytes total]",
959+
p2i(base), p2i(top), _header->header_size(), file_size);
960960
log_info(cds, dynamic)("%d klasses; %d symbols", num_klasses, num_symbols);
961961
}
962962

@@ -1046,8 +1046,8 @@ static DynamicArchiveHeader *_dynamic_header = NULL;
10461046
DynamicArchiveBuilder* DynamicArchive::_builder = NULL;
10471047

10481048
void DynamicArchive::map_failed(FileMapInfo* mapinfo) {
1049-
if (mapinfo->_header != NULL) {
1050-
os::free(mapinfo->_header);
1049+
if (mapinfo->dynamic_header() != NULL) {
1050+
os::free((void*)mapinfo->dynamic_header());
10511051
}
10521052
delete mapinfo;
10531053
}
@@ -1081,15 +1081,12 @@ address DynamicArchive::map() {
10811081
}
10821082

10831083
address DynamicArchive::map_impl(FileMapInfo* mapinfo) {
1084-
1085-
10861084
// Read header
10871085
if (!mapinfo->initialize(false)) {
10881086
return NULL;
10891087
}
10901088

1091-
_dynamic_header = (DynamicArchiveHeader*)mapinfo->header();
1092-
1089+
_dynamic_header = mapinfo->dynamic_header();
10931090
int regions[] = {MetaspaceShared::rw,
10941091
MetaspaceShared::ro,
10951092
MetaspaceShared::mc};
@@ -1111,7 +1108,7 @@ address DynamicArchive::map_impl(FileMapInfo* mapinfo) {
11111108
return NULL;
11121109
}
11131110

1114-
intptr_t* buffer = (intptr_t*)_dynamic_header->_read_only_tables_start;
1111+
intptr_t* buffer = (intptr_t*)_dynamic_header->read_only_tables_start();
11151112
ReadClosure rc(&buffer);
11161113
SymbolTable::serialize_shared_table_header(&rc, false);
11171114
SystemDictionaryShared::serialize_dictionary_headers(&rc, false);
@@ -1122,18 +1119,17 @@ address DynamicArchive::map_impl(FileMapInfo* mapinfo) {
11221119
bool DynamicArchive::validate(FileMapInfo* dynamic_info) {
11231120
// Check if the recorded base archive matches with the current one
11241121
FileMapInfo* base_info = FileMapInfo::current_info();
1125-
DynamicArchiveHeader* dynamic_header = (DynamicArchiveHeader*)dynamic_info->header();
1126-
int* crc = dynamic_header->_base_archive_crc;
1122+
DynamicArchiveHeader* dynamic_header = dynamic_info->dynamic_header();
11271123

11281124
// Check the header crc
1129-
if (*crc++ != base_info->crc()) {
1125+
if (dynamic_header->base_header_crc() != base_info->crc()) {
11301126
FileMapInfo::fail_continue("Archive header checksum verification failed.");
11311127
return false;
11321128
}
11331129

11341130
// Check each space's crc
11351131
for (int i = 0; i < MetaspaceShared::n_regions; i++) {
1136-
if (*crc++ != base_info->space_crc(i)) {
1132+
if (dynamic_header->base_region_crc(i) != base_info->space_crc(i)) {
11371133
FileMapInfo::fail_continue("Archive region #%d checksum verification failed.", i);
11381134
return false;
11391135
}

src/hotspot/share/memory/dynamicArchive.hpp

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,24 @@
3737
#include "utilities/macros.hpp"
3838
#include "utilities/resourceHash.hpp"
3939

40-
// We want to include all archive header information in the dynamic archive.
41-
// This helps simplify the process if the base layer archive is missing at
42-
// dynamic archiving time.
43-
struct DynamicArchiveHeader : public FileMapHeader {
44-
// crc for the base archive header and regions
45-
int _base_archive_crc[MetaspaceShared::n_regions+1];
40+
class DynamicArchiveHeader : public FileMapHeader {
41+
friend class CDSOffsets;
42+
private:
43+
int _base_header_crc;
44+
int _base_region_crc[MetaspaceShared::n_regions];
45+
46+
public:
47+
int base_header_crc() const { return _base_header_crc; }
48+
int base_region_crc(int i) const {
49+
assert(is_valid_region(i), "must be");
50+
return _base_region_crc[i];
51+
}
52+
53+
void set_base_header_crc(int c) { _base_header_crc = c; }
54+
void set_base_region_crc(int i, int c) {
55+
assert(is_valid_region(i), "must be");
56+
_base_region_crc[i] = c;
57+
}
4658
};
4759

4860
class DynamicArchive : AllStatic {

0 commit comments

Comments
 (0)