RFR: 8345826: Do not automatically resolve jdk.internal.vm.ci when libgraal is used [v4]

Tom Rodriguez never at openjdk.org
Fri May 16 19:35:54 UTC 2025


On Fri, 16 May 2025 16:50:38 GMT, Doug Simon <dnsimon at openjdk.org> wrote:

>> The `EnableJVMCI` flag currently serves 2 purposes:
>> * Guards VM code ([example](https://github.com/openjdk/jdk/blob/b1e778d9d2ad13ee5f1ed629a8805008580f86c0/src/hotspot/share/runtime/sharedRuntime.cpp#L652)).
>> * [Adds](https://github.com/openjdk/jdk/blob/b1e778d9d2ad13ee5f1ed629a8805008580f86c0/src/hotspot/share/runtime/arguments.cpp#L1804) `jdk.internal.vm.ci` to the root module set.
>> 
>> This PR changes nothing about the first point.
>> 
>> On the second point, to use the `jdk.internal.vm.ci` module when libgraal is enabled, `--add-modules=jdk.internal.vm.ci` must be specified.
>> If libgraal is not enabled, +EnableJVMCI will continue to add `jdk.internal.vm.ci` to the root module set.
>> 
>> The primary motivation is to make use of libgraal compatible with `-XX:+AOTClassLinking`. This flag relies on the root module set archive created in a training run. If the root module set is different in the production run, the AOTClassLinking [optimizations](https://bugs.openjdk.org/browse/JDK-8342279) are disabled. As `jdk.internal.vm.ci` is not resolved in the training run, it must not be resolved in production run. As such, `-XX:+EnableJVMCI` must not cause resolution of `jdk.internal.vm.ci`, otherwise libgraal will not have the startup advantages of AOTClassLinking.
>
> Doug Simon has updated the pull request incrementally with one additional commit since the last revision:
> 
>   improved error message

test/hotspot/jtreg/compiler/jvmci/jdk.vm.ci.hotspot.test/src/jdk/vm/ci/hotspot/test/TestHotSpotJVMCIRuntime.java line 173:

> 171:                 "-XX:+UnlockExperimentalVMOptions",
> 172:                 "-XX:+EnableJVMCI",
> 173:                 "--add-modules=jdk.internal.vm.ci",

I stared at this for a while to understand why passing this option was required.  It's a bit confusing that explicitly passing `-XX:+EnableJVMCI` has different effects based on the value of UseJVMCINativeLibrary.  I think that if `EnableJVMCI` is passed on the command line then it should add the module even if libgraal is in use.  So something like:
`if ((!UseJVMCINativeLibrary || FLAG_IS_CMDLINE(EnableJVMCI) && ClassLoader::is_module_observable`

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

PR Review Comment: https://git.openjdk.org/jdk/pull/25240#discussion_r2093580679


More information about the graal-dev mailing list