diff --git a/src/java.base/share/classes/java/lang/foreign/Linker.java b/src/java.base/share/classes/java/lang/foreign/Linker.java index fb325ef1d44..545a83984f8 100644 --- a/src/java.base/share/classes/java/lang/foreign/Linker.java +++ b/src/java.base/share/classes/java/lang/foreign/Linker.java @@ -88,7 +88,7 @@ import java.util.stream.Stream; * {@snippet lang = java: * Linker linker = Linker.nativeLinker(); * MethodHandle strlen = linker.downcallHandle( - * linker.defaultLookup().find("strlen").orElseThrow(), + * linker.defaultLookup().findOrThrow("strlen"), * FunctionDescriptor.of(JAVA_LONG, ADDRESS) * ); * } @@ -306,7 +306,7 @@ import java.util.stream.Stream; * {@snippet lang = java: * Linker linker = Linker.nativeLinker(); * MethodHandle qsort = linker.downcallHandle( - * linker.defaultLookup().find("qsort").orElseThrow(), + * linker.defaultLookup().findOrThrow("qsort"), * FunctionDescriptor.ofVoid(ADDRESS, JAVA_LONG, JAVA_LONG, ADDRESS) * ); * } @@ -397,12 +397,12 @@ import java.util.stream.Stream; * Linker linker = Linker.nativeLinker(); * * MethodHandle malloc = linker.downcallHandle( - * linker.defaultLookup().find("malloc").orElseThrow(), + * linker.defaultLookup().findOrThrow("malloc"), * FunctionDescriptor.of(ADDRESS, JAVA_LONG) * ); * * MethodHandle free = linker.downcallHandle( - * linker.defaultLookup().find("free").orElseThrow(), + * linker.defaultLookup().findOrThrow("free"), * FunctionDescriptor.ofVoid(ADDRESS) * ); * } @@ -530,7 +530,7 @@ import java.util.stream.Stream; * {@snippet lang = java: * Linker linker = Linker.nativeLinker(); * MethodHandle printf = linker.downcallHandle( - * linker.defaultLookup().find("printf").orElseThrow(), + * linker.defaultLookup().findOrThrow("printf"), * FunctionDescriptor.of(JAVA_INT, ADDRESS, JAVA_INT, JAVA_INT, JAVA_INT), * Linker.Option.firstVariadicArg(1) // first int is variadic * ); diff --git a/src/java.base/share/classes/java/lang/foreign/SymbolLookup.java b/src/java.base/share/classes/java/lang/foreign/SymbolLookup.java index 9bfc7964322..3bc416b9c62 100644 --- a/src/java.base/share/classes/java/lang/foreign/SymbolLookup.java +++ b/src/java.base/share/classes/java/lang/foreign/SymbolLookup.java @@ -39,6 +39,7 @@ import jdk.internal.reflect.Reflection; import java.lang.invoke.MethodHandles; import java.nio.file.FileSystems; import java.nio.file.Path; +import java.util.NoSuchElementException; import java.util.Objects; import java.util.Optional; import java.util.function.BiFunction; @@ -79,7 +80,7 @@ import java.util.function.BiFunction; * {@snippet lang = java: * try (Arena arena = Arena.ofConfined()) { * SymbolLookup libGL = SymbolLookup.libraryLookup("libGL.so", arena); // libGL.so loaded here - * MemorySegment glGetString = libGL.find("glGetString").orElseThrow(); + * MemorySegment glGetString = libGL.findOrThrow("glGetString"); * ... * } // libGL.so unloaded here *} @@ -93,7 +94,7 @@ import java.util.function.BiFunction; * System.loadLibrary("GL"); // libGL.so loaded here * ... * SymbolLookup libGL = SymbolLookup.loaderLookup(); - * MemorySegment glGetString = libGL.find("glGetString").orElseThrow(); + * MemorySegment glGetString = libGL.findOrThrow("glGetString"); * } * * This symbol lookup, which is known as a loader lookup, is dynamic with @@ -130,7 +131,7 @@ import java.util.function.BiFunction; * {@snippet lang = java: * Linker nativeLinker = Linker.nativeLinker(); * SymbolLookup stdlib = nativeLinker.defaultLookup(); - * MemorySegment malloc = stdlib.find("malloc").orElseThrow(); + * MemorySegment malloc = stdlib.findOrThrow("malloc"); *} * * @since 22 @@ -144,9 +145,40 @@ public interface SymbolLookup { * @param name the symbol name * @return a zero-length memory segment whose address indicates the address of * the symbol, if found + * @see #findOrThrow(String) */ Optional find(String name); + /** + * Returns the address of the symbol with the given name or throws an exception. + *

+ * This is equivalent to the following code, but is more efficient: + * to: + * {@snippet lang= java : + * String name = ... + * MemorySegment address = lookup.find(name) + * .orElseThrow(() -> new NoSuchElementException("Symbol not found: " + name)); + * } + * + * @param name the symbol name + * @return a zero-length memory segment whose address indicates the address of + * the symbol + * @throws NoSuchElementException if no symbol address can be found for the + * given name + * @see #find(String) + * + * @since 23 + */ + default MemorySegment findOrThrow(String name) { + Objects.requireNonNull(name); + Optional address = find(name); + // Avoid lambda capturing + if (address.isPresent()) { + return address.get(); + } + throw new NoSuchElementException("Symbol not found: " + name); + } + /** * {@return a composed symbol lookup that returns the result of finding the symbol * with this lookup if found, otherwise returns the result of finding diff --git a/src/java.base/share/classes/java/lang/foreign/package-info.java b/src/java.base/share/classes/java/lang/foreign/package-info.java index b2a6a5f4474..6594826e405 100644 --- a/src/java.base/share/classes/java/lang/foreign/package-info.java +++ b/src/java.base/share/classes/java/lang/foreign/package-info.java @@ -100,7 +100,7 @@ * Linker linker = Linker.nativeLinker(); * SymbolLookup stdlib = linker.defaultLookup(); * MethodHandle strlen = linker.downcallHandle( - * stdlib.find("strlen").orElseThrow(), + * stdlib.findOrThrow("strlen"), * FunctionDescriptor.of(ValueLayout.JAVA_LONG, ValueLayout.ADDRESS) * ); * @@ -111,7 +111,7 @@ *} * * Here, we obtain a {@linkplain java.lang.foreign.Linker#nativeLinker() native linker} - * and we use it to {@linkplain java.lang.foreign.SymbolLookup#find(java.lang.String) look up} + * and we use it to {@linkplain java.lang.foreign.SymbolLookup#findOrThrow(java.lang.String) look up} * the {@code strlen} function in the standard C library; a downcall method handle * targeting said function is subsequently * {@linkplain java.lang.foreign.Linker#downcallHandle(FunctionDescriptor, Linker.Option...) obtained}. diff --git a/src/java.base/share/classes/java/lang/foreign/snippet-files/Snippets.java b/src/java.base/share/classes/java/lang/foreign/snippet-files/Snippets.java index 95b9cce7541..f305586ac61 100644 --- a/src/java.base/share/classes/java/lang/foreign/snippet-files/Snippets.java +++ b/src/java.base/share/classes/java/lang/foreign/snippet-files/Snippets.java @@ -163,7 +163,7 @@ class Snippets { void downcall() throws Throwable { Linker linker = Linker.nativeLinker(); MethodHandle strlen = linker.downcallHandle( - linker.defaultLookup().find("strlen").orElseThrow(), + linker.defaultLookup().findOrThrow("strlen"), FunctionDescriptor.of(JAVA_LONG, ADDRESS) ); @@ -177,7 +177,7 @@ class Snippets { void qsort() throws Throwable { Linker linker = Linker.nativeLinker(); MethodHandle qsort = linker.downcallHandle( - linker.defaultLookup().find("qsort").orElseThrow(), + linker.defaultLookup().findOrThrow("qsort"), FunctionDescriptor.ofVoid(ADDRESS, JAVA_LONG, JAVA_LONG, ADDRESS) ); @@ -208,12 +208,12 @@ class Snippets { Linker linker = Linker.nativeLinker(); MethodHandle malloc = linker.downcallHandle( - linker.defaultLookup().find("malloc").orElseThrow(), + linker.defaultLookup().findOrThrow("malloc"), FunctionDescriptor.of(ADDRESS, JAVA_LONG) ); MethodHandle free = linker.downcallHandle( - linker.defaultLookup().find("free").orElseThrow(), + linker.defaultLookup().findOrThrow("free"), FunctionDescriptor.ofVoid(ADDRESS) ); @@ -282,7 +282,7 @@ class Snippets { Linker linker = Linker.nativeLinker(); MethodHandle printf = linker.downcallHandle( - linker.defaultLookup().find("printf").orElseThrow(), + linker.defaultLookup().findOrThrow("printf"), FunctionDescriptor.of(JAVA_INT, ADDRESS, JAVA_INT, JAVA_INT, JAVA_INT), Linker.Option.firstVariadicArg(1) // first int is variadic ); @@ -568,7 +568,7 @@ class Snippets { Linker linker = Linker.nativeLinker(); SymbolLookup stdlib = linker.defaultLookup(); MethodHandle strlen = linker.downcallHandle( - stdlib.find("strlen").orElseThrow(), + stdlib.findOrThrow("strlen"), FunctionDescriptor.of(ValueLayout.JAVA_LONG, ValueLayout.ADDRESS) ); @@ -626,14 +626,14 @@ class Snippets { void header() { try (Arena arena = Arena.ofConfined()) { SymbolLookup libGL = libraryLookup("libGL.so", arena); // libGL.so loaded here - MemorySegment glGetString = libGL.find("glGetString").orElseThrow(); + MemorySegment glGetString = libGL.findOrThrow("glGetString"); // ... } // libGL.so unloaded here System.loadLibrary("GL"); // libGL.so loaded here // ... SymbolLookup libGL = loaderLookup(); - MemorySegment glGetString = libGL.find("glGetString").orElseThrow(); + MemorySegment glGetString = libGL.findOrThrow("glGetString"); Arena arena = Arena.ofAuto(); @@ -647,7 +647,7 @@ class Snippets { Linker nativeLinker = Linker.nativeLinker(); SymbolLookup stdlib = nativeLinker.defaultLookup(); - MemorySegment malloc = stdlib.find("malloc").orElseThrow(); + MemorySegment malloc = stdlib.findOrThrow("malloc"); } } 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 758366bfcf1..98e02140af6 100644 --- a/src/java.base/share/classes/jdk/internal/foreign/SystemLookup.java +++ b/src/java.base/share/classes/jdk/internal/foreign/SystemLookup.java @@ -102,7 +102,7 @@ public final class SystemLookup implements SymbolLookup { libLookup(libs -> libs.load(jdkLibraryPath("syslookup"))); @SuppressWarnings("restricted") - MemorySegment funcs = fallbackLibLookup.find("funcs").orElseThrow() + MemorySegment funcs = fallbackLibLookup.findOrThrow("funcs") .reinterpret(WindowsFallbackSymbols.LAYOUT.byteSize()); Function> fallbackLookup = name -> Optional.ofNullable(WindowsFallbackSymbols.valueOfOrNull(name)) diff --git a/src/java.desktop/share/classes/sun/font/HBShaper.java b/src/java.desktop/share/classes/sun/font/HBShaper.java index 90877623c2b..70e95cdc27b 100644 --- a/src/java.desktop/share/classes/sun/font/HBShaper.java +++ b/src/java.desktop/share/classes/sun/font/HBShaper.java @@ -168,22 +168,22 @@ public class HBShaper { SYM_LOOKUP = SymbolLookup.loaderLookup().or(LINKER.defaultLookup()); FunctionDescriptor mallocDescriptor = FunctionDescriptor.of(ADDRESS, JAVA_LONG); - Optional malloc_symbol = SYM_LOOKUP.find("malloc"); + MemorySegment malloc_symbol = SYM_LOOKUP.findOrThrow("malloc"); @SuppressWarnings("restricted") - MethodHandle tmp1 = LINKER.downcallHandle(malloc_symbol.get(), mallocDescriptor); + MethodHandle tmp1 = LINKER.downcallHandle(malloc_symbol, mallocDescriptor); malloc_handle = tmp1; FunctionDescriptor createFaceDescriptor = FunctionDescriptor.of(ADDRESS, ADDRESS); - Optional create_face_symbol = SYM_LOOKUP.find("HBCreateFace"); + MemorySegment create_face_symbol = SYM_LOOKUP.findOrThrow("HBCreateFace"); @SuppressWarnings("restricted") - MethodHandle tmp2 = LINKER.downcallHandle(create_face_symbol.get(), createFaceDescriptor); + MethodHandle tmp2 = LINKER.downcallHandle(create_face_symbol, createFaceDescriptor); create_face_handle = tmp2; FunctionDescriptor disposeFaceDescriptor = FunctionDescriptor.ofVoid(ADDRESS); - Optional dispose_face_symbol = SYM_LOOKUP.find("HBDisposeFace"); + MemorySegment dispose_face_symbol = SYM_LOOKUP.findOrThrow("HBDisposeFace"); @SuppressWarnings("restricted") - MethodHandle tmp3 = LINKER.downcallHandle(dispose_face_symbol.get(), disposeFaceDescriptor); + MethodHandle tmp3 = LINKER.downcallHandle(dispose_face_symbol, disposeFaceDescriptor); dispose_face_handle = tmp3; FunctionDescriptor shapeDesc = FunctionDescriptor.ofVoid( @@ -204,9 +204,9 @@ public class HBShaper { ADDRESS, // ptr to harfbuzz font_funcs object. ADDRESS); // store_results_fn - Optional shape_sym = SYM_LOOKUP.find("jdk_hb_shape"); + MemorySegment shape_sym = SYM_LOOKUP.findOrThrow("jdk_hb_shape"); @SuppressWarnings("restricted") - MethodHandle tmp4 = LINKER.downcallHandle(shape_sym.get(), shapeDesc); + MethodHandle tmp4 = LINKER.downcallHandle(shape_sym, shapeDesc); jdk_hb_shape_handle = tmp4; Arena garena = Arena.global(); // creating stubs that exist until VM exit. @@ -260,10 +260,10 @@ public class HBShaper { ADDRESS, // h_advance_fn upcall stub ADDRESS, // v_advance_fn upcall stub ADDRESS); // contour_pt_fn upcall stub - Optional create_font_funcs_symbol = SYM_LOOKUP.find("HBCreateFontFuncs"); + MemorySegment create_font_funcs_symbol = SYM_LOOKUP.findOrThrow("HBCreateFontFuncs"); @SuppressWarnings("restricted") MethodHandle create_font_funcs_handle = - LINKER.downcallHandle(create_font_funcs_symbol.get(), createFontFuncsDescriptor); + LINKER.downcallHandle(create_font_funcs_symbol, createFontFuncsDescriptor); MemorySegment s = null; try { diff --git a/test/hotspot/jtreg/gc/shenandoah/compiler/TestLinkToNativeRBP.java b/test/hotspot/jtreg/gc/shenandoah/compiler/TestLinkToNativeRBP.java index 8004d34f5ce..f799c0bac21 100644 --- a/test/hotspot/jtreg/gc/shenandoah/compiler/TestLinkToNativeRBP.java +++ b/test/hotspot/jtreg/gc/shenandoah/compiler/TestLinkToNativeRBP.java @@ -49,7 +49,7 @@ public class TestLinkToNativeRBP { final static Linker abi = Linker.nativeLinker(); static final SymbolLookup lookup = SymbolLookup.loaderLookup(); - final static MethodHandle foo = abi.downcallHandle(lookup.find("foo").get(), + final static MethodHandle foo = abi.downcallHandle(lookup.findOrThrow("foo"), FunctionDescriptor.of(ValueLayout.JAVA_INT)); static int foo() throws Throwable { diff --git a/test/jdk/java/foreign/loaderLookup/TestSymbolLookupFindOrThrow.java b/test/jdk/java/foreign/loaderLookup/TestSymbolLookupFindOrThrow.java new file mode 100644 index 00000000000..d0fdf43b999 --- /dev/null +++ b/test/jdk/java/foreign/loaderLookup/TestSymbolLookupFindOrThrow.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2024, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @run junit/othervm --enable-native-access=ALL-UNNAMED TestSymbolLookupFindOrThrow + */ + +import java.lang.foreign.MemorySegment; +import java.lang.foreign.SymbolLookup; +import java.util.NoSuchElementException; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import static org.junit.Assert.*; + +final class TestSymbolLookupFindOrThrow { + + static { + System.loadLibrary("Foo"); + } + + @Test + void findOrThrow() { + MemorySegment symbol = SymbolLookup.loaderLookup().findOrThrow("foo"); + Assertions.assertNotEquals(0, symbol.address()); + } + + @Test + void findOrThrowNotFound() { + assertThrows(NoSuchElementException.class, () -> + SymbolLookup.loaderLookup().findOrThrow("bar")); + } + +} diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/AllocTest.java b/test/micro/org/openjdk/bench/java/lang/foreign/AllocTest.java index b7e4bfd5f57..4ae2c0364dc 100644 --- a/test/micro/org/openjdk/bench/java/lang/foreign/AllocTest.java +++ b/test/micro/org/openjdk/bench/java/lang/foreign/AllocTest.java @@ -88,7 +88,7 @@ public class AllocTest extends CLayouts { static final MethodHandle CALLOC = Linker.nativeLinker() .downcallHandle( - Linker.nativeLinker().defaultLookup().find("calloc").get(), + Linker.nativeLinker().defaultLookup().findOrThrow("calloc"), FunctionDescriptor.of(ValueLayout.ADDRESS, ValueLayout.JAVA_LONG, ValueLayout.JAVA_LONG)); static MemorySegment calloc(long size) { diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/CLayouts.java b/test/micro/org/openjdk/bench/java/lang/foreign/CLayouts.java index bfe5ce61b1c..4028b408559 100644 --- a/test/micro/org/openjdk/bench/java/lang/foreign/CLayouts.java +++ b/test/micro/org/openjdk/bench/java/lang/foreign/CLayouts.java @@ -33,7 +33,7 @@ import java.lang.foreign.ValueLayout; import java.lang.invoke.MethodHandle; public class CLayouts { - private static Linker LINKER = Linker.nativeLinker(); + private static final Linker LINKER = Linker.nativeLinker(); // the constants below are useful aliases for C types. The type/carrier association is only valid for 64-bit platforms. @@ -73,10 +73,10 @@ public class CLayouts { .withTargetLayout(MemoryLayout.sequenceLayout(Long.MAX_VALUE, C_CHAR)); private static final MethodHandle FREE = LINKER.downcallHandle( - LINKER.defaultLookup().find("free").get(), FunctionDescriptor.ofVoid(C_POINTER)); + LINKER.defaultLookup().findOrThrow("free"), FunctionDescriptor.ofVoid(C_POINTER)); private static final MethodHandle MALLOC = LINKER.downcallHandle( - LINKER.defaultLookup().find("malloc").get(), FunctionDescriptor.of(C_POINTER, ValueLayout.JAVA_LONG)); + LINKER.defaultLookup().findOrThrow("malloc"), FunctionDescriptor.of(C_POINTER, ValueLayout.JAVA_LONG)); public static void freeMemory(MemorySegment address) { try { diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/CallOverheadHelper.java b/test/micro/org/openjdk/bench/java/lang/foreign/CallOverheadHelper.java index 290d40f1202..f0841989e76 100644 --- a/test/micro/org/openjdk/bench/java/lang/foreign/CallOverheadHelper.java +++ b/test/micro/org/openjdk/bench/java/lang/foreign/CallOverheadHelper.java @@ -109,7 +109,7 @@ public class CallOverheadHelper extends CLayouts { System.loadLibrary("CallOverhead"); SymbolLookup loaderLibs = SymbolLookup.loaderLookup(); { - func_addr = loaderLibs.find("func").orElseThrow(); + func_addr = loaderLibs.findOrThrow("func"); MethodType mt = MethodType.methodType(void.class); FunctionDescriptor fd = FunctionDescriptor.ofVoid(); func_v = abi.downcallHandle(fd); @@ -118,59 +118,59 @@ public class CallOverheadHelper extends CLayouts { func_critical = insertArguments(func_critical_v, 0, func_addr); } { - identity_addr = loaderLibs.find("identity").orElseThrow(); + identity_addr = loaderLibs.findOrThrow("identity"); FunctionDescriptor fd = FunctionDescriptor.of(C_INT, C_INT); identity_v = abi.downcallHandle(fd); identity_critical_v = abi.downcallHandle(fd, Linker.Option.critical(false)); identity = insertArguments(identity_v, 0, identity_addr); identity_critical = insertArguments(identity_critical_v, 0, identity_addr); } - identity_struct_addr = loaderLibs.find("identity_struct").orElseThrow(); + identity_struct_addr = loaderLibs.findOrThrow("identity_struct"); identity_struct_v = abi.downcallHandle( FunctionDescriptor.of(POINT_LAYOUT, POINT_LAYOUT)); identity_struct = insertArguments(identity_struct_v, 0, identity_struct_addr); - identity_struct_3_addr = loaderLibs.find("identity_struct_3").orElseThrow(); + identity_struct_3_addr = loaderLibs.findOrThrow("identity_struct_3"); identity_struct_3_v = abi.downcallHandle( FunctionDescriptor.of(POINT_LAYOUT, POINT_LAYOUT, POINT_LAYOUT, POINT_LAYOUT)); identity_struct_3 = insertArguments(identity_struct_3_v, 0, identity_struct_3_addr); - identity_memory_address_addr = loaderLibs.find("identity_memory_address").orElseThrow(); + identity_memory_address_addr = loaderLibs.findOrThrow("identity_memory_address"); identity_memory_address_v = abi.downcallHandle( FunctionDescriptor.of(C_POINTER, C_POINTER)); identity_memory_address = insertArguments(identity_memory_address_v, 0, identity_memory_address_addr); - identity_memory_address_3_addr = loaderLibs.find("identity_memory_address_3").orElseThrow(); + identity_memory_address_3_addr = loaderLibs.findOrThrow("identity_memory_address_3"); identity_memory_address_3_v = abi.downcallHandle( FunctionDescriptor.of(C_POINTER, C_POINTER, C_POINTER, C_POINTER)); identity_memory_address_3 = insertArguments(identity_memory_address_3_v, 0, identity_memory_address_3_addr); - args1_addr = loaderLibs.find("args1").orElseThrow(); + args1_addr = loaderLibs.findOrThrow("args1"); args1_v = abi.downcallHandle( FunctionDescriptor.ofVoid(C_LONG_LONG)); args1 = insertArguments(args1_v, 0, args1_addr); - args2_addr = loaderLibs.find("args2").orElseThrow(); + args2_addr = loaderLibs.findOrThrow("args2"); args2_v = abi.downcallHandle( FunctionDescriptor.ofVoid(C_LONG_LONG, C_DOUBLE)); args2 = insertArguments(args2_v, 0, args2_addr); - args3_addr = loaderLibs.find("args3").orElseThrow(); + args3_addr = loaderLibs.findOrThrow("args3"); args3_v = abi.downcallHandle( FunctionDescriptor.ofVoid(C_LONG_LONG, C_DOUBLE, C_LONG_LONG)); args3 = insertArguments(args3_v, 0, args3_addr); - args4_addr = loaderLibs.find("args4").orElseThrow(); + args4_addr = loaderLibs.findOrThrow("args4"); args4_v = abi.downcallHandle( FunctionDescriptor.ofVoid(C_LONG_LONG, C_DOUBLE, C_LONG_LONG, C_DOUBLE)); args4 = insertArguments(args4_v, 0, args4_addr); - args5_addr = loaderLibs.find("args5").orElseThrow(); + args5_addr = loaderLibs.findOrThrow("args5"); args5_v = abi.downcallHandle( FunctionDescriptor.ofVoid(C_LONG_LONG, C_DOUBLE, C_LONG_LONG, C_DOUBLE, C_LONG_LONG)); args5 = insertArguments(args5_v, 0, args5_addr); - args10_addr = loaderLibs.find("args10").orElseThrow(); + args10_addr = loaderLibs.findOrThrow("args10"); args10_v = abi.downcallHandle( FunctionDescriptor.ofVoid(C_LONG_LONG, C_DOUBLE, C_LONG_LONG, C_DOUBLE, C_LONG_LONG, C_DOUBLE, C_LONG_LONG, C_DOUBLE, C_LONG_LONG, C_DOUBLE)); diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/CriticalCalls.java b/test/micro/org/openjdk/bench/java/lang/foreign/CriticalCalls.java index de44b695775..0f384f81685 100644 --- a/test/micro/org/openjdk/bench/java/lang/foreign/CriticalCalls.java +++ b/test/micro/org/openjdk/bench/java/lang/foreign/CriticalCalls.java @@ -61,7 +61,7 @@ public class CriticalCalls { System.loadLibrary("CriticalCalls"); SymbolLookup lookup = SymbolLookup.loaderLookup(); - MemorySegment sumIntsSym = lookup.find("sum_ints").get(); + MemorySegment sumIntsSym = lookup.findOrThrow("sum_ints"); FunctionDescriptor sumIntsDesc = FunctionDescriptor.of(JAVA_INT, ADDRESS, JAVA_INT); PINNED = Linker.nativeLinker().downcallHandle( diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/PointerInvoke.java b/test/micro/org/openjdk/bench/java/lang/foreign/PointerInvoke.java index 47e6c0b1fd1..ab77ae630c1 100644 --- a/test/micro/org/openjdk/bench/java/lang/foreign/PointerInvoke.java +++ b/test/micro/org/openjdk/bench/java/lang/foreign/PointerInvoke.java @@ -58,13 +58,13 @@ public class PointerInvoke extends CLayouts { static { Linker abi = Linker.nativeLinker(); SymbolLookup loaderLibs = SymbolLookup.loaderLookup(); - F_LONG_LONG = abi.downcallHandle(loaderLibs.find("id_long_long").get(), + F_LONG_LONG = abi.downcallHandle(loaderLibs.findOrThrow("id_long_long"), FunctionDescriptor.of(C_LONG_LONG, C_LONG_LONG)); - F_PTR_LONG = abi.downcallHandle(loaderLibs.find("id_ptr_long").get(), + F_PTR_LONG = abi.downcallHandle(loaderLibs.findOrThrow("id_ptr_long"), FunctionDescriptor.of(C_LONG_LONG, C_POINTER)); - F_LONG_PTR = abi.downcallHandle(loaderLibs.find("id_long_ptr").get(), + F_LONG_PTR = abi.downcallHandle(loaderLibs.findOrThrow("id_long_ptr"), FunctionDescriptor.of(C_POINTER, C_LONG_LONG)); - F_PTR_PTR = abi.downcallHandle(loaderLibs.find("id_ptr_ptr").get(), + F_PTR_PTR = abi.downcallHandle(loaderLibs.findOrThrow("id_ptr_ptr"), FunctionDescriptor.of(C_POINTER, C_POINTER)); } diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/QSort.java b/test/micro/org/openjdk/bench/java/lang/foreign/QSort.java index 2050b3b2fb2..76298ae0739 100644 --- a/test/micro/org/openjdk/bench/java/lang/foreign/QSort.java +++ b/test/micro/org/openjdk/bench/java/lang/foreign/QSort.java @@ -58,7 +58,7 @@ public class QSort extends CLayouts { static final int[] INPUT = { 5, 3, 2, 7, 8, 12, 1, 7 }; static final MemorySegment INPUT_SEGMENT; - static MemorySegment qsort_addr = abi.defaultLookup().find("qsort").get(); + static MemorySegment qsort_addr = abi.defaultLookup().findOrThrow("qsort"); static { MemoryLayout layout = MemoryLayout.sequenceLayout(INPUT.length, JAVA_INT); @@ -74,7 +74,7 @@ public class QSort extends CLayouts { FunctionDescriptor.ofVoid(C_POINTER, C_LONG_LONG, C_LONG_LONG, C_POINTER) ); System.loadLibrary("QSort"); - native_compar = SymbolLookup.loaderLookup().find("compar").orElseThrow(); + native_compar = SymbolLookup.loaderLookup().findOrThrow("compar"); panama_upcall_compar = abi.upcallStub( lookup().findStatic(QSort.class, "panama_upcall_compar", diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/StrLenTest.java b/test/micro/org/openjdk/bench/java/lang/foreign/StrLenTest.java index 574268f1ffa..2ad723eadf3 100644 --- a/test/micro/org/openjdk/bench/java/lang/foreign/StrLenTest.java +++ b/test/micro/org/openjdk/bench/java/lang/foreign/StrLenTest.java @@ -69,7 +69,7 @@ public class StrLenTest extends CLayouts { static { Linker abi = Linker.nativeLinker(); - STRLEN = abi.downcallHandle(abi.defaultLookup().find("strlen").get(), + STRLEN = abi.downcallHandle(abi.defaultLookup().findOrThrow("strlen"), FunctionDescriptor.of(C_INT, C_POINTER)); } diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/ToCStringTest.java b/test/micro/org/openjdk/bench/java/lang/foreign/ToCStringTest.java index 051ad94758e..7ba9384958e 100644 --- a/test/micro/org/openjdk/bench/java/lang/foreign/ToCStringTest.java +++ b/test/micro/org/openjdk/bench/java/lang/foreign/ToCStringTest.java @@ -66,7 +66,7 @@ public class ToCStringTest extends CLayouts { static { Linker abi = Linker.nativeLinker(); - STRLEN = abi.downcallHandle(abi.defaultLookup().find("strlen").get(), + STRLEN = abi.downcallHandle(abi.defaultLookup().findOrThrow("strlen"), FunctionDescriptor.of(C_INT, C_POINTER)); } diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/Upcalls.java b/test/micro/org/openjdk/bench/java/lang/foreign/Upcalls.java index 4f1c0d5b528..1b852e6ff9d 100644 --- a/test/micro/org/openjdk/bench/java/lang/foreign/Upcalls.java +++ b/test/micro/org/openjdk/bench/java/lang/foreign/Upcalls.java @@ -120,7 +120,7 @@ public class Upcalls extends CLayouts { static MethodHandle linkFunc(String name, FunctionDescriptor baseDesc) { return abi.downcallHandle( - SymbolLookup.loaderLookup().find(name).orElseThrow(), + SymbolLookup.loaderLookup().findOrThrow(name), baseDesc.appendArgumentLayouts(C_POINTER) ); } diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/points/support/PanamaPoint.java b/test/micro/org/openjdk/bench/java/lang/foreign/points/support/PanamaPoint.java index fbcf3ba5528..dca63267dc7 100644 --- a/test/micro/org/openjdk/bench/java/lang/foreign/points/support/PanamaPoint.java +++ b/test/micro/org/openjdk/bench/java/lang/foreign/points/support/PanamaPoint.java @@ -48,11 +48,11 @@ public class PanamaPoint extends CLayouts implements AutoCloseable { System.loadLibrary("Point"); SymbolLookup loaderLibs = SymbolLookup.loaderLookup(); MH_distance = abi.downcallHandle( - loaderLibs.find("distance").get(), + loaderLibs.findOrThrow("distance"), FunctionDescriptor.of(C_DOUBLE, LAYOUT, LAYOUT) ); MH_distance_ptrs = abi.downcallHandle( - loaderLibs.find("distance_ptrs").get(), + loaderLibs.findOrThrow("distance_ptrs"), FunctionDescriptor.of(C_DOUBLE, C_POINTER, C_POINTER) ); } diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/xor/GetArrayForeignXorOpCriticalImpl.java b/test/micro/org/openjdk/bench/java/lang/foreign/xor/GetArrayForeignXorOpCriticalImpl.java index 250ba1157d7..38d4c72a20a 100644 --- a/test/micro/org/openjdk/bench/java/lang/foreign/xor/GetArrayForeignXorOpCriticalImpl.java +++ b/test/micro/org/openjdk/bench/java/lang/foreign/xor/GetArrayForeignXorOpCriticalImpl.java @@ -17,7 +17,7 @@ public class GetArrayForeignXorOpCriticalImpl implements XorOp { Linker linker; linker = Linker.nativeLinker(); FunctionDescriptor xor_op_func = FunctionDescriptor.ofVoid(C_POINTER, C_POINTER, C_INT); - xor_op = linker.downcallHandle(SymbolLookup.loaderLookup().find("xor_op").orElseThrow(), xor_op_func, critical(true)); + xor_op = linker.downcallHandle(SymbolLookup.loaderLookup().findOrThrow("xor_op"), xor_op_func, critical(true)); } static final MethodHandle xor_op; diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/xor/GetArrayForeignXorOpImpl.java b/test/micro/org/openjdk/bench/java/lang/foreign/xor/GetArrayForeignXorOpImpl.java index e033127de6a..d59203155cd 100644 --- a/test/micro/org/openjdk/bench/java/lang/foreign/xor/GetArrayForeignXorOpImpl.java +++ b/test/micro/org/openjdk/bench/java/lang/foreign/xor/GetArrayForeignXorOpImpl.java @@ -19,7 +19,7 @@ public class GetArrayForeignXorOpImpl implements XorOp { Linker linker; linker = Linker.nativeLinker(); FunctionDescriptor xor_op_func = FunctionDescriptor.ofVoid(C_POINTER, C_POINTER, C_INT); - xor_op = linker.downcallHandle(SymbolLookup.loaderLookup().find("xor_op").orElseThrow(), xor_op_func, critical(false)); + xor_op = linker.downcallHandle(SymbolLookup.loaderLookup().findOrThrow("xor_op"), xor_op_func, critical(false)); } static final MethodHandle xor_op; diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/xor/GetArrayForeignXorOpInitImpl.java b/test/micro/org/openjdk/bench/java/lang/foreign/xor/GetArrayForeignXorOpInitImpl.java index 8a3df5d4f39..489255ad111 100644 --- a/test/micro/org/openjdk/bench/java/lang/foreign/xor/GetArrayForeignXorOpInitImpl.java +++ b/test/micro/org/openjdk/bench/java/lang/foreign/xor/GetArrayForeignXorOpInitImpl.java @@ -20,7 +20,7 @@ public class GetArrayForeignXorOpInitImpl implements XorOp { Linker linker; linker = Linker.nativeLinker(); FunctionDescriptor xor_op_func = FunctionDescriptor.ofVoid(C_POINTER, C_POINTER, C_INT); - xor_op = linker.downcallHandle(SymbolLookup.loaderLookup().find("xor_op").orElseThrow(), xor_op_func, critical(false)); + xor_op = linker.downcallHandle(SymbolLookup.loaderLookup().findOrThrow("xor_op"), xor_op_func, critical(false)); } static final MethodHandle xor_op; diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/xor/GetArrayUnsafeXorOpImpl.java b/test/micro/org/openjdk/bench/java/lang/foreign/xor/GetArrayUnsafeXorOpImpl.java index 4175dd03121..ae6869c40d5 100644 --- a/test/micro/org/openjdk/bench/java/lang/foreign/xor/GetArrayUnsafeXorOpImpl.java +++ b/test/micro/org/openjdk/bench/java/lang/foreign/xor/GetArrayUnsafeXorOpImpl.java @@ -25,7 +25,7 @@ public class GetArrayUnsafeXorOpImpl implements XorOp { Linker linker; linker = Linker.nativeLinker(); FunctionDescriptor xor_op_func = FunctionDescriptor.ofVoid(C_POINTER, C_POINTER, C_INT); - xor_op = linker.downcallHandle(SymbolLookup.loaderLookup().find("xor_op").orElseThrow(), xor_op_func, critical(false)); + xor_op = linker.downcallHandle(SymbolLookup.loaderLookup().findOrThrow("xor_op"), xor_op_func, critical(false)); } static final MethodHandle xor_op;