RFR: 8273774: jdk.tools.jlink.internal.Platform::is64Bit() should not hard code for x64 and AARCH64

Mandy Chung mchung at openjdk.java.net
Wed Sep 15 16:57:53 UTC 2021

On Wed, 15 Sep 2021 06:28:25 GMT, Remilia Scarlet <github.com+22913521+1996scarlet at openjdk.org> wrote:

> Currently, the Platform.is64Bit() hard coded for judging whether the target arch is 64-bit.
> The `classes_nocoops.jsa not found` issue can be found while testing CDSPluginTest.java on 64-bit platform, excluding x64 and AARCH64, like mips64.
> For solving this issue, we assume that the bits of target UNKNOWN arch is same as the runtime platform.
> This patch adds the following lines in the Platform.is64Bit() method.
> ``` java
> if (arch() == Platform.Architecture.UNKNOWN) {
>      return (System.getProperty("os.arch").indexOf("64") != -1);
> }
> Please review this change. Thanks!

The test assumes that it always runs on 64-bit platform and `classes_nocoops.jsa` is always created.  It's a test bug.  The test should only expect `classes_nocoops.jsa`  exists if it's running on a supported 64-bit platform. 

Platform::is64Bit can do better for runtime platform (i.e. `Platform::runtime`) that can determine if it's 64-bit from the `sun.arch.data.model` system property.   However, for unknown target platform, it's unknown if it's 64-bit or not.   So I think fixing the test to check if  `classes_nocoops.jsa`  exists only on one of the JDK supported platforms (x64 or aarch64) is a better way to resolve your issue.


PR: https://git.openjdk.java.net/jdk/pull/5519

More information about the core-libs-dev mailing list