changeset 22592:357e73d0091c

moved cstring utilities into UnsafeUtil and made them require the caller to have the Unsafe capability
author Doug Simon <doug.simon@oracle.com>
date Mon, 07 Sep 2015 22:26:14 +0200
parents c8faebfb7aed
children a107ab4c3011
files graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/nfi/HotSpotNativeFunctionInterface.java graal/com.oracle.nfi.test/test/com/oracle/nfi/test/NativeFunctionInterfaceTest.java mx.graal/suite.py
diffstat 3 files changed, 58 insertions(+), 37 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/nfi/HotSpotNativeFunctionInterface.java	Mon Sep 07 16:03:02 2015 +0200
+++ b/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/nfi/HotSpotNativeFunctionInterface.java	Mon Sep 07 22:26:14 2015 +0200
@@ -22,27 +22,34 @@
  */
 package com.oracle.graal.truffle.hotspot.nfi;
 
-import jdk.internal.jvmci.code.*;
-import jdk.internal.jvmci.code.CallingConvention.*;
-
-import com.oracle.graal.debug.*;
-import com.oracle.graal.debug.Debug.*;
+import static com.oracle.graal.truffle.hotspot.nfi.NativeCallStubGraphBuilder.getGraph;
+import static jdk.internal.jvmci.code.CodeUtil.getCallingConvention;
+import static jdk.internal.jvmci.common.UnsafeAccess.unsafe;
+import static jdk.internal.jvmci.common.UnsafeUtil.createCString;
+import static jdk.internal.jvmci.common.UnsafeUtil.writeCString;
+import jdk.internal.jvmci.code.CallingConvention;
+import jdk.internal.jvmci.code.CallingConvention.Type;
+import jdk.internal.jvmci.code.CompilationResult;
+import jdk.internal.jvmci.code.InstalledCode;
+import jdk.internal.jvmci.hotspot.HotSpotVMConfig;
+import jdk.internal.jvmci.meta.DefaultProfilingInfo;
+import jdk.internal.jvmci.meta.TriState;
 
