diff --git a/src/hotspot/share/cds/aotMapLogger.cpp b/src/hotspot/share/cds/aotMapLogger.cpp index ce1aa68dd23..3d0fea2306a 100644 --- a/src/hotspot/share/cds/aotMapLogger.cpp +++ b/src/hotspot/share/cds/aotMapLogger.cpp @@ -880,7 +880,7 @@ void AOTMapLogger::runtime_log_heap_region(FileMapInfo* mapinfo) { } address requested_base = UseCompressedOops ? (address)mapinfo->narrow_oop_base() : AOTMappedHeapLoader::heap_region_requested_address(mapinfo); - address requested_start = ArchiveUtils::offset_to_requested_addr(requested_base, r->mapping_offset()); + address requested_start = ArchiveUtils::offset_from_requested_base(requested_base, r->mapping_offset()); log_region_range("heap", buffer_start, buffer_end, requested_start); log_archived_objects(AOTMappedHeapLoader::oop_iterator(mapinfo, buffer_start, buffer_end)); } diff --git a/src/hotspot/share/cds/aotMappedHeapLoader.cpp b/src/hotspot/share/cds/aotMappedHeapLoader.cpp index 2c3e0965292..47fa8116110 100644 --- a/src/hotspot/share/cds/aotMappedHeapLoader.cpp +++ b/src/hotspot/share/cds/aotMappedHeapLoader.cpp @@ -771,7 +771,7 @@ AOTMapLogger::OopDataIterator* AOTMappedHeapLoader::oop_iterator(FileMapInfo* in FileMapRegion* r = info->region_at(AOTMetaspace::hp); address requested_base = UseCompressedOops ? (address)info->narrow_oop_base() : heap_region_requested_address(info); - address requested_start = ArchiveUtils::offset_to_requested_addr(requested_base, r->mapping_offset()); + address requested_start = ArchiveUtils::offset_from_requested_base(requested_base, r->mapping_offset()); int requested_shift = info->narrow_oop_shift(); return new MappedLoaderOopIterator(buffer_start, diff --git a/src/hotspot/share/cds/archiveBuilder.cpp b/src/hotspot/share/cds/archiveBuilder.cpp index 3c08c2f514f..e986eec9dc9 100644 --- a/src/hotspot/share/cds/archiveBuilder.cpp +++ b/src/hotspot/share/cds/archiveBuilder.cpp @@ -367,7 +367,7 @@ address ArchiveBuilder::reserve_buffer() { size_t static_archive_size = _mapped_static_archive_top - _mapped_static_archive_bottom; // At run time, we will mmap the dynamic archive at my_archive_requested_bottom - _requested_static_archive_top = ArchiveUtils::offset_to_requested_addr(_requested_static_archive_bottom, static_archive_size); + _requested_static_archive_top = ArchiveUtils::offset_from_requested_base(_requested_static_archive_bottom, static_archive_size); my_archive_requested_bottom = align_up(_requested_static_archive_top, AOTMetaspace::core_region_alignment()); _requested_dynamic_archive_bottom = my_archive_requested_bottom; @@ -375,7 +375,7 @@ address ArchiveBuilder::reserve_buffer() { _buffer_to_requested_delta = my_archive_requested_bottom - _buffer_bottom; - address my_archive_requested_top = ArchiveUtils::offset_to_requested_addr(my_archive_requested_bottom, buffer_size); + address my_archive_requested_top = ArchiveUtils::offset_from_requested_base(my_archive_requested_bottom, buffer_size); if (my_archive_requested_bottom < _requested_static_archive_bottom || my_archive_requested_top <= _requested_static_archive_bottom) { // Size overflow. @@ -982,7 +982,7 @@ size_t ArchiveBuilder::any_to_offset(address p) const { } address ArchiveBuilder::offset_to_buffered_address(size_t offset) const { - address requested_addr = ArchiveUtils::offset_to_requested_addr(_requested_static_archive_bottom, offset); + address requested_addr = ArchiveUtils::offset_from_requested_base(_requested_static_archive_bottom, offset); address buffered_addr = requested_addr - _buffer_to_requested_delta; assert(is_in_buffer_space(buffered_addr), "bad offset"); return buffered_addr; @@ -1109,7 +1109,7 @@ void ArchiveBuilder::relocate_to_requested() { size_t my_archive_size = buffer_top() - buffer_bottom(); if (CDSConfig::is_dumping_static_archive()) { - _requested_static_archive_top = ArchiveUtils::offset_to_requested_addr(_requested_static_archive_bottom, my_archive_size); + _requested_static_archive_top = ArchiveUtils::offset_from_requested_base(_requested_static_archive_bottom, my_archive_size); RelocateBufferToRequested patcher(this); patcher.doit(); } else { diff --git a/src/hotspot/share/cds/archiveUtils.hpp b/src/hotspot/share/cds/archiveUtils.hpp index 5bb98c0db24..8b59c37cf29 100644 --- a/src/hotspot/share/cds/archiveUtils.hpp +++ b/src/hotspot/share/cds/archiveUtils.hpp @@ -291,8 +291,10 @@ public: return archive_ptr_array(tmp_array); } + // Compute the address at the given offset from requested_base. It's possible for + // requested_base to have the numerical value of 0x0. template - static address offset_to_requested_addr(T requested_base, size_t offset) { + static address offset_from_requested_base(T requested_base, size_t offset) { // As zero is allowed for requested_base, use integer arithmetic to avoid UB pointer arithmetic. return (address)((uintptr_t)requested_base + offset); }