< prev index next >

src/hotspot/share/memory/filemap.cpp

Print this page

*** 657,667 **** // Memory map a region in the address space. static const char* shared_region_name[] = { "MiscData", "ReadWrite", "ReadOnly", "MiscCode", "OptionalData", "String1", "String2", "OpenArchive1", "OpenArchive2" }; ! char* FileMapInfo::map_region(int i) { assert(!MetaspaceShared::is_heap_region(i), "sanity"); struct FileMapInfo::FileMapHeader::space_info* si = &_header->_space[i]; size_t used = si->_used; size_t alignment = os::vm_allocation_granularity(); size_t size = align_up(used, alignment); --- 657,667 ---- // Memory map a region in the address space. static const char* shared_region_name[] = { "MiscData", "ReadWrite", "ReadOnly", "MiscCode", "OptionalData", "String1", "String2", "OpenArchive1", "OpenArchive2" }; ! char* FileMapInfo::map_region(int i, char** top_ret) { assert(!MetaspaceShared::is_heap_region(i), "sanity"); struct FileMapInfo::FileMapHeader::space_info* si = &_header->_space[i]; size_t used = si->_used; size_t alignment = os::vm_allocation_granularity(); size_t size = align_up(used, alignment);
*** 684,693 **** --- 684,699 ---- // This call is Windows-only because the memory_type gets recorded for the other platforms // in method FileMapInfo::reserve_shared_memory(), which is not called on Windows. MemTracker::record_virtual_memory_type((address)base, mtClassShared); #endif + + if (!verify_region_checksum(i)) { + return NULL; + } + + *top_ret = base + size; return base; } static MemRegion *string_ranges = NULL; static MemRegion *open_archive_heap_ranges = NULL;
*** 1038,1068 **** _paths_misc_info = NULL; } return status; } - // The following method is provided to see whether a given pointer - // falls in the mapped shared metadata space. - // Param: - // p, The given pointer - // Return: - // True if the p is within the mapped shared space, otherwise, false. - bool FileMapInfo::is_in_shared_space(const void* p) { - for (int i = 0; i < MetaspaceShared::num_non_heap_spaces; i++) { - char *base; - if (_header->_space[i]._used == 0) { - continue; - } - base = _header->region_addr(i); - if (p >= base && p < base + _header->_space[i]._used) { - return true; - } - } - - return false; - } - // Check if a given address is within one of the shared regions bool FileMapInfo::is_in_shared_region(const void* p, int idx) { assert(idx == MetaspaceShared::ro || idx == MetaspaceShared::rw || idx == MetaspaceShared::mc || --- 1044,1053 ----
< prev index next >