RFR: 8206890: jlink --endian XXX generates unusable image if endian-ness does not match architecture

Mandy Chung mchung at openjdk.org
Tue Jan 17 19:20:04 UTC 2023


On Wed, 11 Jan 2023 13:19:32 GMT, Jaikiran Pai <jpai at openjdk.org> wrote:

> Can I please get a review for this change which proposes to fix the issue reported in https://bugs.openjdk.org/browse/JDK-8206890?
> 
> The `jlink` command allows a `--endian` option to specify the byte order in the generated image. Before this change, when such a image was being launched, the code would assume the byte order in the image to be the native order of the host where the image is being launched. That would result in failure to launch java, as noted in the linked issue.
> 
> The commit in this PR, changes relevant places to not assume native order and instead determine the byte order by reading the magic bytes in the image file's header content.
> 
> A new jtreg test has been added which reproduces the issue and verifies the fix.

> When jlink is cross linking, as in creating a run-time image for a different target platform, then I think we should strive to have it create the jimage file in the native endian for the target platform. .... Instead I think we need to consider determine the endian from the target java.base module.

Having jlink to determine the endianness for the target platform is a good idea.  This will improve its usability and `--endian` option could be dropped.  Currently jlink looks at the `ModuleTarget` attribute to determine the target platform, which can be extended to include endianness.  

> Right now the ModuleTarget class file attribute is not enough but a short term fix might be for jlink to have a simple mapping of known ModuleTarget values to endianness.

This is a viable short-term solution.

-------------

PR: https://git.openjdk.org/jdk/pull/11943


More information about the core-libs-dev mailing list