1 /* 2 * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 * 23 */ 24 25 /* 26 * @test 27 * @bug 8136421 28 * @requires (vm.simpleArch == "x64" | vm.simpleArch == "sparcv9" | vm.simpleArch == "aarch64") 29 * @library /test/lib / 30 * @modules java.base/jdk.internal.misc 31 * @modules jdk.vm.ci/jdk.vm.ci.hotspot 32 * jdk.vm.ci/jdk.vm.ci.runtime 33 * @run main/othervm -XX:+UnlockExperimentalVMOptions 34 * -Dcompiler.jvmci.compilerToVM.JVM_RegisterJVMCINatives.positive=true 35 * -XX:+EnableJVMCI 36 * compiler.jvmci.compilerToVM.JVM_RegisterJVMCINatives 37 * @run main/othervm -XX:+UnlockExperimentalVMOptions 38 * -Dcompiler.jvmci.compilerToVM.JVM_RegisterJVMCINatives.positive=false 39 * -XX:-EnableJVMCI 40 * compiler.jvmci.compilerToVM.JVM_RegisterJVMCINatives 41 42 */ 43 44 package compiler.jvmci.compilerToVM; 45 46 import jdk.test.lib.Asserts; 47 import jdk.vm.ci.runtime.JVMCI; 48 49 import java.lang.reflect.Method; 50 51 public class JVM_RegisterJVMCINatives { 52 private static final boolean IS_POSITIVE = Boolean.getBoolean( 53 "compiler.jvmci.compilerToVM.JVM_RegisterJVMCINatives.positive"); 54 55 private final Method registerNatives; 56 57 public static void main(String[] args) { 58 new JVM_RegisterJVMCINatives().runTest(); 59 } 60 61 private void runTest() { 62 Object result; 63 try { 64 result = invoke(); 65 } catch (InternalError e) { 66 if (IS_POSITIVE) { 67 throw new AssertionError("unexpected exception", e); 68 } 69 return; 70 } 71 if (!IS_POSITIVE) { 72 throw new AssertionError("didn't get expected exception"); 73 } 74 Asserts.assertNull(result, 75 "registerNatives()V returned non-null"); 76 Asserts.assertEQ(result, invoke(), 77 "registerNatives returns different results"); 78 79 } 80 private Object invoke() { 81 Object result; 82 try { 83 result = registerNatives.invoke(JVMCI.class); 84 } catch (ReflectiveOperationException e) { 85 throw new Error("can't invoke registerNatives", e); 86 } 87 return result; 88 } 89 90 private JVM_RegisterJVMCINatives() { 91 Method method; 92 try { 93 method = Class.forName("jdk.vm.ci.hotspot.CompilerToVM", 94 /* initialize = */ false, 95 this.getClass().getClassLoader()) 96 .getDeclaredMethod("registerNatives"); 97 method.setAccessible(true); 98 } catch (ReflectiveOperationException e) { 99 throw new Error("can't find CompilerToVM::registerNatives", e); 100 } 101 registerNatives = method; 102 } 103 }