1 /* 2 * Copyright (c) 2015, 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 * @test 26 * @bug 8136421 27 * @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64") 28 * @library / /testlibrary 29 * @library ../common/patches 30 * @modules jdk.vm.ci/jdk.vm.ci.hotspot 31 * jdk.vm.ci/jdk.vm.ci.code 32 * jdk.vm.ci/jdk.vm.ci.meta 33 * jdk.vm.ci/jdk.vm.ci.runtime 34 * @build jdk.vm.ci/jdk.vm.ci.hotspot.MetaAccessWrapper 35 * @build compiler.jvmci.common.JVMCIHelpers 36 * compiler.jvmci.events.JvmciCreateMetaAccessContextTest 37 * @run main jdk.test.lib.FileInstaller ../common/services/ ./META-INF/services/ 38 * @run main jdk.test.lib.FileInstaller 39 * ./JvmciCreateMetaAccessContextTest.config 40 * ./META-INF/services/jdk.vm.ci.hotspot.HotSpotVMEventListener 41 * @run main ClassFileInstaller 42 * compiler.jvmci.common.JVMCIHelpers$EmptyHotspotCompiler 43 * compiler.jvmci.common.JVMCIHelpers$EmptyCompilerFactory 44 * compiler.jvmci.events.JvmciCreateMetaAccessContextTest 45 * jdk.test.lib.Asserts 46 * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI 47 * -Xbootclasspath/a:. 48 * -Dcompiler.jvmci.events.JvmciCreateMetaAccessContextTest.providenull=true 49 * compiler.jvmci.events.JvmciCreateMetaAccessContextTest 50 * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI 51 * -Xbootclasspath/a:. 52 * -Dcompiler.jvmci.events.JvmciCreateMetaAccessContextTest.providenull=false 53 * compiler.jvmci.events.JvmciCreateMetaAccessContextTest 54 */ 55 56 package compiler.jvmci.events; 57 58 import jdk.vm.ci.hotspot.HotSpotJVMCIRuntime; 59 import jdk.vm.ci.hotspot.HotSpotVMEventListener; 60 import jdk.vm.ci.hotspot.MetaAccessWrapper; 61 import jdk.vm.ci.meta.JVMCIMetaAccessContext; 62 import jdk.test.lib.Asserts; 63 64 public class JvmciCreateMetaAccessContextTest 65 implements HotSpotVMEventListener { 66 private static final boolean PROVIDE_NULL_CONTEXT = Boolean.getBoolean( 67 "compiler.jvmci.events.JvmciCreateMetaAccessContextTest" 68 + ".providenull"); 69 private static volatile int createMetaAccessContextCount = 0; 70 private static volatile String errorMessage = ""; 71 72 public static void main(String args[]) { 73 if (createMetaAccessContextCount != 0) { 74 throw new Error("Unexpected createMetaAccessContextevents count" 75 + " at test start"); 76 } 77 JVMCIMetaAccessContext context; 78 context = HotSpotJVMCIRuntime.runtime().getMetaAccessContext(); 79 Asserts.assertNotNull(context, 80 "JVMCIMetaAccessContext is null after 1st request"); 81 Asserts.assertEQ(createMetaAccessContextCount, 1, 82 "Unexpected createMetaAccessContext events count after 1st" 83 + " JVMCI runtime request"); 84 context = HotSpotJVMCIRuntime.runtime().getMetaAccessContext(); 85 Asserts.assertNotNull(context, 86 "JVMCIMetaAccessContext is null after 2nd request"); 87 Asserts.assertEQ(createMetaAccessContextCount, 1, 88 "Unexpected createMetaAccessContext events count after 2nd" 89 + " JVMCI runtime request"); 90 Asserts.assertTrue(errorMessage.isEmpty(), errorMessage); 91 if (PROVIDE_NULL_CONTEXT) { 92 Asserts.assertFalse(context instanceof MetaAccessWrapper, 93 "Got unexpected context: " + context.getClass()); 94 } else { 95 Asserts.assertTrue(context instanceof MetaAccessWrapper, 96 "Got unexpected context: " + context.getClass()); 97 } 98 } 99 100 @Override 101 public JVMCIMetaAccessContext createMetaAccessContext(HotSpotJVMCIRuntime 102 hotSpotJVMCIRuntime) { 103 createMetaAccessContextCount++; 104 if (hotSpotJVMCIRuntime == null) { 105 errorMessage += " HotSpotJVMCIRuntime is null."; 106 } 107 if (PROVIDE_NULL_CONTEXT) { 108 return null; 109 } 110 return new MetaAccessWrapper(); 111 } 112 }