# HG changeset patch # User Doug Simon # Date 1432585030 -7200 # Node ID 5e868236654f3026e33570fe1a127b839bc5cdbc # Parent ccb1b1391192400d4bbb7d4ab976c9347b5cc38f moved UnsafeAccess to com.oracle.jvmci.common (JBS:GRAAL-53) diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.asm.amd64.test/src/com/oracle/graal/asm/amd64/test/BitOpsTest.java --- a/graal/com.oracle.graal.asm.amd64.test/src/com/oracle/graal/asm/amd64/test/BitOpsTest.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.asm.amd64.test/src/com/oracle/graal/asm/amd64/test/BitOpsTest.java Mon May 25 22:17:10 2015 +0200 @@ -26,7 +26,7 @@ import static com.oracle.graal.api.code.ValueUtil.*; import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp.*; import static com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize.*; -import static com.oracle.graal.compiler.common.UnsafeAccess.*; +import static com.oracle.jvmci.common.UnsafeAccess.*; import static org.junit.Assume.*; import java.lang.reflect.*; diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.asm.amd64.test/src/com/oracle/graal/asm/amd64/test/IncrementDecrementMacroTest.java --- a/graal/com.oracle.graal.asm.amd64.test/src/com/oracle/graal/asm/amd64/test/IncrementDecrementMacroTest.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.asm.amd64.test/src/com/oracle/graal/asm/amd64/test/IncrementDecrementMacroTest.java Mon May 25 22:17:10 2015 +0200 @@ -23,7 +23,7 @@ package com.oracle.graal.asm.amd64.test; import static com.oracle.graal.api.code.ValueUtil.*; -import static com.oracle.graal.compiler.common.UnsafeAccess.*; +import static com.oracle.jvmci.common.UnsafeAccess.*; import static org.junit.Assume.*; import java.lang.reflect.*; diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/FieldIntrospection.java --- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/FieldIntrospection.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/FieldIntrospection.java Mon May 25 22:17:10 2015 +0200 @@ -22,6 +22,8 @@ */ package com.oracle.graal.compiler.common; +import com.oracle.jvmci.common.*; + public abstract class FieldIntrospection extends UnsafeAccess { private final Class clazz; diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/Fields.java --- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/Fields.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/Fields.java Mon May 25 22:17:10 2015 +0200 @@ -22,7 +22,7 @@ */ package com.oracle.graal.compiler.common; -import static com.oracle.graal.compiler.common.UnsafeAccess.*; +import static com.oracle.jvmci.common.UnsafeAccess.*; import java.util.*; diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/FieldsScanner.java --- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/FieldsScanner.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/FieldsScanner.java Mon May 25 22:17:10 2015 +0200 @@ -22,7 +22,7 @@ */ package com.oracle.graal.compiler.common; -import static com.oracle.graal.compiler.common.UnsafeAccess.*; +import static com.oracle.jvmci.common.UnsafeAccess.*; import java.lang.reflect.*; import java.util.*; diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/UnsafeAccess.java --- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/UnsafeAccess.java Mon May 25 17:40:30 2015 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,95 +0,0 @@ -/* - * Copyright (c) 2012, 2012, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package com.oracle.graal.compiler.common; - -import java.lang.reflect.*; - -import sun.misc.*; - -public class UnsafeAccess { - - /** - * An instance of {@link Unsafe} for use within Graal. - */ - public static final Unsafe unsafe; - - static { - try { - Field theUnsafeInstance = Unsafe.class.getDeclaredField("theUnsafe"); - theUnsafeInstance.setAccessible(true); - unsafe = (Unsafe) theUnsafeInstance.get(Unsafe.class); - } catch (Exception e) { - throw new RuntimeException("exception while trying to get Unsafe", e); - } - } - - /** - * Copies the contents of a {@link String} to a native memory buffer as a {@code '\0'} - * terminated C string. The native memory buffer is allocated via - * {@link Unsafe#allocateMemory(long)}. The caller is responsible for releasing the buffer when - * it is no longer needed via {@link Unsafe#freeMemory(long)}. - * - * @return the native memory pointer of the C string created from {@code s} - */ - public static long createCString(String s) { - return writeCString(s, unsafe.allocateMemory(s.length() + 1)); - } - - /** - * Reads a {@code '\0'} terminated C string from native memory and converts it to a - * {@link String}. - * - * @return a Java string - */ - public static String readCString(long address) { - if (address == 0) { - return null; - } - StringBuilder sb = new StringBuilder(); - for (int i = 0;; i++) { - char c = (char) unsafe.getByte(address + i); - if (c == 0) { - break; - } - sb.append(c); - } - return sb.toString(); - } - - /** - * Writes the contents of a {@link String} to a native memory buffer as a {@code '\0'} - * terminated C string. The caller is responsible for ensuring the buffer is at least - * {@code s.length() + 1} bytes long. The caller is also responsible for releasing the buffer - * when it is no longer. - * - * @return the value of {@code buf} - */ - public static long writeCString(String s, long buf) { - int size = s.length(); - for (int i = 0; i < size; i++) { - unsafe.putByte(buf + i, (byte) s.charAt(i)); - } - unsafe.putByte(buf + size, (byte) '\0'); - return buf; - } -} diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/util/UnsafeArrayTypeReader.java --- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/util/UnsafeArrayTypeReader.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/util/UnsafeArrayTypeReader.java Mon May 25 22:17:10 2015 +0200 @@ -24,7 +24,7 @@ import sun.misc.*; -import com.oracle.graal.compiler.common.*; +import com.oracle.jvmci.common.*; /** * Provides low-level read access from a byte[] array for signed and unsigned values of size 1, 2, diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/util/UnsafeArrayTypeWriter.java --- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/util/UnsafeArrayTypeWriter.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/util/UnsafeArrayTypeWriter.java Mon May 25 22:17:10 2015 +0200 @@ -25,7 +25,7 @@ import static com.oracle.graal.compiler.common.util.TypeConversion.*; import sun.misc.*; -import com.oracle.graal.compiler.common.*; +import com.oracle.jvmci.common.*; /** * Provides low-level sequential write access to a byte[] array for signed and unsigned values of diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/PEAReadEliminationTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/PEAReadEliminationTest.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/PEAReadEliminationTest.java Mon May 25 22:17:10 2015 +0200 @@ -26,7 +26,6 @@ import sun.misc.*; -import com.oracle.graal.compiler.common.*; import com.oracle.graal.nodes.StructuredGraph.AllowAssumptions; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.java.*; @@ -34,6 +33,7 @@ import com.oracle.graal.phases.common.inlining.*; import com.oracle.graal.phases.tiers.*; import com.oracle.graal.virtual.phases.ea.*; +import com.oracle.jvmci.common.*; public class PEAReadEliminationTest extends EarlyReadEliminationTest { diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/UnsafeEATest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/UnsafeEATest.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/UnsafeEATest.java Mon May 25 22:17:10 2015 +0200 @@ -27,9 +27,9 @@ import sun.misc.*; import com.oracle.graal.api.meta.*; -import com.oracle.graal.compiler.common.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.java.*; +import com.oracle.jvmci.common.*; public class UnsafeEATest extends EATestBase { diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Edges.java --- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Edges.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Edges.java Mon May 25 22:17:10 2015 +0200 @@ -22,9 +22,9 @@ */ package com.oracle.graal.graph; -import static com.oracle.graal.compiler.common.UnsafeAccess.*; import static com.oracle.graal.graph.Graph.*; import static com.oracle.graal.graph.Node.*; +import static com.oracle.jvmci.common.UnsafeAccess.*; import java.util.*; import java.util.function.*; diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java --- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java Mon May 25 22:17:10 2015 +0200 @@ -38,6 +38,7 @@ import com.oracle.graal.graph.iterators.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodeinfo.*; +import com.oracle.jvmci.common.*; /** * This class is the base class for all nodes. It represents a node that can be inserted in a diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java --- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java Mon May 25 22:17:10 2015 +0200 @@ -43,6 +43,7 @@ import com.oracle.graal.graph.spi.*; import com.oracle.graal.graph.spi.Canonicalizable.BinaryCommutative; import com.oracle.graal.nodeinfo.*; +import com.oracle.jvmci.common.*; /** * Metadata for every {@link Node} type. The metadata includes: diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackend.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackend.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackend.java Mon May 25 22:17:10 2015 +0200 @@ -26,7 +26,7 @@ import static com.oracle.graal.api.code.CallingConvention.Type.*; import static com.oracle.graal.api.code.ValueUtil.*; import static com.oracle.graal.compiler.common.GraalOptions.*; -import static com.oracle.graal.compiler.common.UnsafeAccess.*; +import static com.oracle.jvmci.common.UnsafeAccess.*; import java.util.*; diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackend.java --- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackend.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackend.java Mon May 25 22:17:10 2015 +0200 @@ -29,8 +29,8 @@ import static com.oracle.graal.asm.sparc.SPARCAssembler.CC.*; import static com.oracle.graal.asm.sparc.SPARCAssembler.ConditionFlag.*; import static com.oracle.graal.compiler.common.GraalOptions.*; -import static com.oracle.graal.compiler.common.UnsafeAccess.*; import static com.oracle.graal.sparc.SPARC.*; +import static com.oracle.jvmci.common.UnsafeAccess.*; import java.util.*; diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/WriteBarrierAdditionTest.java --- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/WriteBarrierAdditionTest.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/WriteBarrierAdditionTest.java Mon May 25 22:17:10 2015 +0200 @@ -22,7 +22,7 @@ */ package com.oracle.graal.hotspot.test; -import static com.oracle.graal.compiler.common.UnsafeAccess.*; +import static com.oracle.jvmci.common.UnsafeAccess.*; import java.lang.ref.*; diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationTask.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationTask.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationTask.java Mon May 25 22:17:10 2015 +0200 @@ -26,12 +26,12 @@ import static com.oracle.graal.api.code.CodeUtil.*; import static com.oracle.graal.compiler.GraalCompiler.*; import static com.oracle.graal.compiler.common.GraalOptions.*; -import static com.oracle.graal.compiler.common.UnsafeAccess.*; import static com.oracle.graal.debug.Debug.*; import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; import static com.oracle.graal.hotspot.jvmci.InitTimer.*; import static com.oracle.graal.hotspot.meta.HotSpotSuitesProvider.*; import static com.oracle.graal.nodes.StructuredGraph.*; +import static com.oracle.jvmci.common.UnsafeAccess.*; import java.lang.management.*; import java.util.concurrent.*; diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntime.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntime.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntime.java Mon May 25 22:17:10 2015 +0200 @@ -24,9 +24,9 @@ import static com.oracle.graal.compiler.GraalDebugConfig.*; import static com.oracle.graal.compiler.common.GraalOptions.*; -import static com.oracle.graal.compiler.common.UnsafeAccess.*; import static com.oracle.graal.hotspot.HotSpotGraalRuntime.Options.*; import static com.oracle.graal.hotspot.jvmci.InitTimer.*; +import static com.oracle.jvmci.common.UnsafeAccess.*; import java.lang.reflect.*; import java.util.*; diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotConstantPool.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotConstantPool.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotConstantPool.java Mon May 25 22:17:10 2015 +0200 @@ -22,8 +22,8 @@ */ package com.oracle.graal.hotspot.jvmci; -import static com.oracle.graal.compiler.common.UnsafeAccess.*; import static com.oracle.graal.hotspot.jvmci.HotSpotJVMCIRuntime.*; +import static com.oracle.jvmci.common.UnsafeAccess.*; import java.lang.invoke.*; diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotInstalledCode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotInstalledCode.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotInstalledCode.java Mon May 25 22:17:10 2015 +0200 @@ -22,7 +22,7 @@ */ package com.oracle.graal.hotspot.jvmci; -import static com.oracle.graal.compiler.common.UnsafeAccess.*; +import static com.oracle.jvmci.common.UnsafeAccess.*; import sun.misc.*; import com.oracle.graal.api.code.*; diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotJVMCIRuntime.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotJVMCIRuntime.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotJVMCIRuntime.java Mon May 25 22:17:10 2015 +0200 @@ -22,8 +22,8 @@ */ package com.oracle.graal.hotspot.jvmci; -import static com.oracle.graal.compiler.common.UnsafeAccess.*; import static com.oracle.graal.hotspot.jvmci.InitTimer.*; +import static com.oracle.jvmci.common.UnsafeAccess.*; import java.lang.reflect.*; import java.util.*; diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotMemoryAccessProviderImpl.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotMemoryAccessProviderImpl.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotMemoryAccessProviderImpl.java Mon May 25 22:17:10 2015 +0200 @@ -22,7 +22,7 @@ */ package com.oracle.graal.hotspot.jvmci; -import static com.oracle.graal.compiler.common.UnsafeAccess.*; +import static com.oracle.jvmci.common.UnsafeAccess.*; import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotMetaAccessProvider.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotMetaAccessProvider.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotMetaAccessProvider.java Mon May 25 22:17:10 2015 +0200 @@ -22,9 +22,9 @@ */ package com.oracle.graal.hotspot.jvmci; -import static com.oracle.graal.compiler.common.UnsafeAccess.*; import static com.oracle.graal.hotspot.jvmci.HotSpotResolvedJavaType.*; import static com.oracle.graal.hotspot.jvmci.HotSpotResolvedObjectTypeImpl.*; +import static com.oracle.jvmci.common.UnsafeAccess.*; import java.lang.reflect.*; diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotMethodData.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotMethodData.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotMethodData.java Mon May 25 22:17:10 2015 +0200 @@ -22,8 +22,8 @@ */ package com.oracle.graal.hotspot.jvmci; -import static com.oracle.graal.compiler.common.UnsafeAccess.*; import static com.oracle.graal.hotspot.jvmci.HotSpotJVMCIRuntime.*; +import static com.oracle.jvmci.common.UnsafeAccess.*; import static java.lang.String.*; import java.util.*; diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotResolvedJavaMethodImpl.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotResolvedJavaMethodImpl.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotResolvedJavaMethodImpl.java Mon May 25 22:17:10 2015 +0200 @@ -24,8 +24,8 @@ import static com.oracle.graal.compiler.common.GraalInternalError.*; import static com.oracle.graal.compiler.common.GraalOptions.*; -import static com.oracle.graal.compiler.common.UnsafeAccess.*; import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; +import static com.oracle.jvmci.common.UnsafeAccess.*; import java.lang.annotation.*; import java.lang.reflect.*; diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotResolvedObjectTypeImpl.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotResolvedObjectTypeImpl.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotResolvedObjectTypeImpl.java Mon May 25 22:17:10 2015 +0200 @@ -22,8 +22,8 @@ */ package com.oracle.graal.hotspot.jvmci; -import static com.oracle.graal.compiler.common.UnsafeAccess.*; import static com.oracle.graal.hotspot.jvmci.HotSpotJVMCIRuntime.*; +import static com.oracle.jvmci.common.UnsafeAccess.*; import static java.util.Objects.*; import java.lang.annotation.*; diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotVMConfig.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotVMConfig.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotVMConfig.java Mon May 25 22:17:10 2015 +0200 @@ -22,7 +22,7 @@ */ package com.oracle.graal.hotspot.jvmci; -import static com.oracle.graal.compiler.common.UnsafeAccess.*; +import static com.oracle.jvmci.common.UnsafeAccess.*; import java.lang.reflect.*; import java.util.*; diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotVmSymbols.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotVmSymbols.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotVmSymbols.java Mon May 25 22:17:10 2015 +0200 @@ -22,8 +22,8 @@ */ package com.oracle.graal.hotspot.jvmci; -import static com.oracle.graal.compiler.common.UnsafeAccess.*; import static com.oracle.graal.hotspot.jvmci.HotSpotJVMCIRuntime.*; +import static com.oracle.jvmci.common.UnsafeAccess.*; import sun.misc.*; /** diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/AESCryptSubstitutions.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/AESCryptSubstitutions.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/AESCryptSubstitutions.java Mon May 25 22:17:10 2015 +0200 @@ -35,6 +35,7 @@ import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.word.*; +import com.oracle.jvmci.common.*; // JaCoCo Exclude diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CipherBlockChainingSubstitutions.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CipherBlockChainingSubstitutions.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CipherBlockChainingSubstitutions.java Mon May 25 22:17:10 2015 +0200 @@ -35,6 +35,7 @@ import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.word.*; +import com.oracle.jvmci.common.*; // JaCoCo Exclude diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotReplacementsUtil.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotReplacementsUtil.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotReplacementsUtil.java Mon May 25 22:17:10 2015 +0200 @@ -22,10 +22,10 @@ */ package com.oracle.graal.hotspot.replacements; -import static com.oracle.graal.compiler.common.UnsafeAccess.*; import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; import static com.oracle.graal.hotspot.meta.HotSpotForeignCallsProviderImpl.*; import static com.oracle.graal.nodes.extended.BranchProbabilityNode.*; +import static com.oracle.jvmci.common.UnsafeAccess.*; import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64ArrayEqualsOp.java --- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64ArrayEqualsOp.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64ArrayEqualsOp.java Mon May 25 22:17:10 2015 +0200 @@ -23,8 +23,8 @@ package com.oracle.graal.lir.amd64; import static com.oracle.graal.api.code.ValueUtil.*; -import static com.oracle.graal.compiler.common.UnsafeAccess.*; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.*; +import static com.oracle.jvmci.common.UnsafeAccess.*; import java.lang.reflect.*; diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCArrayEqualsOp.java --- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCArrayEqualsOp.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCArrayEqualsOp.java Mon May 25 22:17:10 2015 +0200 @@ -28,10 +28,10 @@ import static com.oracle.graal.asm.sparc.SPARCAssembler.CC.*; import static com.oracle.graal.asm.sparc.SPARCAssembler.ConditionFlag.*; import static com.oracle.graal.asm.sparc.SPARCAssembler.RCondition.*; -import static com.oracle.graal.compiler.common.UnsafeAccess.*; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.*; import static com.oracle.graal.sparc.SPARC.*; import static com.oracle.graal.sparc.SPARC.CPUFeature.*; +import static com.oracle.jvmci.common.UnsafeAccess.*; import java.lang.reflect.*; diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/UnsafeSubstitutionsTest.java --- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/UnsafeSubstitutionsTest.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/UnsafeSubstitutionsTest.java Mon May 25 22:17:10 2015 +0200 @@ -22,7 +22,7 @@ */ package com.oracle.graal.replacements.test; -import static com.oracle.graal.compiler.common.UnsafeAccess.*; +import static com.oracle.jvmci.common.UnsafeAccess.*; import org.junit.*; diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetCounterNode.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetCounterNode.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetCounterNode.java Mon May 25 22:17:10 2015 +0200 @@ -23,8 +23,8 @@ package com.oracle.graal.replacements; import static com.oracle.graal.compiler.common.GraalOptions.*; -import static com.oracle.graal.compiler.common.UnsafeAccess.*; import static com.oracle.graal.replacements.SnippetTemplate.*; +import static com.oracle.jvmci.common.UnsafeAccess.*; import java.util.*; diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/HotSpotTruffleRuntime.java --- a/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/HotSpotTruffleRuntime.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/HotSpotTruffleRuntime.java Mon May 25 22:17:10 2015 +0200 @@ -59,6 +59,7 @@ import com.oracle.graal.runtime.*; import com.oracle.graal.truffle.*; import com.oracle.graal.truffle.hotspot.nfi.*; +import com.oracle.jvmci.common.*; import com.oracle.jvmci.runtime.*; import com.oracle.nfi.api.*; import com.oracle.truffle.api.*; diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/OptimizedCallTargetInstrumentation.java --- a/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/OptimizedCallTargetInstrumentation.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/OptimizedCallTargetInstrumentation.java Mon May 25 22:17:10 2015 +0200 @@ -34,6 +34,7 @@ import com.oracle.graal.lir.asm.*; import com.oracle.graal.lir.framemap.*; import com.oracle.graal.truffle.*; +import com.oracle.jvmci.common.*; /** * Mechanism for injecting special code into {@link OptimizedCallTarget#call(Object[])} . diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/nfi/HotSpotNativeFunctionInterface.java --- a/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/nfi/HotSpotNativeFunctionInterface.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/nfi/HotSpotNativeFunctionInterface.java Mon May 25 22:17:10 2015 +0200 @@ -23,8 +23,8 @@ package com.oracle.graal.truffle.hotspot.nfi; import static com.oracle.graal.api.code.CodeUtil.*; -import static com.oracle.graal.compiler.common.UnsafeAccess.*; import static com.oracle.graal.truffle.hotspot.nfi.NativeCallStubGraphBuilder.*; +import static com.oracle.jvmci.common.UnsafeAccess.*; import com.oracle.graal.api.code.*; import com.oracle.graal.api.code.CallingConvention.Type; diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/ConditionAnchoringTest.java --- a/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/ConditionAnchoringTest.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/ConditionAnchoringTest.java Mon May 25 22:17:10 2015 +0200 @@ -53,7 +53,7 @@ private static final Object location = new Object(); static { - Unsafe unsafe = com.oracle.graal.compiler.common.UnsafeAccess.unsafe; + Unsafe unsafe = com.oracle.jvmci.common.UnsafeAccess.unsafe; access = Truffle.getRuntime().getCapability(UnsafeAccessFactory.class).createUnsafeAccess(unsafe); long fieldOffset = 0; try { diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.graal.word/src/com/oracle/graal/word/Word.java --- a/graal/com.oracle.graal.word/src/com/oracle/graal/word/Word.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.graal.word/src/com/oracle/graal/word/Word.java Mon May 25 22:17:10 2015 +0200 @@ -22,7 +22,7 @@ */ package com.oracle.graal.word; -import static com.oracle.graal.compiler.common.UnsafeAccess.*; +import static com.oracle.jvmci.common.UnsafeAccess.*; import java.lang.annotation.*; diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.jvmci.common/src/com/oracle/jvmci/common/UnsafeAccess.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.jvmci.common/src/com/oracle/jvmci/common/UnsafeAccess.java Mon May 25 22:17:10 2015 +0200 @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2012, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.jvmci.common; + +import java.lang.reflect.*; + +import sun.misc.*; + +public class UnsafeAccess { + + /** + * An instance of {@link Unsafe} for use within Graal. + */ + public static final Unsafe unsafe; + + static { + try { + Field theUnsafeInstance = Unsafe.class.getDeclaredField("theUnsafe"); + theUnsafeInstance.setAccessible(true); + unsafe = (Unsafe) theUnsafeInstance.get(Unsafe.class); + } catch (Exception e) { + throw new RuntimeException("exception while trying to get Unsafe", e); + } + } + + /** + * Copies the contents of a {@link String} to a native memory buffer as a {@code '\0'} + * terminated C string. The native memory buffer is allocated via + * {@link Unsafe#allocateMemory(long)}. The caller is responsible for releasing the buffer when + * it is no longer needed via {@link Unsafe#freeMemory(long)}. + * + * @return the native memory pointer of the C string created from {@code s} + */ + public static long createCString(String s) { + return writeCString(s, unsafe.allocateMemory(s.length() + 1)); + } + + /** + * Reads a {@code '\0'} terminated C string from native memory and converts it to a + * {@link String}. + * + * @return a Java string + */ + public static String readCString(long address) { + if (address == 0) { + return null; + } + StringBuilder sb = new StringBuilder(); + for (int i = 0;; i++) { + char c = (char) unsafe.getByte(address + i); + if (c == 0) { + break; + } + sb.append(c); + } + return sb.toString(); + } + + /** + * Writes the contents of a {@link String} to a native memory buffer as a {@code '\0'} + * terminated C string. The caller is responsible for ensuring the buffer is at least + * {@code s.length() + 1} bytes long. The caller is also responsible for releasing the buffer + * when it is no longer. + * + * @return the value of {@code buf} + */ + public static long writeCString(String s, long buf) { + int size = s.length(); + for (int i = 0; i < size; i++) { + unsafe.putByte(buf + i, (byte) s.charAt(i)); + } + unsafe.putByte(buf + size, (byte) '\0'); + return buf; + } +} diff -r ccb1b1391192 -r 5e868236654f graal/com.oracle.nfi.test/test/com/oracle/nfi/test/NativeFunctionInterfaceTest.java --- a/graal/com.oracle.nfi.test/test/com/oracle/nfi/test/NativeFunctionInterfaceTest.java Mon May 25 17:40:30 2015 +0200 +++ b/graal/com.oracle.nfi.test/test/com/oracle/nfi/test/NativeFunctionInterfaceTest.java Mon May 25 22:17:10 2015 +0200 @@ -22,7 +22,7 @@ */ package com.oracle.nfi.test; -import static com.oracle.graal.compiler.common.UnsafeAccess.*; +import static com.oracle.jvmci.common.UnsafeAccess.*; import static java.io.File.*; import static java.lang.System.*; import static org.junit.Assert.*; diff -r ccb1b1391192 -r 5e868236654f mx/suite.py --- a/mx/suite.py Mon May 25 17:40:30 2015 +0200 +++ b/mx/suite.py Mon May 25 22:17:10 2015 +0200 @@ -167,6 +167,14 @@ "javaCompliance" : "1.7", }, + "com.oracle.jvmci.common" : { + "subDir" : "graal", + "sourceDirs" : ["src"], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "API,Graal", + }, + "com.oracle.jvmci.runtime" : { "subDir" : "graal", "sourceDirs" : ["src"], @@ -839,6 +847,7 @@ "subDir" : "graal", "sourceDirs" : ["src"], "dependencies" : [ + "com.oracle.jvmci.common", "com.oracle.graal.api.code", "com.oracle.graal.options", "com.oracle.graal.debug",