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..95aff2d430011 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,10 @@ #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..640c7580d159a 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 = 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..fa7ddca41566e 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,10 @@ // Adding at least one #include removes unwanted warnings on some platforms. #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..3216632c53d26 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,10 @@ #include #include +#include "jni_util.h" + +DEF_STATIC_JNI_OnLoad + // Forces generation of inline code on Windows __declspec(dllexport) void* funcs[] = { // stdio.h