[foreign-memaccess+abi] RFR: 8265222: revisit foreign library loading

Jorn Vernee jvernee at openjdk.java.net
Wed May 5 18:27:11 UTC 2021


On Wed, 5 May 2021 16:49:04 GMT, Jorn Vernee <jvernee at openjdk.org> wrote:

>> LibraryLookup removed. CLinker.findNative added. System.loadLibrary has to be used to load library
>
> src/jdk.incubator.foreign/share/classes/jdk/internal/foreign/abi/SharedUtils.java line 422:
> 
>> 420:                 FunctionDescriptor.of(C_POINTER, C_LONG_LONG));
>> 421: 
>> 422:         static final MethodHandle MH_FREE = linker.downcallHandle(CLinker.findNative("free").get(),
> 
> These symbol lookups fail on Windows.

Following fix works:


diff --git a/src/jdk.incubator.foreign/share/classes/jdk/internal/foreign/abi/SharedUtils.java b/src/jdk.incubator.foreign/share/classes/jdk/internal/foreign/abi/SharedUtils.java
index d705d414c0d..708c005d1d9 100644
--- a/src/jdk.incubator.foreign/share/classes/jdk/internal/foreign/abi/SharedUtils.java
+++ b/src/jdk.incubator.foreign/share/classes/jdk/internal/foreign/abi/SharedUtils.java
@@ -50,6 +50,7 @@ import java.lang.invoke.MethodType;
 import java.lang.invoke.VarHandle;
 import java.lang.ref.Reference;
 import java.nio.charset.Charset;
+import java.nio.file.Path;
 import java.util.List;
 import java.util.Map;
 import java.util.function.Consumer;
@@ -415,6 +416,9 @@ public class SharedUtils {
     private static class AllocHolder {

         private static final CLinker linker = getSystemLinker();
+        static {
+            System.load(Path.of(System.getenv("SystemRoot"), "System32", "msvcrt.dll").toAbsolutePath().toString());
+        }
         static final MethodHandle MH_MALLOC = linker.downcallHandle(CLinker.findNative("malloc").get(),
                         MethodType.methodType(MemoryAddress.class, long.class),
                 FunctionDescriptor.of(C_POINTER, C_LONG_LONG));

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

PR: https://git.openjdk.java.net/panama-foreign/pull/526


More information about the panama-dev mailing list