From 7cc1b268f8a4e8b016d2ec832645b158be1ac9b4 Mon Sep 17 00:00:00 2001 From: Jiangli Zhou Date: Mon, 21 Apr 2025 16:00:42 -0700 Subject: [PATCH 1/3] Use NativeLibraries.loadLibrary() to get the libsyslookup. This works on both regular and static JDK. --- make/modules/java.base/Lib.gmk | 1 + .../aix/native/libsyslookup/syslookup.c | 7 ++++- .../jdk/internal/foreign/SystemLookup.java | 28 +++++++++---------- .../share/native/libsyslookup/syslookup.c | 7 ++++- .../windows/native/libsyslookup/syslookup.c | 7 ++++- 5 files changed, 33 insertions(+), 17 deletions(-) diff --git a/make/modules/java.base/Lib.gmk b/make/modules/java.base/Lib.gmk index 84ee309dadd11..51d323a0344f2 100644 --- a/make/modules/java.base/Lib.gmk +++ b/make/modules/java.base/Lib.gmk @@ -158,6 +158,7 @@ endif $(eval $(call SetupJdkLibrary, BUILD_LIBSYSLOOKUP, \ NAME := syslookup, \ + EXTRA_HEADER_DIRS := java.base:libjava, \ LD_SET_ORIGIN := false, \ LDFLAGS_linux := -Wl$(COMMA)--no-as-needed, \ LDFLAGS_aix := -brtl -bexpfull, \ diff --git a/src/java.base/aix/native/libsyslookup/syslookup.c b/src/java.base/aix/native/libsyslookup/syslookup.c index 66bd50e01a0ef..d4f96be71f022 100644 --- a/src/java.base/aix/native/libsyslookup/syslookup.c +++ b/src/java.base/aix/native/libsyslookup/syslookup.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, 2025, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2023, IBM Corp. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -29,6 +29,11 @@ #include #include +#include +#include "jni_util.h" + +DEF_STATIC_JNI_OnLoad + // Addresses of functions to be referenced using static linking. void* funcs[] = { //string.h diff --git a/src/java.base/share/classes/jdk/internal/foreign/SystemLookup.java b/src/java.base/share/classes/jdk/internal/foreign/SystemLookup.java index bf5371d43a067..4852ca7785a7c 100644 --- a/src/java.base/share/classes/jdk/internal/foreign/SystemLookup.java +++ b/src/java.base/share/classes/jdk/internal/foreign/SystemLookup.java @@ -25,6 +25,7 @@ package jdk.internal.foreign; +import jdk.internal.loader.NativeLibraries; import jdk.internal.loader.NativeLibrary; import jdk.internal.loader.RawNativeLibraries; import jdk.internal.util.OperatingSystem; @@ -66,7 +67,7 @@ private static SymbolLookup makeSystemLookup() { if (OperatingSystem.isWindows()) { return makeWindowsLookup(); } else { - return libLookup(libs -> libs.load(jdkLibraryPath("syslookup"))); + return sysLookup(); } } catch (Throwable ex) { // This can happen in the event of a library loading failure - e.g. if one of the libraries the @@ -84,13 +85,12 @@ private static SymbolLookup makeWindowsLookup() { boolean useUCRT = Files.exists(ucrtbase); Path stdLib = useUCRT ? ucrtbase : msvcrt; - SymbolLookup lookup = libLookup(libs -> libs.load(stdLib)); + SymbolLookup lookup = stdLibLookup(libs -> libs.load(stdLib)); if (useUCRT) { // use a fallback lookup to look up inline functions from fallback lib - SymbolLookup fallbackLibLookup = - libLookup(libs -> libs.load(jdkLibraryPath("syslookup"))); + SymbolLookup fallbackLibLookup = sysLookup(); @SuppressWarnings("restricted") MemorySegment funcs = fallbackLibLookup.findOrThrow("funcs") @@ -110,8 +110,7 @@ private static SymbolLookup makeWindowsLookup() { return lookup; } - private static SymbolLookup libLookup(Function loader) { - NativeLibrary lib = loader.apply(RawNativeLibraries.newInstance(MethodHandles.lookup())); + private static SymbolLookup lookup(NativeLibrary lib) { return name -> { Objects.requireNonNull(name); if (Utils.containsNullChars(name)) return Optional.empty(); @@ -126,16 +125,17 @@ private static SymbolLookup libLookup(Function loader) { + NativeLibrary lib = loader.apply(RawNativeLibraries.newInstance(MethodHandles.lookup())); + return lookup(lib); } + @SuppressWarnings("restricted") + private static SymbolLookup sysLookup() { + NativeLibraries libs = jdk.internal.loader.NativeLibraries.newInstance(null); + NativeLibrary lib = libs.loadLibrary(SymbolLookup.class, "syslookup"); + return lookup(lib); + } public static SystemLookup getInstance() { return INSTANCE; diff --git a/src/java.base/share/native/libsyslookup/syslookup.c b/src/java.base/share/native/libsyslookup/syslookup.c index b1f543bfdb763..81465f5752672 100644 --- a/src/java.base/share/native/libsyslookup/syslookup.c +++ b/src/java.base/share/native/libsyslookup/syslookup.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,6 +27,11 @@ // Adding at least one #include removes unwanted warnings on some platforms. #include +#include +#include "jni_util.h" + +DEF_STATIC_JNI_OnLoad + // Simple dummy function so this library appears as a normal library to tooling. char* syslookup() { return "syslookup"; diff --git a/src/java.base/windows/native/libsyslookup/syslookup.c b/src/java.base/windows/native/libsyslookup/syslookup.c index c7ddce46a79a5..f68ab425c530b 100644 --- a/src/java.base/windows/native/libsyslookup/syslookup.c +++ b/src/java.base/windows/native/libsyslookup/syslookup.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,6 +26,11 @@ #include #include +#include +#include "jni_util.h" + +DEF_STATIC_JNI_OnLoad + // Forces generation of inline code on Windows __declspec(dllexport) void* funcs[] = { // stdio.h From 11f674c6c671f4c33d46d5e82fdc80d85224423b Mon Sep 17 00:00:00 2001 From: Jiangli Zhou <35976689+jianglizhou@users.noreply.github.com> Date: Tue, 22 Apr 2025 16:25:06 -0700 Subject: [PATCH 2/3] Update src/java.base/share/classes/jdk/internal/foreign/SystemLookup.java Thanks. I used `jdk.internal.loader.NativeLibraries` as a quick change before adding adding import. I neglected to to clean up that part. Co-authored-by: Chen Liang --- .../share/classes/jdk/internal/foreign/SystemLookup.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java.base/share/classes/jdk/internal/foreign/SystemLookup.java b/src/java.base/share/classes/jdk/internal/foreign/SystemLookup.java index 4852ca7785a7c..640c7580d159a 100644 --- a/src/java.base/share/classes/jdk/internal/foreign/SystemLookup.java +++ b/src/java.base/share/classes/jdk/internal/foreign/SystemLookup.java @@ -132,7 +132,7 @@ private static SymbolLookup stdLibLookup(Function Date: Tue, 22 Apr 2025 17:47:53 -0700 Subject: [PATCH 3/3] Address henryjen@ comment: - Remove '#include '. --- src/java.base/aix/native/libsyslookup/syslookup.c | 1 - src/java.base/share/native/libsyslookup/syslookup.c | 1 - src/java.base/windows/native/libsyslookup/syslookup.c | 1 - 3 files changed, 3 deletions(-) diff --git a/src/java.base/aix/native/libsyslookup/syslookup.c b/src/java.base/aix/native/libsyslookup/syslookup.c index d4f96be71f022..95aff2d430011 100644 --- a/src/java.base/aix/native/libsyslookup/syslookup.c +++ b/src/java.base/aix/native/libsyslookup/syslookup.c @@ -29,7 +29,6 @@ #include #include -#include #include "jni_util.h" DEF_STATIC_JNI_OnLoad diff --git a/src/java.base/share/native/libsyslookup/syslookup.c b/src/java.base/share/native/libsyslookup/syslookup.c index 81465f5752672..fa7ddca41566e 100644 --- a/src/java.base/share/native/libsyslookup/syslookup.c +++ b/src/java.base/share/native/libsyslookup/syslookup.c @@ -27,7 +27,6 @@ // Adding at least one #include removes unwanted warnings on some platforms. #include -#include #include "jni_util.h" DEF_STATIC_JNI_OnLoad diff --git a/src/java.base/windows/native/libsyslookup/syslookup.c b/src/java.base/windows/native/libsyslookup/syslookup.c index f68ab425c530b..3216632c53d26 100644 --- a/src/java.base/windows/native/libsyslookup/syslookup.c +++ b/src/java.base/windows/native/libsyslookup/syslookup.c @@ -26,7 +26,6 @@ #include #include -#include #include "jni_util.h" DEF_STATIC_JNI_OnLoad