< prev index next >

test/compiler/jvmci/compilerToVM/GetResolvedJavaTypeTest.java

Print this page

        

*** 25,39 **** --- 25,41 ---- * @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.GetResolvedJavaTypeTest * @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 * -XX:+UseCompressedOops * compiler.jvmci.compilerToVM.GetResolvedJavaTypeTest * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockExperimentalVMOptions
*** 43,81 **** */ package compiler.jvmci.compilerToVM; import java.lang.reflect.Field; import jdk.vm.ci.hotspot.CompilerToVMHelper; ! import jdk.vm.ci.hotspot.HotSpotConstantPool; ! import jdk.vm.ci.hotspot.HotSpotResolvedJavaMethodImpl; ! import jdk.vm.ci.hotspot.HotSpotResolvedObjectTypeImpl; ! import jdk.vm.ci.hotspot.MetaspaceWrapperObject; import jdk.test.lib.Asserts; import jdk.test.lib.Utils; import sun.hotspot.WhiteBox; import sun.misc.Unsafe; public class GetResolvedJavaTypeTest { private static enum TestCase { NULL_BASE { @Override ! HotSpotResolvedObjectTypeImpl getResolvedJavaType() { return CompilerToVMHelper.getResolvedJavaType( null, getPtrToKlass(), COMPRESSED); } }, JAVA_METHOD_BASE { @Override ! HotSpotResolvedObjectTypeImpl getResolvedJavaType() { ! HotSpotResolvedJavaMethodImpl methodInstance = CompilerToVMHelper.getResolvedJavaMethodAtSlot( TEST_CLASS, 0); Field field; try { ! field = HotSpotResolvedJavaMethodImpl ! .class.getDeclaredField("metaspaceMethod"); field.setAccessible(true); field.set(methodInstance, getPtrToKlass()); } catch (ReflectiveOperationException e) { throw new Error("TEST BUG : " + e, e); } --- 45,84 ---- */ package compiler.jvmci.compilerToVM; import java.lang.reflect.Field; + import jdk.vm.ci.meta.ConstantPool; import jdk.vm.ci.hotspot.CompilerToVMHelper; ! import jdk.vm.ci.hotspot.HotSpotResolvedJavaMethod; ! import jdk.vm.ci.hotspot.HotSpotResolvedObjectType; ! import jdk.vm.ci.hotspot.PublicMetaspaceWrapperObject; import jdk.test.lib.Asserts; import jdk.test.lib.Utils; import sun.hotspot.WhiteBox; import sun.misc.Unsafe; public class GetResolvedJavaTypeTest { private static enum TestCase { NULL_BASE { @Override ! HotSpotResolvedObjectType getResolvedJavaType() { return CompilerToVMHelper.getResolvedJavaType( null, getPtrToKlass(), COMPRESSED); } }, JAVA_METHOD_BASE { @Override ! HotSpotResolvedObjectType getResolvedJavaType() { ! HotSpotResolvedJavaMethod methodInstance = CompilerToVMHelper.getResolvedJavaMethodAtSlot( TEST_CLASS, 0); Field field; try { ! // jdk.vm.ci.hotspot.HotSpotResolvedJavaMethodImpl.metaspaceMethod ! field = methodInstance.getClass() ! .getDeclaredField("metaspaceMethod"); field.setAccessible(true); field.set(methodInstance, getPtrToKlass()); } catch (ReflectiveOperationException e) { throw new Error("TEST BUG : " + e, e); }
*** 84,158 **** 0L, COMPRESSED); } }, CONSTANT_POOL_BASE { @Override ! HotSpotResolvedObjectTypeImpl getResolvedJavaType() { ! HotSpotConstantPool cpInst; try { cpInst = CompilerToVMHelper.getConstantPool(null, getPtrToKlass()); ! Field field = HotSpotConstantPool.class .getDeclaredField("metaspaceConstantPool"); field.setAccessible(true); field.set(cpInst, getPtrToKlass()); } catch (ReflectiveOperationException e) { ! throw new Error("TESTBUG : " + e.getMessage(), e); } return CompilerToVMHelper.getResolvedJavaType(cpInst, 0L, COMPRESSED); } }, CONSTANT_POOL_BASE_IN_TWO { @Override ! HotSpotResolvedObjectTypeImpl getResolvedJavaType() { long ptr = getPtrToKlass(); ! HotSpotConstantPool cpInst = HotSpotResolvedObjectTypeImpl ! .fromObjectClass(TEST_CLASS).getConstantPool(); try { ! Field field = HotSpotConstantPool.class .getDeclaredField("metaspaceConstantPool"); field.setAccessible(true); field.set(cpInst, ptr / 2L); } catch (ReflectiveOperationException e) { ! throw new Error("TESTBUG : " + e.getMessage(), e); } return CompilerToVMHelper.getResolvedJavaType(cpInst, ptr - ptr / 2L, COMPRESSED); } }, CONSTANT_POOL_BASE_ZERO { @Override ! HotSpotResolvedObjectTypeImpl getResolvedJavaType() { long ptr = getPtrToKlass(); ! HotSpotConstantPool cpInst = HotSpotResolvedObjectTypeImpl ! .fromObjectClass(TEST_CLASS).getConstantPool(); try { ! Field field = HotSpotConstantPool.class .getDeclaredField("metaspaceConstantPool"); field.setAccessible(true); field.set(cpInst, 0L); } catch (ReflectiveOperationException e) { ! throw new Error("TESTBUG : " + e.getMessage(), e); } return CompilerToVMHelper.getResolvedJavaType(cpInst, ptr, COMPRESSED); } }, OBJECT_TYPE_BASE { @Override ! HotSpotResolvedObjectTypeImpl getResolvedJavaType() { ! HotSpotResolvedObjectTypeImpl type ! = HotSpotResolvedObjectTypeImpl.fromObjectClass( OBJECT_TYPE_BASE.getClass()); long ptrToClass = UNSAFE.getKlassPointer(OBJECT_TYPE_BASE); return CompilerToVMHelper.getResolvedJavaType(type, getPtrToKlass() - ptrToClass, COMPRESSED); } }, ; ! abstract HotSpotResolvedObjectTypeImpl getResolvedJavaType(); } private static final Unsafe UNSAFE = Utils.getUnsafe(); private static final WhiteBox WB = WhiteBox.getWhiteBox(); private static final long PTR = UNSAFE.getKlassPointer( --- 87,164 ---- 0L, COMPRESSED); } }, CONSTANT_POOL_BASE { @Override ! HotSpotResolvedObjectType getResolvedJavaType() { ! ConstantPool cpInst; try { cpInst = CompilerToVMHelper.getConstantPool(null, getPtrToKlass()); ! // jdk.vm.ci.hotspot.HotSpotConstantPool.metaspaceConstantPool ! Field field = cpInst.getClass() .getDeclaredField("metaspaceConstantPool"); field.setAccessible(true); field.set(cpInst, getPtrToKlass()); } catch (ReflectiveOperationException e) { ! throw new Error("TESTBUG : " + e, e); } return CompilerToVMHelper.getResolvedJavaType(cpInst, 0L, COMPRESSED); } }, CONSTANT_POOL_BASE_IN_TWO { @Override ! HotSpotResolvedObjectType getResolvedJavaType() { long ptr = getPtrToKlass(); ! ConstantPool cpInst = HotSpotResolvedObjectType ! .fromObjectClass(TEST_CLASS) ! .getConstantPool(); try { ! Field field = cpInst.getClass() .getDeclaredField("metaspaceConstantPool"); field.setAccessible(true); field.set(cpInst, ptr / 2L); } catch (ReflectiveOperationException e) { ! throw new Error("TESTBUG : " + e, e); } return CompilerToVMHelper.getResolvedJavaType(cpInst, ptr - ptr / 2L, COMPRESSED); } }, CONSTANT_POOL_BASE_ZERO { @Override ! HotSpotResolvedObjectType getResolvedJavaType() { long ptr = getPtrToKlass(); ! ConstantPool cpInst = HotSpotResolvedObjectType ! .fromObjectClass(TEST_CLASS) ! .getConstantPool(); try { ! Field field = cpInst.getClass() .getDeclaredField("metaspaceConstantPool"); field.setAccessible(true); field.set(cpInst, 0L); } catch (ReflectiveOperationException e) { ! throw new Error("TESTBUG : " + e, e); } return CompilerToVMHelper.getResolvedJavaType(cpInst, ptr, COMPRESSED); } }, OBJECT_TYPE_BASE { @Override ! HotSpotResolvedObjectType getResolvedJavaType() { ! HotSpotResolvedObjectType type ! = HotSpotResolvedObjectType.fromObjectClass( OBJECT_TYPE_BASE.getClass()); long ptrToClass = UNSAFE.getKlassPointer(OBJECT_TYPE_BASE); return CompilerToVMHelper.getResolvedJavaType(type, getPtrToKlass() - ptrToClass, COMPRESSED); } }, ; ! abstract HotSpotResolvedObjectType getResolvedJavaType(); } private static final Unsafe UNSAFE = Utils.getUnsafe(); private static final WhiteBox WB = WhiteBox.getWhiteBox(); private static final long PTR = UNSAFE.getKlassPointer(
*** 174,186 **** return WB.getObjectAddress(base) + UNSAFE.staticFieldOffset(field); } public void test(TestCase testCase) { System.out.println(testCase.name()); ! HotSpotResolvedObjectTypeImpl type = testCase.getResolvedJavaType(); ! Asserts.assertEQ(type.mirror(), TEST_CLASS, testCase + ! " Unexpected Class returned by getResolvedJavaType"); } public static void main(String[] args) { GetResolvedJavaTypeTest test = new GetResolvedJavaTypeTest(); for (TestCase testCase : TestCase.values()) { --- 180,193 ---- return WB.getObjectAddress(base) + UNSAFE.staticFieldOffset(field); } public void test(TestCase testCase) { System.out.println(testCase.name()); ! HotSpotResolvedObjectType type = testCase.getResolvedJavaType(); ! Asserts.assertEQ(TEST_CLASS, ! CompilerToVMHelper.getMirror(type), ! testCase + " : unexpected class returned"); } public static void main(String[] args) { GetResolvedJavaTypeTest test = new GetResolvedJavaTypeTest(); for (TestCase testCase : TestCase.values()) {
*** 190,202 **** testMetaspaceWrapperBase(); } private static void testMetaspaceWrapperBase() { try { ! HotSpotResolvedObjectTypeImpl type = CompilerToVMHelper.getResolvedJavaType( ! new MetaspaceWrapperObject() { @Override public long getMetaspacePointer() { return getPtrToKlass(); } }, 0L, COMPRESSED); --- 197,209 ---- testMetaspaceWrapperBase(); } private static void testMetaspaceWrapperBase() { try { ! HotSpotResolvedObjectType type = CompilerToVMHelper.getResolvedJavaType( ! new PublicMetaspaceWrapperObject() { @Override public long getMetaspacePointer() { return getPtrToKlass(); } }, 0L, COMPRESSED);
*** 207,217 **** } } private static void testObjectBase() { try { ! HotSpotResolvedObjectTypeImpl type = CompilerToVMHelper.getResolvedJavaType(new Object(), 0L, COMPRESSED); throw new AssertionError("Test OBJECT_BASE." + " Expected IllegalArgumentException has not been caught"); } catch (IllegalArgumentException iae) { --- 214,224 ---- } } private static void testObjectBase() { try { ! HotSpotResolvedObjectType type = CompilerToVMHelper.getResolvedJavaType(new Object(), 0L, COMPRESSED); throw new AssertionError("Test OBJECT_BASE." + " Expected IllegalArgumentException has not been caught"); } catch (IllegalArgumentException iae) {
< prev index next >