On Thu, 3 Jun 2021 20:49:44 GMT, Maurizio Cimadamore <mcimadam...@openjdk.org> 
wrote:

>> This patch overhauls the library loading mechanism used by the Foreign 
>> Linker API. We realized that, while handy, the *default* lookup abstraction 
>> (`LibraryLookup::ofDefault`) was behaving inconsistentlt across platforms.
>> 
>> This patch replaces `LibraryLookup` with a simpler `SymbolLookup` 
>> abstraction, a functional interface. Crucially, `SymbolLookup` does not 
>> concern with library loading, only symbol lookup. For this reason, two 
>> factories are added:
>> 
>> * `SymbolLookup::loaderLookup` - which obtains a lookup that can be used to 
>> lookup symbols in libraries loaded by current loader
>> * `CLinker::systemLookup` - a more stable replacement for the *default* 
>> lookup, which looks for symbols in libc.so (or its equivalent in other 
>> platforms). The contents of this lookup are unspecified.
>> 
>> Both factories are *restricted*, so they can only be called when 
>> `--enable-native-access` is set.
>
> Maurizio Cimadamore has updated the pull request incrementally with one 
> additional commit since the last revision:
> 
>   Address review comments on shim lib makefile

I think the reason it worked in JDK 16 is because all the symbols in the JVM 
were visible through the system lookup, and the JVM statically links the 
standard library (AFAIU). So, just because the VM code depended on something, 
it could be loaded by the system lookup. But, that would mean that not all 
symbols in the standard library were visible... and also, being able to find 
_any_ symbol in the JVM was a bug.

I think the only solution here - assuming that libc is not available as a 
dynamic library on typical AIX systems - is to figure out how to repackage 
these static libraries as a dynamic library, retaining all the symbols, and 
then bundle that dynamic library with the JDK.

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

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

Reply via email to