From 5c67d1a6eb8ecf7174b9e2e686490ba1bda18f39 Mon Sep 17 00:00:00 2001 From: Yudi Zheng Date: Thu, 6 Jun 2024 14:35:41 +0200 Subject: [PATCH] Remove sun.misc.Unsafe plugins. --- compiler/mx.compiler/mx_compiler.py | 2 +- compiler/mx.compiler/suite.py | 3 ++ .../jdk23/test/IntegerPolynomialTest.java | 2 +- .../jdk23/test/UnsafeSetMemoryTest.java | 2 -- .../graal/compiler/core/common/Fields.java | 21 ++++++------- .../compiler/core/common/FieldsScanner.java | 9 ++---- .../common/util/UnsafeArrayTypeReader.java | 12 +++---- .../common/util/UnsafeArrayTypeWriter.java | 13 ++++---- .../src/jdk/graal/compiler/graph/Edges.java | 16 +++++----- .../src/jdk/graal/compiler/graph/Node.java | 7 ++--- .../jdk/graal/compiler/graph/NodeClass.java | 5 ++- .../hotspot/HotSpotGraalCompiler.java | 5 ++- .../aarch64/AArch64HotSpotBackend.java | 5 ++- .../meta/HotSpotExceptionDispatchPlugin.java | 13 ++++---- .../replacements/SnippetCounterNode.java | 12 +++---- .../StandardGraphBuilderPlugins.java | 12 ++++--- .../serviceprovider/GlobalAtomicLong.java | 8 ++--- .../src/jdk/graal/compiler/word/Word.java | 31 +++++++++---------- sdk/mx.sdk/mx_sdk_vm.py | 2 ++ 19 files changed, 83 insertions(+), 97 deletions(-) diff --git a/compiler/mx.compiler/mx_compiler.py b/compiler/mx.compiler/mx_compiler.py index f5a50022defa..f702c6af0e1e 100644 --- a/compiler/mx.compiler/mx_compiler.py +++ b/compiler/mx.compiler/mx_compiler.py @@ -1116,7 +1116,7 @@ def collate_metrics(args): def run_java(args, out=None, err=None, addDefaultArgs=True, command_mapper_hooks=None, jdk=None, **kw_args): graaljdk = jdk or get_graaljdk() vm_args = _parseVmArgs(args, addDefaultArgs=addDefaultArgs) - args = ['-XX:+UnlockExperimentalVMOptions', '-XX:+EnableJVMCI'] + vm_args + args = ['-XX:+UnlockExperimentalVMOptions', '-XX:+EnableJVMCI', '--add-exports=java.base/jdk.internal.misc=jdk.graal.compiler'] + vm_args _check_bootstrap_config(args) cmd = get_vm_prefix() + [graaljdk.java] + ['-server'] + args map_file = join(graaljdk.home, 'proguard.map') diff --git a/compiler/mx.compiler/suite.py b/compiler/mx.compiler/suite.py index 4cf01101375f..3210e36463b0 100644 --- a/compiler/mx.compiler/suite.py +++ b/compiler/mx.compiler/suite.py @@ -172,6 +172,9 @@ "java.logging", ], "requiresConcealed" : { + "java.base" : [ + "jdk.internal.misc", + ], "jdk.internal.vm.ci" : [ "jdk.vm.ci.meta", "jdk.vm.ci.code", diff --git a/compiler/src/jdk.graal.compiler.hotspot.jdk23.test/src/jdk/graal/compiler/hotspot/jdk23/test/IntegerPolynomialTest.java b/compiler/src/jdk.graal.compiler.hotspot.jdk23.test/src/jdk/graal/compiler/hotspot/jdk23/test/IntegerPolynomialTest.java index 0e2a92c9ed93..e9871235e0cc 100644 --- a/compiler/src/jdk.graal.compiler.hotspot.jdk23.test/src/jdk/graal/compiler/hotspot/jdk23/test/IntegerPolynomialTest.java +++ b/compiler/src/jdk.graal.compiler.hotspot.jdk23.test/src/jdk/graal/compiler/hotspot/jdk23/test/IntegerPolynomialTest.java @@ -56,7 +56,7 @@ public final class IntegerPolynomialTest extends HotSpotGraalCompilerTest { @Test public void testIntegerPolynomial() { - IntegerPolynomial testFields[] = new IntegerPolynomial[]{ + IntegerPolynomial[] testFields = { IntegerPolynomial1305.ONE, IntegerPolynomial25519.ONE, IntegerPolynomial448.ONE, diff --git a/compiler/src/jdk.graal.compiler.hotspot.jdk23.test/src/jdk/graal/compiler/hotspot/jdk23/test/UnsafeSetMemoryTest.java b/compiler/src/jdk.graal.compiler.hotspot.jdk23.test/src/jdk/graal/compiler/hotspot/jdk23/test/UnsafeSetMemoryTest.java index 0bef6f8ca632..663588402c3d 100644 --- a/compiler/src/jdk.graal.compiler.hotspot.jdk23.test/src/jdk/graal/compiler/hotspot/jdk23/test/UnsafeSetMemoryTest.java +++ b/compiler/src/jdk.graal.compiler.hotspot.jdk23.test/src/jdk/graal/compiler/hotspot/jdk23/test/UnsafeSetMemoryTest.java @@ -27,11 +27,9 @@ import java.lang.foreign.Arena; import java.lang.foreign.MemorySegment; -import org.junit.Assume; import org.junit.Test; import jdk.graal.compiler.core.test.GraalCompilerTest; -import jdk.graal.compiler.serviceprovider.JavaVersionUtil; import jdk.graal.compiler.test.AddExports; import jdk.internal.misc.Unsafe; import jdk.vm.ci.code.InstalledCode; diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/core/common/Fields.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/core/common/Fields.java index 4f93edc8ea96..0b8dd2fa3ef9 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/core/common/Fields.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/core/common/Fields.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2024, 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 @@ -24,23 +24,20 @@ */ package jdk.graal.compiler.core.common; -import static jdk.graal.compiler.serviceprovider.GraalUnsafeAccess.getUnsafe; - import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import jdk.graal.compiler.debug.GraalError; - -import sun.misc.Unsafe; +import jdk.internal.misc.Unsafe; /** * Describes fields in a class, primarily for access via {@link Unsafe}. */ public class Fields { - private static final Unsafe UNSAFE = getUnsafe(); + private static final Unsafe UNSAFE = Unsafe.getUnsafe(); private static final Fields EMPTY_FIELDS = new Fields(Collections.emptyList()); /** @@ -149,7 +146,7 @@ public void copy(Object from, Object to, ObjectTransformer trans) { assert false : "unhandled property type: " + type; } } else { - Object obj = UNSAFE.getObject(from, offset); + Object obj = UNSAFE.getReference(from, offset); if (obj != null && type.isArray()) { if (type.getComponentType().isPrimitive()) { obj = copyObjectAsArray(obj); @@ -157,7 +154,7 @@ public void copy(Object from, Object to, ObjectTransformer trans) { obj = ((Object[]) obj).clone(); } } - UNSAFE.putObject(to, offset, trans == null ? obj : trans.apply(index, obj)); + UNSAFE.putReference(to, offset, trans == null ? obj : trans.apply(index, obj)); } } } @@ -218,7 +215,7 @@ public Object get(Object object, int index) { assert false : "unhandled property type: " + type; } } else { - value = UNSAFE.getObject(object, offset); + value = UNSAFE.getReference(object, offset); } return value; } @@ -382,16 +379,16 @@ public double getDouble(Object n, int i) { public Object getObject(Object object, int i) { assert !types[i].isPrimitive(); - return UNSAFE.getObject(object, offsets[i]); + return UNSAFE.getReference(object, offsets[i]); } public void putObject(Object object, int i, Object value) { assert checkAssignableFrom(object, i, value); - UNSAFE.putObject(object, offsets[i], value); + UNSAFE.putReference(object, offsets[i], value); } public void putObjectChecked(Object object, int i, Object value) { checkAssignableFrom(object, i, value); - UNSAFE.putObject(object, offsets[i], value); + UNSAFE.putReference(object, offsets[i], value); } } diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/core/common/FieldsScanner.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/core/common/FieldsScanner.java index d97097bd959a..4ed7bd7962b7 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/core/common/FieldsScanner.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/core/common/FieldsScanner.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2024, 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 @@ -24,13 +24,11 @@ */ package jdk.graal.compiler.core.common; -import static jdk.graal.compiler.serviceprovider.GraalUnsafeAccess.getUnsafe; - import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.ArrayList; -import sun.misc.Unsafe; +import jdk.internal.misc.Unsafe; /** * Scans the fields in a class hierarchy. @@ -50,9 +48,8 @@ public interface CalcOffset { */ public static class DefaultCalcOffset implements CalcOffset { - private static final Unsafe UNSAFE = getUnsafe(); + private static final Unsafe UNSAFE = Unsafe.getUnsafe(); - @SuppressWarnings("deprecation"/* JDK-8277863 */) @Override public long getOffset(Field field) { return UNSAFE.objectFieldOffset(field); diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/core/common/util/UnsafeArrayTypeReader.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/core/common/util/UnsafeArrayTypeReader.java index b2c33310ed28..b2e6f9b4f79c 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/core/common/util/UnsafeArrayTypeReader.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/core/common/util/UnsafeArrayTypeReader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2024, 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 @@ -24,9 +24,7 @@ */ package jdk.graal.compiler.core.common.util; -import static jdk.graal.compiler.serviceprovider.GraalUnsafeAccess.getUnsafe; - -import sun.misc.Unsafe; +import jdk.internal.misc.Unsafe; /** * Provides low-level read access from a byte[] array for signed and unsigned values of size 1, 2, @@ -42,7 +40,7 @@ */ public abstract class UnsafeArrayTypeReader extends AbstractTypeReader { - private static final Unsafe UNSAFE = getUnsafe(); + private static final Unsafe UNSAFE = Unsafe.getUnsafe(); public static int getS1(byte[] data, long byteIndex) { return UNSAFE.getByte(data, readOffset(data, byteIndex, Byte.BYTES)); @@ -145,7 +143,7 @@ public final long getU4() { } final class UnalignedUnsafeArrayTypeReader extends UnsafeArrayTypeReader { - private static final Unsafe UNSAFE = getUnsafe(); + private static final Unsafe UNSAFE = Unsafe.getUnsafe(); protected static int getS2(byte[] data, long byteIndex) { return UNSAFE.getShort(data, readOffset(data, byteIndex, Short.BYTES)); @@ -186,7 +184,7 @@ public long getS8() { } class AlignedUnsafeArrayTypeReader extends UnsafeArrayTypeReader { - private static final Unsafe UNSAFE = getUnsafe(); + private static final Unsafe UNSAFE = Unsafe.getUnsafe(); protected static int getS2(byte[] data, long byteIndex) { long offset = readOffset(data, byteIndex, Short.BYTES); diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/core/common/util/UnsafeArrayTypeWriter.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/core/common/util/UnsafeArrayTypeWriter.java index 3376125c82f1..fe552c3f0c21 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/core/common/util/UnsafeArrayTypeWriter.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/core/common/util/UnsafeArrayTypeWriter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2024, 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 @@ -30,13 +30,12 @@ import static jdk.graal.compiler.core.common.util.TypeConversion.asU1; import static jdk.graal.compiler.core.common.util.TypeConversion.asU2; import static jdk.graal.compiler.core.common.util.TypeConversion.asU4; -import static jdk.graal.compiler.serviceprovider.GraalUnsafeAccess.getUnsafe; import java.nio.ByteBuffer; import jdk.graal.compiler.core.common.calc.UnsignedMath; import jdk.graal.compiler.debug.Assertions; -import sun.misc.Unsafe; +import jdk.internal.misc.Unsafe; /** * Provides low-level sequential write access to a byte[] array for signed and unsigned values of @@ -49,7 +48,7 @@ * fallback that works on every hardware. */ public abstract class UnsafeArrayTypeWriter implements TypeWriter { - private static final Unsafe UNSAFE = getUnsafe(); + private static final Unsafe UNSAFE = Unsafe.getUnsafe(); private static final int MIN_CHUNK_LENGTH = 200; private static final int MAX_CHUNK_LENGTH = 16000; @@ -246,7 +245,7 @@ private void writePacked(long value) { } final class UnalignedUnsafeArrayTypeWriter extends UnsafeArrayTypeWriter { - private static final Unsafe UNSAFE = getUnsafe(); + private static final Unsafe UNSAFE = Unsafe.getUnsafe(); @Override protected void putS2(long value, Chunk chunk, long offset) { @@ -265,7 +264,7 @@ protected void putS8(long value, Chunk chunk, long offset) { } final class AlignedUnsafeArrayTypeWriter extends UnsafeArrayTypeWriter { - private static final Unsafe UNSAFE = getUnsafe(); + private static final Unsafe UNSAFE = Unsafe.getUnsafe(); @Override protected void putS2(long value, Chunk chunk, long offset) { @@ -297,7 +296,7 @@ protected void putS8(long value, Chunk chunk, long offset) { } final class BigEndianUnsafeArrayTypeWriter extends UnsafeArrayTypeWriter { - private static final Unsafe UNSAFE = getUnsafe(); + private static final Unsafe UNSAFE = Unsafe.getUnsafe(); @Override protected void putS2(long value, Chunk chunk, long offset) { diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/graph/Edges.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/graph/Edges.java index 3361ff5879bb..2bea2c5a7c96 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/graph/Edges.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/graph/Edges.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2024, 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 @@ -33,9 +33,7 @@ import jdk.graal.compiler.core.common.Fields; import jdk.graal.compiler.core.common.FieldsScanner; import jdk.graal.compiler.graph.NodeClass.EdgeInfo; -import jdk.graal.compiler.serviceprovider.GraalUnsafeAccess; - -import sun.misc.Unsafe; +import jdk.internal.misc.Unsafe; /** * Describes {@link Node} fields representing the set of inputs for the node or the set of the @@ -43,7 +41,7 @@ */ public abstract class Edges extends Fields { - private static final Unsafe UNSAFE = GraalUnsafeAccess.getUnsafe(); + private static final Unsafe UNSAFE = Unsafe.getUnsafe(); /** * Constants denoting whether a set of edges are inputs or successors. @@ -69,12 +67,12 @@ public static void translateInto(Edges edges, ArrayList infos) { } public static Node getNodeUnsafe(Node node, long offset) { - return (Node) UNSAFE.getObject(node, offset); + return (Node) UNSAFE.getReference(node, offset); } @SuppressWarnings("unchecked") public static NodeList getNodeListUnsafe(Node node, long offset) { - return (NodeList) UNSAFE.getObject(node, offset); + return (NodeList) UNSAFE.getReference(node, offset); } public void putNodeUnsafeChecked(Node node, long offset, Node value, int index) { @@ -83,11 +81,11 @@ public void putNodeUnsafeChecked(Node node, long offset, Node value, int index) } public static void putNodeUnsafe(Node node, long offset, Node value) { - UNSAFE.putObject(node, offset, value); + UNSAFE.putReference(node, offset, value); } public static void putNodeListUnsafe(Node node, long offset, NodeList value) { - UNSAFE.putObject(node, offset, value); + UNSAFE.putReference(node, offset, value); } /** diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/graph/Node.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/graph/Node.java index 8ebe9bd8c317..469e93eada84 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/graph/Node.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/graph/Node.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2024, 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 @@ -25,7 +25,6 @@ package jdk.graal.compiler.graph; import static jdk.graal.compiler.graph.Graph.isNodeModificationCountsEnabled; -import static jdk.graal.compiler.serviceprovider.GraalUnsafeAccess.getUnsafe; import java.lang.annotation.ElementType; import java.lang.annotation.RetentionPolicy; @@ -62,8 +61,8 @@ import jdk.graal.compiler.nodeinfo.Verbosity; import jdk.graal.compiler.nodes.spi.Simplifiable; import jdk.graal.compiler.options.OptionValues; +import jdk.internal.misc.Unsafe; import jdk.vm.ci.services.Services; -import sun.misc.Unsafe; /** * This class is the base class for all nodes. It represents a node that can be inserted in a @@ -94,7 +93,7 @@ @NodeInfo public abstract class Node implements Cloneable, Formattable { - private static final Unsafe UNSAFE = getUnsafe(); + private static final Unsafe UNSAFE = Unsafe.getUnsafe(); public static final NodeClass TYPE = null; diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/graph/NodeClass.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/graph/NodeClass.java index 08420e93f4b3..59abddca21a9 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/graph/NodeClass.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/graph/NodeClass.java @@ -70,8 +70,7 @@ import jdk.graal.compiler.nodeinfo.NodeInfo; import jdk.graal.compiler.nodeinfo.NodeSize; import jdk.graal.compiler.nodeinfo.Verbosity; -import jdk.graal.compiler.serviceprovider.GraalUnsafeAccess; -import sun.misc.Unsafe; +import jdk.internal.misc.Unsafe; /** * Metadata for every {@link Node} type. The metadata includes: @@ -83,7 +82,7 @@ */ public final class NodeClass extends FieldIntrospection { - private static final Unsafe UNSAFE = GraalUnsafeAccess.getUnsafe(); + private static final Unsafe UNSAFE = Unsafe.getUnsafe(); // Timers for creation of a NodeClass instance private static final TimerKey Init_FieldScanning = DebugContext.timer("NodeClass.Init.FieldScanning"); private static final TimerKey Init_FieldScanningInner = DebugContext.timer("NodeClass.Init.FieldScanning.Inner"); diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/HotSpotGraalCompiler.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/HotSpotGraalCompiler.java index 7153e9b34eb2..4dbd368310da 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/HotSpotGraalCompiler.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/HotSpotGraalCompiler.java @@ -58,7 +58,7 @@ import jdk.graal.compiler.phases.tiers.HighTierContext; import jdk.graal.compiler.phases.tiers.Suites; import jdk.graal.compiler.printer.GraalDebugHandlersFactory; -import jdk.graal.compiler.serviceprovider.GraalUnsafeAccess; +import jdk.internal.misc.Unsafe; import jdk.vm.ci.code.CompilationRequest; import jdk.vm.ci.code.CompilationRequestResult; import jdk.vm.ci.hotspot.HotSpotCompilationRequest; @@ -72,11 +72,10 @@ import jdk.vm.ci.meta.TriState; import jdk.vm.ci.runtime.JVMCICompiler; import jdk.vm.ci.services.Services; -import sun.misc.Unsafe; public class HotSpotGraalCompiler implements GraalJVMCICompiler, Cancellable, JVMCICompilerShadow { - private static final Unsafe UNSAFE = GraalUnsafeAccess.getUnsafe(); + private static final Unsafe UNSAFE = Unsafe.getUnsafe(); private final HotSpotJVMCIRuntime jvmciRuntime; private final HotSpotGraalRuntimeProvider graalRuntime; private final CompilationCounters compilationCounters; diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/aarch64/AArch64HotSpotBackend.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/aarch64/AArch64HotSpotBackend.java index 110a15ae043d..b5b3bcdf7359 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/aarch64/AArch64HotSpotBackend.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/aarch64/AArch64HotSpotBackend.java @@ -75,7 +75,7 @@ import jdk.graal.compiler.lir.gen.LIRGeneratorTool; import jdk.graal.compiler.nodes.StructuredGraph; import jdk.graal.compiler.nodes.spi.NodeLIRBuilderTool; -import jdk.graal.compiler.serviceprovider.GraalUnsafeAccess; +import jdk.internal.misc.Unsafe; import jdk.vm.ci.aarch64.AArch64Kind; import jdk.vm.ci.code.CallingConvention; import jdk.vm.ci.code.CompilationRequest; @@ -89,7 +89,6 @@ import jdk.vm.ci.meta.JavaKind; import jdk.vm.ci.meta.JavaType; import jdk.vm.ci.meta.ResolvedJavaMethod; -import sun.misc.Unsafe; /** * HotSpot AArch64 specific backend. @@ -158,7 +157,7 @@ private boolean hasInvalidatePlaceholder(CompilationResult compilationResult) { break; } } - Unsafe unsafe = GraalUnsafeAccess.getUnsafe(); + Unsafe unsafe = Unsafe.getUnsafe(); int instruction = unsafe.getIntVolatile(targetCode, unsafe.arrayBaseOffset(byte[].class) + verifiedEntryOffset); AArch64MacroAssembler masm = new AArch64MacroAssembler(getTarget()); masm.nop(); diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/meta/HotSpotExceptionDispatchPlugin.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/meta/HotSpotExceptionDispatchPlugin.java index 091cbe01755a..b4222ca075df 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/meta/HotSpotExceptionDispatchPlugin.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/meta/HotSpotExceptionDispatchPlugin.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2024, 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 @@ -24,12 +24,14 @@ */ package jdk.graal.compiler.hotspot.meta; +import static jdk.graal.compiler.hotspot.meta.HotSpotExceptionDispatchPlugin.Options.HotSpotPostOnExceptions; import static jdk.vm.ci.meta.DeoptimizationAction.None; import static jdk.vm.ci.meta.DeoptimizationReason.TransferToInterpreter; -import static jdk.graal.compiler.hotspot.meta.HotSpotExceptionDispatchPlugin.Options.HotSpotPostOnExceptions; import java.util.function.Supplier; +import org.graalvm.word.LocationIdentity; + import jdk.graal.compiler.core.common.CompilationIdentifier; import jdk.graal.compiler.core.common.memory.BarrierType; import jdk.graal.compiler.core.common.memory.MemoryOrderMode; @@ -53,12 +55,9 @@ import jdk.graal.compiler.options.Option; import jdk.graal.compiler.options.OptionKey; import jdk.graal.compiler.options.OptionType; -import jdk.graal.compiler.serviceprovider.GraalUnsafeAccess; -import org.graalvm.word.LocationIdentity; - +import jdk.internal.misc.Unsafe; import jdk.vm.ci.hotspot.HotSpotCompilationRequest; import jdk.vm.ci.meta.JavaKind; -import sun.misc.Unsafe; /** * This plugin does HotSpot-specific instrumentation of exception dispatch to check the @@ -71,7 +70,7 @@ public static class Options { public static final OptionKey HotSpotPostOnExceptions = new OptionKey<>(false); } - private static final Unsafe UNSAFE = GraalUnsafeAccess.getUnsafe(); + private static final Unsafe UNSAFE = Unsafe.getUnsafe(); private final GraalHotSpotVMConfig config; private final JavaKind wordKind; diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/replacements/SnippetCounterNode.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/replacements/SnippetCounterNode.java index f13f639e6616..cf388fb18c43 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/replacements/SnippetCounterNode.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/replacements/SnippetCounterNode.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2024, 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 @@ -30,6 +30,8 @@ import java.util.Arrays; +import org.graalvm.word.LocationIdentity; + import jdk.graal.compiler.api.replacements.Fold; import jdk.graal.compiler.api.replacements.Snippet; import jdk.graal.compiler.api.replacements.Snippet.ConstantParameter; @@ -48,11 +50,8 @@ import jdk.graal.compiler.replacements.SnippetTemplate.AbstractTemplates; import jdk.graal.compiler.replacements.SnippetTemplate.Arguments; import jdk.graal.compiler.replacements.SnippetTemplate.SnippetInfo; -import jdk.graal.compiler.serviceprovider.GraalUnsafeAccess; import jdk.graal.compiler.word.ObjectAccess; -import org.graalvm.word.LocationIdentity; - -import sun.misc.Unsafe; +import jdk.internal.misc.Unsafe; /** * This node can be used to add a counter to the code that will estimate the dynamic number of calls @@ -126,9 +125,8 @@ public static LocationIdentity[] addSnippetCounters(LocationIdentity[] privateLo static class SnippetCounterSnippets implements Snippets { - private static final Unsafe UNSAFE = GraalUnsafeAccess.getUnsafe(); + private static final Unsafe UNSAFE = Unsafe.getUnsafe(); - @SuppressWarnings("deprecation"/* JDK-8277863 */) @Fold static int countOffset() { try { diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/replacements/StandardGraphBuilderPlugins.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/replacements/StandardGraphBuilderPlugins.java index 3b58a1f43d47..bd9921a2d784 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/replacements/StandardGraphBuilderPlugins.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/replacements/StandardGraphBuilderPlugins.java @@ -646,12 +646,14 @@ private static String memoryOrderModeToMethodSuffix(MemoryOrderMode memoryOrder) } private static void registerUnsafePlugins(InvocationPlugins plugins, Replacements replacements, boolean explicitUnsafeNullChecks) { - Registration sunMiscUnsafe = new Registration(plugins, "sun.misc.Unsafe"); - registerUnsafePlugins0(sunMiscUnsafe, true, explicitUnsafeNullChecks); - JavaKind[] supportedJavaKinds = {JavaKind.Int, JavaKind.Long, JavaKind.Object}; - registerUnsafeGetAndOpPlugins(sunMiscUnsafe, true, explicitUnsafeNullChecks, supportedJavaKinds); - registerUnsafeAtomicsPlugins(sunMiscUnsafe, true, explicitUnsafeNullChecks, "compareAndSwap", supportedJavaKinds, VOLATILE); + + if (JavaVersionUtil.JAVA_SPEC == 21) { + Registration sunMiscUnsafe = new Registration(plugins, "sun.misc.Unsafe"); + registerUnsafePlugins0(sunMiscUnsafe, true, explicitUnsafeNullChecks); + registerUnsafeGetAndOpPlugins(sunMiscUnsafe, true, explicitUnsafeNullChecks, supportedJavaKinds); + registerUnsafeAtomicsPlugins(sunMiscUnsafe, true, explicitUnsafeNullChecks, "compareAndSwap", supportedJavaKinds, VOLATILE); + } Registration jdkInternalMiscUnsafe = new Registration(plugins, "jdk.internal.misc.Unsafe", replacements); diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/serviceprovider/GlobalAtomicLong.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/serviceprovider/GlobalAtomicLong.java index 4bef14b89b27..c323d818c3d0 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/serviceprovider/GlobalAtomicLong.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/serviceprovider/GlobalAtomicLong.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, 2024, 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 @@ -27,7 +27,7 @@ import java.lang.ref.Cleaner; import java.util.concurrent.atomic.AtomicLong; -import sun.misc.Unsafe; +import jdk.internal.misc.Unsafe; /** * A shareable long value in the JVM process that is updated atomically. The long value is stored in @@ -39,7 +39,7 @@ */ public class GlobalAtomicLong { - private static final Unsafe UNSAFE = GraalUnsafeAccess.getUnsafe(); + private static final Unsafe UNSAFE = Unsafe.getUnsafe(); /** * Cleaner for freeing {@link #address}. @@ -166,6 +166,6 @@ public long getAndDecrement() { * @see AtomicLong#compareAndSet(long, long) */ public boolean compareAndSet(long expectedValue, long newValue) { - return UNSAFE.compareAndSwapLong(null, getAddress(), expectedValue, newValue); + return UNSAFE.compareAndSetLong(null, getAddress(), expectedValue, newValue); } } diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/word/Word.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/word/Word.java index d642a41d8d10..d4bf78510df2 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/word/Word.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/word/Word.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2024, 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 @@ -29,6 +29,15 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import org.graalvm.word.ComparableWord; +import org.graalvm.word.LocationIdentity; +import org.graalvm.word.Pointer; +import org.graalvm.word.SignedWord; +import org.graalvm.word.UnsignedWord; +import org.graalvm.word.WordBase; +import org.graalvm.word.WordFactory; +import org.graalvm.word.impl.WordBoxFactory; + import jdk.graal.compiler.core.common.calc.Condition; import jdk.graal.compiler.core.common.calc.UnsignedMath; import jdk.graal.compiler.core.common.memory.BarrierType; @@ -48,21 +57,11 @@ import jdk.graal.compiler.nodes.calc.UnsignedRightShiftNode; import jdk.graal.compiler.nodes.calc.XorNode; import jdk.graal.compiler.nodes.memory.address.AddressNode.Address; -import jdk.graal.compiler.serviceprovider.GraalUnsafeAccess; -import org.graalvm.word.ComparableWord; -import org.graalvm.word.LocationIdentity; -import org.graalvm.word.Pointer; -import org.graalvm.word.SignedWord; -import org.graalvm.word.UnsignedWord; -import org.graalvm.word.WordBase; -import org.graalvm.word.WordFactory; -import org.graalvm.word.impl.WordBoxFactory; - -import sun.misc.Unsafe; +import jdk.internal.misc.Unsafe; public abstract class Word implements SignedWord, UnsignedWord, Pointer { - private static final Unsafe UNSAFE = GraalUnsafeAccess.getUnsafe(); + private static final Unsafe UNSAFE = Unsafe.getUnsafe(); static { BoxFactoryImpl.initialize(); @@ -1073,13 +1072,13 @@ public void writeDouble(WordBase offset, double val) { @Override @Operation(opcode = Opcode.CAS_POINTER) public boolean logicCompareAndSwapInt(WordBase offset, int expectedValue, int newValue, LocationIdentity locationIdentity) { - return UNSAFE.compareAndSwapInt(this.toObject(), ((Word) offset).unbox(), expectedValue, newValue); + return UNSAFE.compareAndSetInt(this.toObject(), ((Word) offset).unbox(), expectedValue, newValue); } @Override @Operation(opcode = Opcode.CAS_POINTER) public boolean logicCompareAndSwapLong(WordBase offset, long expectedValue, long newValue, LocationIdentity locationIdentity) { - return UNSAFE.compareAndSwapLong(this.toObject(), ((Word) offset).unbox(), expectedValue, newValue); + return UNSAFE.compareAndSetLong(this.toObject(), ((Word) offset).unbox(), expectedValue, newValue); } @Override @@ -1089,7 +1088,7 @@ public boolean logicCompareAndSwapLong(WordBase offset, long expectedValue, long @Override @Operation(opcode = Opcode.CAS_POINTER) public boolean logicCompareAndSwapObject(WordBase offset, Object expectedValue, Object newValue, LocationIdentity locationIdentity) { - return UNSAFE.compareAndSwapObject(this.toObject(), ((Word) offset).unbox(), expectedValue, newValue); + return UNSAFE.compareAndSetReference(this.toObject(), ((Word) offset).unbox(), expectedValue, newValue); } @Override diff --git a/sdk/mx.sdk/mx_sdk_vm.py b/sdk/mx.sdk/mx_sdk_vm.py index 5bf52a43d8c3..2e7dd7ce4096 100644 --- a/sdk/mx.sdk/mx_sdk_vm.py +++ b/sdk/mx.sdk/mx_sdk_vm.py @@ -830,6 +830,8 @@ def _get_image_vm_options(jdk, use_upgrade_module_path, modules, synthetic_modul if default_to_jvmci == 'lib': vm_options.append('-XX:+UseJVMCINativeLibrary') vm_options.extend(['-XX:-UnlockExperimentalVMOptions']) + if 'jdk.graal.compiler' in non_synthetic_modules: + vm_options.extend(['--add-exports=java.base/jdk.internal.misc=jdk.graal.compiler']) else: # Don't default to using JVMCI as JIT unless Graal is being updated in the image. # This avoids unexpected issues with using the out-of-date Graal compiler in