RFR: 8338768: Introduce runtime lookup to check for static builds [v2]
Josef Eisl
jeisl at openjdk.org
Tue Sep 10 13:54:23 UTC 2024
On Wed, 21 Aug 2024 22:14:40 GMT, Magnus Ihse Bursie <ihse at openjdk.org> wrote:
>> As a preparation for Hermetic Java, we need to have a way to look up during runtime if we are using a statically linked library or not.
>>
>> This change will be the first step needed towards compiling the object files only once, and then link them into either dynamic or static libraries. (The only exception will be the linktype.c[pp] files, which needs to be compiled twice, once for the dynamic libraries and once for the static libraries.) Getting there will require further work though.
>>
>> This is part of the changes that make up the draft PR https://github.com/openjdk/jdk/pull/19478, which I have broken out.
>
> Magnus Ihse Bursie has updated the pull request incrementally with one additional commit since the last revision:
>
> Also update build to link properly
src/java.desktop/unix/native/libawt/awt/awt_LoadLibrary.c line 135:
> 133: #endif
> 134:
> 135: if (!JVM_IsStaticallyLinked()) {
These "cross-library" link-type probes are a challenge for GraalVM native image. In native image, we statically link most standard JNI libraries into the final executable. However in some cases, for example AWT, static linking is not feasible due to their dependencies. Thus, we resort to dynamic linking. Have a mix of static and dynamic linking means that `JVM_IsStaticallyLinked` should give different answers based on the caller. Example:
lets assume a follow-up change introduces a call to `JVM_IsStaticallyLinked` in libnet (which native image statically links):
* if `JVM_IsStaticallyLinked` is called from libawt.so, we want to answer `false`
* if `JVM_IsStaticallyLinked` is called from libnet.a, we want to answer `true`
Is the mixed linking use case is something that the Hermetic Java effort is having on its radar?
For this particular case, one solutions could be to avoid cross-library calls. I.e., instead of calling `JVM_IsStaticallyLinked`, have an `AWT_IsStaticallyLinked` that is local to the libawt. This is similar to the pattern also used for JLI.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/20666#discussion_r1752023584
More information about the core-libs-dev
mailing list