< prev index next >

test/compiler/jvmci/compilerToVM/GetResolvedJavaMethodTest.java

Print this page




  35  *        sun.hotspot.WhiteBox
  36  * @run driver ClassFileInstaller sun.hotspot.WhiteBox
  37  *                                sun.hotspot.WhiteBox$WhiteBoxPermission
  38  * @run main/othervm -Xbootclasspath/a:.
  39  *                   -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI
  40  *                   -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI
  41  *                   compiler.jvmci.compilerToVM.GetResolvedJavaMethodTest
  42  */
  43 
  44 package compiler.jvmci.compilerToVM;
  45 
  46 import jdk.internal.misc.Unsafe;
  47 import jdk.test.lib.Asserts;
  48 import jdk.test.lib.unsafe.UnsafeHelper;
  49 import jdk.vm.ci.hotspot.CompilerToVMHelper;
  50 import jdk.vm.ci.hotspot.HotSpotResolvedJavaMethod;
  51 import jdk.vm.ci.hotspot.PublicMetaspaceWrapperObject;
  52 import sun.hotspot.WhiteBox;
  53 
  54 import java.lang.reflect.Field;

  55 
  56 public class GetResolvedJavaMethodTest {
  57     private static enum TestCase {
  58         NULL_BASE {
  59             @Override
  60             HotSpotResolvedJavaMethod getResolvedJavaMethod() {
  61                 return CompilerToVMHelper.getResolvedJavaMethod(
  62                         null, getPtrToMethod());
  63             }
  64         },
  65         JAVA_METHOD_BASE {
  66             @Override
  67             HotSpotResolvedJavaMethod getResolvedJavaMethod() {
  68                 HotSpotResolvedJavaMethod methodInstance
  69                         = CompilerToVMHelper.getResolvedJavaMethodAtSlot(
  70                                 TEST_CLASS, 0);
  71                 try {
  72                     METASPACE_METHOD_FIELD.set(methodInstance,
  73                             getPtrToMethod());
  74                 } catch (ReflectiveOperationException e) {
  75                     throw new Error("TEST BUG : " + e, e);
  76                 }
  77                 return CompilerToVMHelper.getResolvedJavaMethod(
  78                         methodInstance, 0L);
  79             }
  80         },
  81         JAVA_METHOD_BASE_IN_TWO {
  82             @Override
  83             HotSpotResolvedJavaMethod getResolvedJavaMethod() {
  84                 long ptr = getPtrToMethod();
  85                 HotSpotResolvedJavaMethod methodInstance
  86                         = CompilerToVMHelper.getResolvedJavaMethodAtSlot(
  87                         TEST_CLASS, 0);
  88                 try {
  89                     METASPACE_METHOD_FIELD.set(methodInstance, ptr / 2L);
  90                 } catch (ReflectiveOperationException e) {
  91                     throw new Error("TESTBUG : " + e, e);
  92                 }
  93                 return CompilerToVMHelper.getResolvedJavaMethod(methodInstance,
  94                         ptr - ptr / 2L);
  95             }
  96         },
  97         JAVA_METHOD_BASE_ZERO {
  98             @Override
  99             HotSpotResolvedJavaMethod getResolvedJavaMethod() {
 100                 long ptr = getPtrToMethod();
 101                 HotSpotResolvedJavaMethod methodInstance
 102                         = CompilerToVMHelper.getResolvedJavaMethodAtSlot(
 103                         TEST_CLASS, 0);
 104                 try {
 105                     METASPACE_METHOD_FIELD.set(methodInstance, 0L);
 106                 } catch (ReflectiveOperationException e) {
 107                     throw new Error("TESTBUG : " + e, e);
 108                 }
 109                 return CompilerToVMHelper.getResolvedJavaMethod(methodInstance,
 110                         ptr);
 111             }
 112         }
 113         ;
 114         abstract HotSpotResolvedJavaMethod getResolvedJavaMethod();
 115     }
 116 
 117     private static final Unsafe UNSAFE = UnsafeHelper.getUnsafe();
 118     private static final WhiteBox WB = WhiteBox.getWhiteBox();
 119     private static final Field METASPACE_METHOD_FIELD;
 120     private static final Class<?> TEST_CLASS = GetResolvedJavaMethodTest.class;

 121     private static final long PTR;
 122     static  {
 123         HotSpotResolvedJavaMethod method
 124                 = CompilerToVMHelper.getResolvedJavaMethodAtSlot(TEST_CLASS, 0);




 125         try {
 126             // jdk.vm.ci.hotspot.HotSpotResolvedJavaMethodImpl.metaspaceMethod
 127             METASPACE_METHOD_FIELD = method.getClass()
 128                     .getDeclaredField("metaspaceMethod");
 129             METASPACE_METHOD_FIELD.setAccessible(true);
 130             PTR = (long) METASPACE_METHOD_FIELD.get(method);
 131         } catch (ReflectiveOperationException e) {
 132             throw new Error("TESTBUG : " + e, e);
 133         }
 134 
 135     }
 136 
 137     private static long getPtrToMethod() {
 138         Field field;
 139         try {
 140             field = TEST_CLASS.getDeclaredField("PTR");
 141         } catch (NoSuchFieldException e) {
 142             throw new Error("TEST BUG : " + e, e);
 143         }
 144         Object base = UNSAFE.staticFieldBase(field);
 145         return WB.getObjectAddress(base) + UNSAFE.staticFieldOffset(field);
 146     }
 147 
 148     public void test(TestCase testCase) {
 149         System.out.println(testCase.name());
 150         HotSpotResolvedJavaMethod result = testCase.getResolvedJavaMethod();




  35  *        sun.hotspot.WhiteBox
  36  * @run driver ClassFileInstaller sun.hotspot.WhiteBox
  37  *                                sun.hotspot.WhiteBox$WhiteBoxPermission
  38  * @run main/othervm -Xbootclasspath/a:.
  39  *                   -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI
  40  *                   -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI
  41  *                   compiler.jvmci.compilerToVM.GetResolvedJavaMethodTest
  42  */
  43 
  44 package compiler.jvmci.compilerToVM;
  45 
  46 import jdk.internal.misc.Unsafe;
  47 import jdk.test.lib.Asserts;
  48 import jdk.test.lib.unsafe.UnsafeHelper;
  49 import jdk.vm.ci.hotspot.CompilerToVMHelper;
  50 import jdk.vm.ci.hotspot.HotSpotResolvedJavaMethod;
  51 import jdk.vm.ci.hotspot.PublicMetaspaceWrapperObject;
  52 import sun.hotspot.WhiteBox;
  53 
  54 import java.lang.reflect.Field;
  55 import java.lang.reflect.Method;
  56 
  57 public class GetResolvedJavaMethodTest {
  58     private static enum TestCase {
  59         NULL_BASE {
  60             @Override
  61             HotSpotResolvedJavaMethod getResolvedJavaMethod() {
  62                 return CompilerToVMHelper.getResolvedJavaMethod(
  63                         null, getPtrToMethod());
  64             }
  65         },
  66         JAVA_METHOD_BASE {
  67             @Override
  68             HotSpotResolvedJavaMethod getResolvedJavaMethod() {
  69                 HotSpotResolvedJavaMethod methodInstance = TEST_METHOD;


  70                 try {
  71                     METASPACE_METHOD_FIELD.set(methodInstance,
  72                             getPtrToMethod());
  73                 } catch (ReflectiveOperationException e) {
  74                     throw new Error("TEST BUG : " + e, e);
  75                 }
  76                 return CompilerToVMHelper.getResolvedJavaMethod(
  77                         methodInstance, 0L);
  78             }
  79         },
  80         JAVA_METHOD_BASE_IN_TWO {
  81             @Override
  82             HotSpotResolvedJavaMethod getResolvedJavaMethod() {
  83                 long ptr = getPtrToMethod();
  84                 HotSpotResolvedJavaMethod methodInstance = TEST_METHOD;


  85                 try {
  86                     METASPACE_METHOD_FIELD.set(methodInstance, ptr / 2L);
  87                 } catch (ReflectiveOperationException e) {
  88                     throw new Error("TESTBUG : " + e, e);
  89                 }
  90                 return CompilerToVMHelper.getResolvedJavaMethod(methodInstance,
  91                         ptr - ptr / 2L);
  92             }
  93         },
  94         JAVA_METHOD_BASE_ZERO {
  95             @Override
  96             HotSpotResolvedJavaMethod getResolvedJavaMethod() {
  97                 long ptr = getPtrToMethod();
  98                 HotSpotResolvedJavaMethod methodInstance = TEST_METHOD;


  99                 try {
 100                     METASPACE_METHOD_FIELD.set(methodInstance, 0L);
 101                 } catch (ReflectiveOperationException e) {
 102                     throw new Error("TESTBUG : " + e, e);
 103                 }
 104                 return CompilerToVMHelper.getResolvedJavaMethod(methodInstance,
 105                         ptr);
 106             }
 107         }
 108         ;
 109         abstract HotSpotResolvedJavaMethod getResolvedJavaMethod();
 110     }
 111 
 112     private static final Unsafe UNSAFE = UnsafeHelper.getUnsafe();
 113     private static final WhiteBox WB = WhiteBox.getWhiteBox();
 114     private static final Field METASPACE_METHOD_FIELD;
 115     private static final Class<?> TEST_CLASS = GetResolvedJavaMethodTest.class;
 116     private static final HotSpotResolvedJavaMethod TEST_METHOD;
 117     private static final long PTR;
 118     static  {
 119         try {
 120             Method method = TEST_CLASS.getDeclaredMethod("test", TestCase.class);
 121             TEST_METHOD = CompilerToVMHelper.asResolvedJavaMethod(method);
 122         } catch (NoSuchMethodException e) {
 123             throw new Error("TESTBUG : " + e, e);
 124         }
 125         try {
 126             // jdk.vm.ci.hotspot.HotSpotResolvedJavaMethodImpl.metaspaceMethod
 127             METASPACE_METHOD_FIELD = TEST_METHOD.getClass()
 128                     .getDeclaredField("metaspaceMethod");
 129             METASPACE_METHOD_FIELD.setAccessible(true);
 130             PTR = (long) METASPACE_METHOD_FIELD.get(TEST_METHOD);
 131         } catch (ReflectiveOperationException e) {
 132             throw new Error("TESTBUG : " + e, e);
 133         }
 134 
 135     }
 136 
 137     private static long getPtrToMethod() {
 138         Field field;
 139         try {
 140             field = TEST_CLASS.getDeclaredField("PTR");
 141         } catch (NoSuchFieldException e) {
 142             throw new Error("TEST BUG : " + e, e);
 143         }
 144         Object base = UNSAFE.staticFieldBase(field);
 145         return WB.getObjectAddress(base) + UNSAFE.staticFieldOffset(field);
 146     }
 147 
 148     public void test(TestCase testCase) {
 149         System.out.println(testCase.name());
 150         HotSpotResolvedJavaMethod result = testCase.getResolvedJavaMethod();


< prev index next >