-import jdk.internal.jvmci.hotspot.*;
-import jdk.internal.jvmci.meta.*;
-import static com.oracle.graal.truffle.hotspot.nfi.NativeCallStubGraphBuilder.*;
-import static jdk.internal.jvmci.code.CodeUtil.*;
-import static jdk.internal.jvmci.common.UnsafeAccess.*;
-
-import com.oracle.graal.compiler.*;
-import com.oracle.graal.compiler.target.*;
-import com.oracle.graal.hotspot.meta.*;
-import com.oracle.graal.lir.asm.*;
-import com.oracle.graal.lir.phases.*;
-import com.oracle.graal.nodes.*;
-import com.oracle.graal.phases.*;
-import com.oracle.graal.phases.tiers.*;
-import com.oracle.nfi.api.*;
+import com.oracle.graal.compiler.GraalCompiler;
+import com.oracle.graal.compiler.target.Backend;
+import com.oracle.graal.debug.Debug;
+import com.oracle.graal.debug.Debug.Scope;
+import com.oracle.graal.hotspot.meta.HotSpotProviders;
+import com.oracle.graal.lir.asm.CompilationResultBuilderFactory;
+import com.oracle.graal.lir.phases.LIRSuites;
+import com.oracle.graal.nodes.StructuredGraph;
+import com.oracle.graal.phases.OptimisticOptimizations;
+import com.oracle.graal.phases.PhaseSuite;
+import com.oracle.graal.phases.tiers.HighTierContext;
+import com.oracle.graal.phases.tiers.Suites;
+import com.oracle.nfi.api.NativeFunctionInterface;
+import com.oracle.nfi.api.NativeFunctionPointer;
+import com.oracle.nfi.api.NativeLibraryHandle;
 
 public class HotSpotNativeFunctionInterface implements NativeFunctionInterface {
 
@@ -77,7 +84,7 @@
         // file name simplifies deallocation below.
         long buffer = unsafe.allocateMemory(ebufLen + libPath.length() + 1);
         long ebuf = buffer;
-        long libPathCString = writeCString(libPath, buffer + ebufLen);
+        long libPathCString = writeCString(unsafe, libPath, buffer + ebufLen);
         try {
             long handle = (long) libraryLookupFunctionHandle.call(libPathCString, ebuf, ebufLen);
             if (handle == 0) {
@@ -124,7 +131,8 @@
         if (dllLookupFunctionHandle == null) {
             dllLookupFunctionHandle = createHandle(functionLookupFunctionPointer, long.class, long.class, long.class);
         }
-        long nameCString = createCString(name);
+
+        long nameCString = createCString(unsafe, name);
         try {
             long functionPointer = (long) dllLookupFunctionHandle.call(((HotSpotNativeLibraryHandle) library).value, nameCString);
             if (functionPointer == 0L) {
--- a/graal/com.oracle.nfi.test/test/com/oracle/nfi/test/NativeFunctionInterfaceTest.java	Mon Sep 07 16:03:02 2015 +0200
+++ b/graal/com.oracle.nfi.test/test/com/oracle/nfi/test/NativeFunctionInterfaceTest.java	Mon Sep 07 22:26:14 2015 +0200
@@ -22,19 +22,32 @@
  */
 package com.oracle.nfi.test;
 
-import static java.io.File.*;
-import static java.lang.System.*;
-import static jdk.internal.jvmci.common.UnsafeAccess.*;
-import static org.junit.Assert.*;
-import static org.junit.Assume.*;
+import static java.io.File.separatorChar;
+import static java.lang.System.getProperty;
+import static java.lang.System.mapLibraryName;
+import static jdk.internal.jvmci.common.UnsafeAccess.unsafe;
+import static jdk.internal.jvmci.common.UnsafeUtil.writeCString;
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import static org.junit.Assume.assumeTrue;
 
-import java.io.*;
-import java.util.*;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
 
-import org.junit.*;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Assume;
+import org.junit.Before;
+import org.junit.Test;
 
-import com.oracle.nfi.*;
-import com.oracle.nfi.api.*;
+import com.oracle.nfi.NativeFunctionInterfaceRuntime;
+import com.oracle.nfi.api.NativeFunctionHandle;
+import com.oracle.nfi.api.NativeFunctionInterface;
+import com.oracle.nfi.api.NativeFunctionPointer;
+import com.oracle.nfi.api.NativeLibraryHandle;
 
 public class NativeFunctionInterfaceTest {
 
@@ -82,7 +95,7 @@
         String string = "GRAAL";
         int bufferLength = string.length() + 1;
         long cString = (long) malloc.call(bufferLength);
-        writeCString(string, cString);
+        writeCString(unsafe, string, cString);
 
         long cStringCopy = malloc(bufferLength);
         int result = (int) snprintf.call(cStringCopy, bufferLength, cString);
@@ -97,7 +110,7 @@
     public void test2() {
         assumeTrue(nfi.isDefaultLibrarySearchSupported());
         String formatString = "AB %f%f";
-        long formatCString = writeCString("AB %f%f", malloc(formatString.length() + 1));
+        long formatCString = writeCString(unsafe, "AB %f%f", malloc(formatString.length() + 1));
 
         String referenceString = "AB 1.0000001.000000";
         int bufferLength = referenceString.length() + 1;
@@ -114,7 +127,7 @@
     public void test3() {
         assumeTrue(nfi.isDefaultLibrarySearchSupported());
         String format = "%i%i%i%i%i%i%i%i%i%i%i%i";
-        long formatCString = writeCString(format, malloc(format.length() + 1));
+        long formatCString = writeCString(unsafe, format, malloc(format.length() + 1));
         String referenceString = "01234567891011";
 
         int bufferLength = referenceString.length() + 1;
@@ -225,7 +238,7 @@
     public void test8() {
         assumeTrue(nfi.isDefaultLibrarySearchSupported());
         String formatString = "AB %f%f";
-        long formatCString = writeCString("AB %f%f", malloc(formatString.length() + 1));
+        long formatCString = writeCString(unsafe, "AB %f%f", malloc(formatString.length() + 1));
 
         String expected = "AB 1.0000001.000000";
         int bufferLength = expected.length() + 1;
--- a/mx.graal/suite.py	Mon Sep 07 16:03:02 2015 +0200
+++ b/mx.graal/suite.py	Mon Sep 07 22:26:14 2015 +0200
@@ -6,7 +6,7 @@
     "suites": [
             {
                "name" : "jvmci",
-               "version" : "23db6926b163fbf0495d2cb0559326a123020ea2",
+               "version" : "cbab86a6c7f6a78bd4e0e878ab609fd183644c4b",
                "urls" : [
                     {"url" : "http://lafo.ssw.uni-linz.ac.at/hg/graal-jvmci-8", "kind" : "hg"},
                     {"url" : "https://curio.ssw.jku.at/nexus/content/repositories/snapshots", "kind" : "binary"},