Skip to content

Commit ea1abd3

Browse files
committed
[GR-39014] [GR-41271] Introduce NATIVE_ONLY and make Native Image more extensible.
PullRequest: graal/12826
2 parents fec14df + 9b45c9f commit ea1abd3

File tree

17 files changed

+148
-82
lines changed

17 files changed

+148
-82
lines changed

sdk/src/org.graalvm.nativeimage/snapshot.sigtest

Lines changed: 31 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -130,13 +130,6 @@ meth public static org.graalvm.nativeimage.Isolate getIsolate()
130130
meth public static org.graalvm.nativeimage.IsolateThread getCurrentThread()
131131
supr java.lang.Object
132132

133-
CLSS public org.graalvm.nativeimage.AnnotationAccess
134-
cons public init()
135-
meth public static <%0 extends java.lang.annotation.Annotation> {%%0} getAnnotation(java.lang.reflect.AnnotatedElement,java.lang.Class<{%%0}>)
136-
meth public static boolean isAnnotationPresent(java.lang.reflect.AnnotatedElement,java.lang.Class<? extends java.lang.annotation.Annotation>)
137-
meth public static java.lang.Class<? extends java.lang.annotation.Annotation>[] getAnnotationTypes(java.lang.reflect.AnnotatedElement)
138-
supr java.lang.Object
139-
140133
CLSS public final org.graalvm.nativeimage.ImageInfo
141134
fld public final static java.lang.String PROPERTY_IMAGE_CODE_KEY = "org.graalvm.nativeimage.imagecode"
142135
fld public final static java.lang.String PROPERTY_IMAGE_CODE_VALUE_BUILDTIME = "buildtime"
@@ -264,11 +257,13 @@ meth public static boolean includedIn(java.lang.Class<? extends org.graalvm.nati
264257
CLSS public abstract interface static org.graalvm.nativeimage.Platform$AARCH64
265258
outer org.graalvm.nativeimage.Platform
266259
intf org.graalvm.nativeimage.Platform
260+
intf org.graalvm.nativeimage.impl.InternalPlatform$NATIVE_ONLY
267261
meth public java.lang.String getArchitecture()
268262

269263
CLSS public abstract interface static org.graalvm.nativeimage.Platform$AMD64
270264
outer org.graalvm.nativeimage.Platform
271265
intf org.graalvm.nativeimage.Platform
266+
intf org.graalvm.nativeimage.impl.InternalPlatform$NATIVE_ONLY
272267
meth public java.lang.String getArchitecture()
273268

274269
CLSS public abstract interface static org.graalvm.nativeimage.Platform$ANDROID
@@ -285,6 +280,7 @@ supr java.lang.Object
285280

286281
CLSS public abstract interface static org.graalvm.nativeimage.Platform$DARWIN
287282
outer org.graalvm.nativeimage.Platform
283+
intf org.graalvm.nativeimage.impl.InternalPlatform$NATIVE_ONLY
288284
intf org.graalvm.nativeimage.impl.InternalPlatform$PLATFORM_JNI
289285

290286
CLSS public abstract interface static org.graalvm.nativeimage.Platform$DARWIN_AARCH64
@@ -323,6 +319,7 @@ supr java.lang.Object
323319

324320
CLSS public abstract interface static org.graalvm.nativeimage.Platform$LINUX
325321
outer org.graalvm.nativeimage.Platform
322+
intf org.graalvm.nativeimage.impl.InternalPlatform$NATIVE_ONLY
326323
intf org.graalvm.nativeimage.impl.InternalPlatform$PLATFORM_JNI
327324
meth public java.lang.String getOS()
328325

@@ -371,6 +368,7 @@ supr java.lang.Object
371368

372369
CLSS public abstract interface static org.graalvm.nativeimage.Platform$WINDOWS
373370
outer org.graalvm.nativeimage.Platform
371+
intf org.graalvm.nativeimage.impl.InternalPlatform$NATIVE_ONLY
374372
intf org.graalvm.nativeimage.impl.InternalPlatform$PLATFORM_JNI
375373
meth public java.lang.String getOS()
376374

@@ -933,9 +931,9 @@ meth public abstract void registerAsInHeap(java.lang.Class<?>)
933931
meth public abstract void registerAsUnsafeAccessed(java.lang.reflect.Field)
934932
meth public abstract void registerAsUsed(java.lang.Class<?>)
935933
meth public abstract void registerClassInitializerReachabilityHandler(java.util.function.Consumer<org.graalvm.nativeimage.hosted.Feature$DuringAnalysisAccess>,java.lang.Class<?>)
934+
meth public abstract void registerFieldValueTransformer(java.lang.reflect.Field,org.graalvm.nativeimage.hosted.FieldValueTransformer)
936935
meth public abstract void registerMethodOverrideReachabilityHandler(java.util.function.BiConsumer<org.graalvm.nativeimage.hosted.Feature$DuringAnalysisAccess,java.lang.reflect.Executable>,java.lang.reflect.Executable)
937936
meth public abstract void registerSubtypeReachabilityHandler(java.util.function.BiConsumer<org.graalvm.nativeimage.hosted.Feature$DuringAnalysisAccess,java.lang.Class<?>>,java.lang.Class<?>)
938-
meth public abstract void registerFieldValueTransformer(java.lang.reflect.Field,org.graalvm.nativeimage.hosted.FieldValueTransformer)
939937

940938
CLSS public abstract interface static org.graalvm.nativeimage.hosted.Feature$BeforeCompilationAccess
941939
outer org.graalvm.nativeimage.hosted.Feature
@@ -991,13 +989,26 @@ meth public abstract boolean isReachable(java.lang.reflect.Field)
991989
meth public abstract java.util.Set<java.lang.Class<?>> reachableSubtypes(java.lang.Class<?>)
992990
meth public abstract java.util.Set<java.lang.reflect.Executable> reachableMethodOverrides(java.lang.reflect.Executable)
993991

992+
CLSS public abstract interface org.graalvm.nativeimage.hosted.FieldValueTransformer
993+
meth public abstract java.lang.Object transform(java.lang.Object,java.lang.Object)
994+
994995
CLSS public final org.graalvm.nativeimage.hosted.RuntimeClassInitialization
995996
meth public !varargs static void initializeAtBuildTime(java.lang.Class<?>[])
996997
meth public !varargs static void initializeAtBuildTime(java.lang.String[])
997998
meth public !varargs static void initializeAtRunTime(java.lang.Class<?>[])
998999
meth public !varargs static void initializeAtRunTime(java.lang.String[])
9991000
supr java.lang.Object
10001001

1002+
CLSS public final org.graalvm.nativeimage.hosted.RuntimeJNIAccess
1003+
meth public !varargs static void register(java.lang.Class<?>[])
1004+
meth public !varargs static void register(java.lang.reflect.Executable[])
1005+
meth public !varargs static void register(java.lang.reflect.Field[])
1006+
supr java.lang.Object
1007+
1008+
CLSS public final org.graalvm.nativeimage.hosted.RuntimeProxyCreation
1009+
meth public !varargs static void register(java.lang.Class<?>[])
1010+
supr java.lang.Object
1011+
10011012
CLSS public final org.graalvm.nativeimage.hosted.RuntimeReflection
10021013
meth public !varargs static void register(boolean,boolean,java.lang.reflect.Field[])
10031014
anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="21.1")
@@ -1010,34 +1021,29 @@ meth public !varargs static void registerAsQueried(java.lang.reflect.Executable[
10101021
meth public !varargs static void registerForReflectiveInstantiation(java.lang.Class<?>[])
10111022
supr java.lang.Object
10121023

1013-
CLSS public final org.graalvm.nativeimage.hosted.RuntimeJNIAccess
1014-
meth public !varargs static void register(java.lang.Class<?>[])
1015-
meth public !varargs static void register(java.lang.reflect.Executable[])
1016-
meth public !varargs static void register(java.lang.reflect.Field[])
1024+
CLSS public final org.graalvm.nativeimage.hosted.RuntimeResourceAccess
1025+
meth public static void addResource(java.lang.Module,java.lang.String)
1026+
meth public static void addResource(java.lang.Module,java.lang.String,byte[])
1027+
meth public static void addResourceBundle(java.lang.Module,java.lang.String)
1028+
meth public static void addResourceBundle(java.lang.Module,java.lang.String,java.util.Locale[])
10171029
supr java.lang.Object
10181030

10191031
CLSS public final org.graalvm.nativeimage.hosted.RuntimeSerialization
10201032
meth public !varargs static void register(java.lang.Class<?>[])
1033+
meth public !varargs static void registerProxyClass(java.lang.Class<?>[])
10211034
meth public static void registerIncludingAssociatedClasses(java.lang.Class<?>)
1022-
meth public static void registerWithTargetConstructorClass(java.lang.Class<?>,java.lang.Class<?>)
10231035
meth public static void registerLambdaCapturingClass(java.lang.Class<?>)
1024-
meth public !varargs static void registerProxyClass(java.lang.Class<?>[])
1025-
supr java.lang.Object
1026-
1027-
CLSS public final org.graalvm.nativeimage.hosted.RuntimeProxyCreation
1028-
meth public !varargs static void register(java.lang.Class<?>[])
1029-
supr java.lang.Object
1030-
1031-
CLSS public final org.graalvm.nativeimage.hosted.RuntimeResourceAccess
1032-
meth public static void addResource(java.lang.Module,java.lang.String)
1033-
meth public static void addResource(java.lang.Module,java.lang.String,byte[])
1034-
meth public static void addResourceBundle(java.lang.Module,java.lang.String,java.util.Locale[])
1035-
meth public static void addResourceBundle(java.lang.Module,java.lang.String)
1036+
meth public static void registerWithTargetConstructorClass(java.lang.Class<?>,java.lang.Class<?>)
10361037
supr java.lang.Object
10371038

10381039
CLSS public abstract interface org.graalvm.nativeimage.impl.InternalPlatform
1040+
innr public abstract interface static NATIVE_ONLY
10391041
innr public abstract interface static PLATFORM_JNI
10401042

1043+
CLSS public abstract interface static org.graalvm.nativeimage.impl.InternalPlatform$NATIVE_ONLY
1044+
outer org.graalvm.nativeimage.impl.InternalPlatform
1045+
intf org.graalvm.nativeimage.Platform
1046+
10411047
CLSS public abstract interface static org.graalvm.nativeimage.impl.InternalPlatform$PLATFORM_JNI
10421048
outer org.graalvm.nativeimage.impl.InternalPlatform
10431049
intf org.graalvm.nativeimage.Platform
@@ -1057,5 +1063,3 @@ meth public abstract boolean equals(java.lang.Object)
10571063
anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
10581064
meth public abstract long rawValue()
10591065

1060-
CLSS public abstract interface org.graalvm.nativeimage.hosted.FieldValueTransformer
1061-
meth public abstract java.lang.Object transform(java.lang.Object,java.lang.Object)

sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/Platform.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ default String getArchitecture() {
117117
*
118118
* @since 19.0
119119
*/
120-
interface AMD64 extends Platform {
120+
interface AMD64 extends Platform, InternalPlatform.NATIVE_ONLY {
121121

122122
/**
123123
* Returns string representing AMD64 architecture.
@@ -134,7 +134,7 @@ default String getArchitecture() {
134134
*
135135
* @since 19.0
136136
*/
137-
interface AARCH64 extends Platform {
137+
interface AARCH64 extends Platform, InternalPlatform.NATIVE_ONLY {
138138

139139
/**
140140
* Returns string representing AARCH64 architecture.
@@ -154,7 +154,7 @@ default String getArchitecture() {
154154
*
155155
* @since 19.0
156156
*/
157-
interface LINUX extends InternalPlatform.PLATFORM_JNI {
157+
interface LINUX extends InternalPlatform.PLATFORM_JNI, InternalPlatform.NATIVE_ONLY {
158158

159159
/**
160160
* Returns string representing LINUX OS.
@@ -188,7 +188,7 @@ default String getOS() {
188188
*
189189
* @since 19.0
190190
*/
191-
interface DARWIN extends InternalPlatform.PLATFORM_JNI {
191+
interface DARWIN extends InternalPlatform.PLATFORM_JNI, InternalPlatform.NATIVE_ONLY {
192192
}
193193

194194
/**
@@ -230,7 +230,7 @@ default String getOS() {
230230
*
231231
* @since 19.0
232232
*/
233-
interface WINDOWS extends InternalPlatform.PLATFORM_JNI {
233+
interface WINDOWS extends InternalPlatform.PLATFORM_JNI, InternalPlatform.NATIVE_ONLY {
234234

235235
/**
236236
* Returns string representing WINDOWS OS.

sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/InternalPlatform.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2013, 2020, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2013, 2022, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
@@ -51,4 +51,13 @@ public interface InternalPlatform {
5151
*/
5252
interface PLATFORM_JNI extends Platform {
5353
}
54+
55+
/**
56+
* Marker interface for native platforms.
57+
*
58+
* @since 23.0
59+
*/
60+
interface NATIVE_ONLY extends Platform {
61+
62+
}
5463
}

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/SecuritySubstitutions.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,11 @@
5151
import org.graalvm.nativeimage.hosted.FieldValueTransformer;
5252
import org.graalvm.word.Pointer;
5353

54+
import com.oracle.svm.core.NeverInline;
5455
import com.oracle.svm.core.SubstrateUtil;
5556
import com.oracle.svm.core.annotate.Alias;
5657
import com.oracle.svm.core.annotate.Delete;
5758
import com.oracle.svm.core.annotate.InjectAccessors;
58-
import com.oracle.svm.core.NeverInline;
5959
import com.oracle.svm.core.annotate.RecomputeFieldValue;
6060
import com.oracle.svm.core.annotate.Substitute;
6161
import com.oracle.svm.core.annotate.TargetClass;
@@ -65,6 +65,7 @@
6565
import com.oracle.svm.core.util.VMError;
6666
import com.oracle.svm.util.ReflectionUtil;
6767

68+
import jdk.internal.reflect.Reflection;
6869
import sun.security.jca.ProviderList;
6970
import sun.security.util.SecurityConstants;
7071

@@ -79,28 +80,28 @@ final class Target_java_security_AccessController {
7980
@Substitute
8081
@TargetElement(onlyWith = JDK11OrEarlier.class)
8182
public static <T> T doPrivileged(PrivilegedAction<T> action) throws Throwable {
82-
return executePrivileged(action, null, Target_jdk_internal_reflect_Reflection.getCallerClass());
83+
return executePrivileged(action, null, Reflection.getCallerClass());
8384
}
8485

8586
@Substitute
8687
@TargetElement(onlyWith = JDK11OrEarlier.class)
8788
public static <T> T doPrivileged(PrivilegedAction<T> action, AccessControlContext context) throws Throwable {
88-
Class<?> caller = Target_jdk_internal_reflect_Reflection.getCallerClass();
89+
Class<?> caller = Reflection.getCallerClass();
8990
AccessControlContext acc = checkContext(context, caller);
9091
return executePrivileged(action, acc, caller);
9192
}
9293

9394
@Substitute
9495
@TargetElement(onlyWith = JDK11OrEarlier.class)
9596
public static <T> T doPrivileged(PrivilegedExceptionAction<T> action) throws Throwable {
96-
Class<?> caller = Target_jdk_internal_reflect_Reflection.getCallerClass();
97+
Class<?> caller = Reflection.getCallerClass();
9798
return executePrivileged(action, null, caller);
9899
}
99100

100101
@Substitute
101102
@TargetElement(onlyWith = JDK11OrEarlier.class)
102103
static <T> T doPrivileged(PrivilegedExceptionAction<T> action, AccessControlContext context) throws Throwable {
103-
Class<?> caller = Target_jdk_internal_reflect_Reflection.getCallerClass();
104+
Class<?> caller = Reflection.getCallerClass();
104105
AccessControlContext acc = checkContext(context, caller);
105106
return executePrivileged(action, acc, caller);
106107
}

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/Target_jdk_internal_reflect_Reflection.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ final class Target_jdk_internal_reflect_Reflection {
3535

3636
@Substitute
3737
@NeverInline("Starting a stack walk in the caller frame")
38-
public static Class<?> getCallerClass() {
38+
private static Class<?> getCallerClass() {
3939
return StackTraceUtils.getCallerClass(KnownIntrinsics.readCallerStackPointer(), true);
4040
}
4141

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/reflect/target/ReflectionMetadataDecoderImpl.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@
3737
import org.graalvm.compiler.core.common.util.UnsafeArrayTypeReader;
3838
import org.graalvm.compiler.serviceprovider.JavaVersionUtil;
3939
import org.graalvm.nativeimage.ImageSingletons;
40+
import org.graalvm.nativeimage.Platforms;
41+
import org.graalvm.nativeimage.impl.InternalPlatform;
4042

4143
import com.oracle.svm.core.SubstrateUtil;
4244
import com.oracle.svm.core.c.NonmovableArrays;
@@ -56,6 +58,7 @@
5658
* See {@code ReflectionMetadataEncoderImpl} for details about the emission of the metadata.
5759
*/
5860
@AutomaticallyRegisteredImageSingleton(ReflectionMetadataDecoder.class)
61+
@Platforms(InternalPlatform.NATIVE_ONLY.class)
5962
public class ReflectionMetadataDecoderImpl implements ReflectionMetadataDecoder {
6063
/**
6164
* Error indices are less than {@link #NO_DATA}.

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/reflect/target/ReflectionMetadataEncoding.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,13 @@
2626

2727
import org.graalvm.nativeimage.Platform;
2828
import org.graalvm.nativeimage.Platforms;
29+
import org.graalvm.nativeimage.impl.InternalPlatform;
2930

3031
import com.oracle.svm.core.feature.AutomaticallyRegisteredImageSingleton;
3132
import com.oracle.svm.core.heap.UnknownObjectField;
3233

3334
@AutomaticallyRegisteredImageSingleton
35+
@Platforms(InternalPlatform.NATIVE_ONLY.class)
3436
public class ReflectionMetadataEncoding {
3537
@UnknownObjectField(types = {byte[].class}) private byte[] encoding;
3638

substratevm/src/com.oracle.svm.driver/src/com/oracle/svm/driver/NativeImage.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ protected static class BuildConfiguration {
267267
*/
268268
private static final Method isModulePathBuild = ReflectionUtil.lookupMethod(ModuleSupport.class, "isModulePathBuild");
269269

270-
boolean modulePathBuild;
270+
protected boolean modulePathBuild;
271271
String imageBuilderModeEnforcer;
272272

273273
protected final Path workDir;
@@ -323,10 +323,14 @@ protected BuildConfiguration(List<String> args) {
323323
}
324324

325325
/**
326-
* @return the name of the image generator main class.
326+
* @return The image generator main class entry point.
327327
*/
328-
public String getGeneratorMainClass() {
329-
return DEFAULT_GENERATOR_CLASS_NAME + DEFAULT_GENERATOR_9PLUS_SUFFIX;
328+
public List<String> getGeneratorMainClass() {
329+
if (modulePathBuild) {
330+
return Arrays.asList("--module", DEFAULT_GENERATOR_MODULE_NAME + "/" + DEFAULT_GENERATOR_CLASS_NAME);
331+
} else {
332+
return List.of(DEFAULT_GENERATOR_CLASS_NAME + DEFAULT_GENERATOR_9PLUS_SUFFIX);
333+
}
330334
}
331335

332336
/**
@@ -1305,11 +1309,8 @@ protected int buildImage(List<String> javaArgs, LinkedHashSet<Path> cp, LinkedHa
13051309
arguments.addAll(strings);
13061310
}
13071311

1308-
if (config.modulePathBuild) {
1309-
arguments.addAll(Arrays.asList("--module", DEFAULT_GENERATOR_MODULE_NAME + "/" + DEFAULT_GENERATOR_CLASS_NAME));
1310-
} else {
1311-
arguments.add(config.getGeneratorMainClass());
1312-
}
1312+
arguments.addAll(config.getGeneratorMainClass());
1313+
13131314
if (IS_AOT && OS.getCurrent().hasProcFS) {
13141315
/*
13151316
* GR-8254: Ensure image-building VM shuts down even if native-image dies unexpected

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ClassLoaderSupportImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262

6363
import jdk.internal.module.Modules;
6464

65-
class ClassLoaderSupportImpl extends ClassLoaderSupport {
65+
public class ClassLoaderSupportImpl extends ClassLoaderSupport {
6666

6767
private final NativeImageClassLoaderSupport classLoaderSupport;
6868

@@ -71,7 +71,7 @@ class ClassLoaderSupportImpl extends ClassLoaderSupport {
7171

7272
private final Map<String, Set<Module>> packageToModules;
7373

74-
ClassLoaderSupportImpl(NativeImageClassLoaderSupport classLoaderSupport) {
74+
public ClassLoaderSupportImpl(NativeImageClassLoaderSupport classLoaderSupport) {
7575
this.classLoaderSupport = classLoaderSupport;
7676

7777
imageClassLoader = classLoaderSupport.getClassLoader();

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/LinkAtBuildTimeSupport.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ static final class Options {
8080
private final ImageClassLoader imageClassLoader;
8181
private final Map<URI, Module> uriModuleMap;
8282

83-
LinkAtBuildTimeSupport(ImageClassLoader imageClassLoader, ClassLoaderSupport classLoaderSupport) {
83+
public LinkAtBuildTimeSupport(ImageClassLoader imageClassLoader, ClassLoaderSupport classLoaderSupport) {
8484
this.classLoaderSupport = classLoaderSupport;
8585
this.imageClassLoader = imageClassLoader;
8686

0 commit comments

Comments
 (0)