< prev index next >

test/compiler/jvmci/compilerToVM/GetResolvedJavaMethodTest.java

Print this page

        

*** 25,49 **** * @test * @bug 8136421 * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64" * @library / /testlibrary /../../test/lib * @compile ../common/CompilerToVMHelper.java * @build compiler.jvmci.compilerToVM.GetResolvedJavaMethodTest * @run main ClassFileInstaller * sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission * jdk.vm.ci.hotspot.CompilerToVMHelper * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockExperimentalVMOptions * -XX:+EnableJVMCI -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI * compiler.jvmci.compilerToVM.GetResolvedJavaMethodTest */ package compiler.jvmci.compilerToVM; import jdk.vm.ci.hotspot.CompilerToVMHelper; ! import jdk.vm.ci.hotspot.HotSpotResolvedJavaMethodImpl; ! import jdk.vm.ci.hotspot.MetaspaceWrapperObject; import jdk.test.lib.Asserts; import jdk.test.lib.Utils; import sun.hotspot.WhiteBox; import sun.misc.Unsafe; --- 25,51 ---- * @test * @bug 8136421 * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64" * @library / /testlibrary /../../test/lib * @compile ../common/CompilerToVMHelper.java + * ../common/PublicMetaspaceWrapperObject.java * @build compiler.jvmci.compilerToVM.GetResolvedJavaMethodTest * @run main ClassFileInstaller * sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission * jdk.vm.ci.hotspot.CompilerToVMHelper + * jdk.vm.ci.hotspot.PublicMetaspaceWrapperObject * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockExperimentalVMOptions * -XX:+EnableJVMCI -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI * compiler.jvmci.compilerToVM.GetResolvedJavaMethodTest */ package compiler.jvmci.compilerToVM; import jdk.vm.ci.hotspot.CompilerToVMHelper; ! import jdk.vm.ci.hotspot.HotSpotResolvedJavaMethod; ! import jdk.vm.ci.hotspot.PublicMetaspaceWrapperObject; import jdk.test.lib.Asserts; import jdk.test.lib.Utils; import sun.hotspot.WhiteBox; import sun.misc.Unsafe;
*** 51,136 **** public class GetResolvedJavaMethodTest { private static enum TestCase { NULL_BASE { @Override ! HotSpotResolvedJavaMethodImpl getResolvedJavaMethod() { return CompilerToVMHelper.getResolvedJavaMethod( null, getPtrToMethod()); } }, JAVA_METHOD_BASE { @Override ! HotSpotResolvedJavaMethodImpl getResolvedJavaMethod() { ! HotSpotResolvedJavaMethodImpl methodInstance = CompilerToVMHelper.getResolvedJavaMethodAtSlot( TEST_CLASS, 0); - Field field; try { ! field = HotSpotResolvedJavaMethodImpl ! .class.getDeclaredField("metaspaceMethod"); ! field.setAccessible(true); ! field.set(methodInstance, getPtrToMethod()); } catch (ReflectiveOperationException e) { throw new Error("TEST BUG : " + e, e); } return CompilerToVMHelper.getResolvedJavaMethod( methodInstance, 0L); } }, JAVA_METHOD_BASE_IN_TWO { @Override ! HotSpotResolvedJavaMethodImpl getResolvedJavaMethod() { long ptr = getPtrToMethod(); ! HotSpotResolvedJavaMethodImpl methodInstance = CompilerToVMHelper.getResolvedJavaMethodAtSlot( TEST_CLASS, 0); - Field field; try { ! field = HotSpotResolvedJavaMethodImpl ! .class.getDeclaredField("metaspaceMethod"); ! field.setAccessible(true); ! field.set(methodInstance, ptr / 2L); } catch (ReflectiveOperationException e) { ! throw new Error("TESTBUG : " + e.getMessage(), e); } return CompilerToVMHelper.getResolvedJavaMethod(methodInstance, ptr - ptr / 2L); } }, JAVA_METHOD_BASE_ZERO { @Override ! HotSpotResolvedJavaMethodImpl getResolvedJavaMethod() { long ptr = getPtrToMethod(); ! HotSpotResolvedJavaMethodImpl methodInstance = CompilerToVMHelper.getResolvedJavaMethodAtSlot( TEST_CLASS, 0); - Field field; try { ! field = HotSpotResolvedJavaMethodImpl ! .class.getDeclaredField("metaspaceMethod"); ! field.setAccessible(true); ! field.set(methodInstance, 0L); } catch (ReflectiveOperationException e) { ! throw new Error("TESTBUG : " + e.getMessage(), e); } return CompilerToVMHelper.getResolvedJavaMethod(methodInstance, ptr); } } ; ! abstract HotSpotResolvedJavaMethodImpl getResolvedJavaMethod(); } private static final Unsafe UNSAFE = Utils.getUnsafe(); private static final WhiteBox WB = WhiteBox.getWhiteBox(); private static final Class<?> TEST_CLASS = GetResolvedJavaMethodTest.class; private static final long PTR; static { ! HotSpotResolvedJavaMethodImpl method = CompilerToVMHelper.getResolvedJavaMethodAtSlot(TEST_CLASS, 0); ! PTR = method.getMetaspacePointer(); } private static long getPtrToMethod() { Field field; try { --- 53,137 ---- public class GetResolvedJavaMethodTest { private static enum TestCase { NULL_BASE { @Override ! HotSpotResolvedJavaMethod getResolvedJavaMethod() { return CompilerToVMHelper.getResolvedJavaMethod( null, getPtrToMethod()); } }, JAVA_METHOD_BASE { @Override ! HotSpotResolvedJavaMethod getResolvedJavaMethod() { ! HotSpotResolvedJavaMethod methodInstance = CompilerToVMHelper.getResolvedJavaMethodAtSlot( TEST_CLASS, 0); try { ! METASPACE_METHOD_FIELD.set(methodInstance, ! getPtrToMethod()); } catch (ReflectiveOperationException e) { throw new Error("TEST BUG : " + e, e); } return CompilerToVMHelper.getResolvedJavaMethod( methodInstance, 0L); } }, JAVA_METHOD_BASE_IN_TWO { @Override ! HotSpotResolvedJavaMethod getResolvedJavaMethod() { long ptr = getPtrToMethod(); ! HotSpotResolvedJavaMethod methodInstance = CompilerToVMHelper.getResolvedJavaMethodAtSlot( TEST_CLASS, 0); try { ! METASPACE_METHOD_FIELD.set(methodInstance, ptr / 2L); } catch (ReflectiveOperationException e) { ! throw new Error("TESTBUG : " + e, e); } return CompilerToVMHelper.getResolvedJavaMethod(methodInstance, ptr - ptr / 2L); } }, JAVA_METHOD_BASE_ZERO { @Override ! HotSpotResolvedJavaMethod getResolvedJavaMethod() { long ptr = getPtrToMethod(); ! HotSpotResolvedJavaMethod methodInstance = CompilerToVMHelper.getResolvedJavaMethodAtSlot( TEST_CLASS, 0); try { ! METASPACE_METHOD_FIELD.set(methodInstance, 0L); } catch (ReflectiveOperationException e) { ! throw new Error("TESTBUG : " + e, e); } return CompilerToVMHelper.getResolvedJavaMethod(methodInstance, ptr); } } ; ! abstract HotSpotResolvedJavaMethod getResolvedJavaMethod(); } private static final Unsafe UNSAFE = Utils.getUnsafe(); private static final WhiteBox WB = WhiteBox.getWhiteBox(); + private static final Field METASPACE_METHOD_FIELD; private static final Class<?> TEST_CLASS = GetResolvedJavaMethodTest.class; private static final long PTR; static { ! HotSpotResolvedJavaMethod method = CompilerToVMHelper.getResolvedJavaMethodAtSlot(TEST_CLASS, 0); ! try { ! // jdk.vm.ci.hotspot.HotSpotResolvedJavaMethodImpl.metaspaceMethod ! METASPACE_METHOD_FIELD = method.getClass() ! .getDeclaredField("metaspaceMethod"); ! METASPACE_METHOD_FIELD.setAccessible(true); ! PTR = (long) METASPACE_METHOD_FIELD.get(method); ! } catch (ReflectiveOperationException e) { ! throw new Error("TESTBUG : " + e, e); ! } ! } private static long getPtrToMethod() { Field field; try {
*** 142,155 **** return WB.getObjectAddress(base) + UNSAFE.staticFieldOffset(field); } public void test(TestCase testCase) { System.out.println(testCase.name()); ! HotSpotResolvedJavaMethodImpl result = testCase.getResolvedJavaMethod(); Asserts.assertNotNull(result, testCase + " : got null"); ! Asserts.assertEQ(result.getDeclaringClass().mirror(), TEST_CLASS, ! testCase + " : returned method has unexpected declaring class"); } public static void main(String[] args) { GetResolvedJavaMethodTest test = new GetResolvedJavaMethodTest(); for (TestCase testCase : TestCase.values()) { --- 143,157 ---- return WB.getObjectAddress(base) + UNSAFE.staticFieldOffset(field); } public void test(TestCase testCase) { System.out.println(testCase.name()); ! HotSpotResolvedJavaMethod result = testCase.getResolvedJavaMethod(); Asserts.assertNotNull(result, testCase + " : got null"); ! Asserts.assertEQ(TEST_CLASS, ! CompilerToVMHelper.getMirror(result.getDeclaringClass()), ! testCase + " : unexpected declaring class"); } public static void main(String[] args) { GetResolvedJavaMethodTest test = new GetResolvedJavaMethodTest(); for (TestCase testCase : TestCase.values()) {
*** 159,189 **** testMetaspaceWrapperBase(); } private static void testMetaspaceWrapperBase() { try { ! HotSpotResolvedJavaMethodImpl method = CompilerToVMHelper.getResolvedJavaMethod( ! new MetaspaceWrapperObject() { @Override public long getMetaspacePointer() { return getPtrToMethod(); } }, 0L); throw new AssertionError("Test METASPACE_WRAPPER_BASE." + " Expected IllegalArgumentException has not been caught"); ! } catch (IllegalArgumentException iae) { // expected } } private static void testObjectBase() { try { ! HotSpotResolvedJavaMethodImpl method = CompilerToVMHelper.getResolvedJavaMethod(new Object(), 0L); throw new AssertionError("Test OBJECT_BASE." + " Expected IllegalArgumentException has not been caught"); ! } catch (IllegalArgumentException iae) { // expected } } } --- 161,191 ---- testMetaspaceWrapperBase(); } private static void testMetaspaceWrapperBase() { try { ! HotSpotResolvedJavaMethod method = CompilerToVMHelper.getResolvedJavaMethod( ! new PublicMetaspaceWrapperObject() { @Override public long getMetaspacePointer() { return getPtrToMethod(); } }, 0L); throw new AssertionError("Test METASPACE_WRAPPER_BASE." + " Expected IllegalArgumentException has not been caught"); ! } catch (IllegalArgumentException e) { // expected } } private static void testObjectBase() { try { ! HotSpotResolvedJavaMethod method = CompilerToVMHelper.getResolvedJavaMethod(new Object(), 0L); throw new AssertionError("Test OBJECT_BASE." + " Expected IllegalArgumentException has not been caught"); ! } catch (IllegalArgumentException e) { // expected } } }
< prev index next >