8363986: Heap region in CDS archive is not at deterministic address #28052
+122
−35
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Overview
This PR fixes the problem where the JDK build is not reproducible because the
lib/server/classes*.jsafiles do not always put the heap objects at the same addresses. This bug affects only+UseCompressedOops.This bug is in generic code and is not specific to any platform. We hadn't hit this bug because our build platforms always allocated the heap at the same location. However, this is no longer true with macOS 26, which puts the heap at random locations.
The fix
(1) In
ArchiveHeapWriter::init(), we check if we need deterministic heap contents.(2) In
ArchiveHeapWriter::set_requested_address_range(), if deterministic heap contents are needed, we always put the archived heap objects to just below0x100000000, so that we always write the archived oops into the CDS archive with zero-based, zero-shift encoding.Please see comments in the above two functions for more details.
Progress
Issue
Reviewing
Using
gitCheckout this PR locally:
$ git fetch https://git.openjdk.org/jdk.git pull/28052/head:pull/28052$ git checkout pull/28052Update a local copy of the PR:
$ git checkout pull/28052$ git pull https://git.openjdk.org/jdk.git pull/28052/headUsing Skara CLI tools
Checkout this PR locally:
$ git pr checkout 28052View PR using the GUI difftool:
$ git pr show -t 28052Using diff file
Download this PR as a diff file:
https://git.openjdk.org/jdk/pull/28052.diff
Using Webrev
Link to Webrev Comment