Skip to content

Commit 6cf285a

Browse files
committed
Skip deleted fields from relinking.
1 parent 272457e commit 6cf285a

File tree

2 files changed

+21
-17
lines changed

2 files changed

+21
-17
lines changed

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/imagelayer/SVMImageLayerLoader.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,7 @@
5454
import java.util.stream.Stream;
5555
import java.util.stream.StreamSupport;
5656

57-
import com.oracle.svm.shaded.org.capnproto.ListReader;
58-
import com.oracle.svm.shaded.org.capnproto.PrimitiveList;
59-
import com.oracle.svm.shaded.org.capnproto.StructList;
60-
import com.oracle.svm.shaded.org.capnproto.StructReader;
61-
import com.oracle.svm.shaded.org.capnproto.Text;
62-
import com.oracle.svm.shaded.org.capnproto.TextList;
57+
import org.graalvm.nativeimage.AnnotationAccess;
6358
import org.graalvm.nativeimage.ImageSingletons;
6459
import org.graalvm.nativeimage.c.function.CEntryPoint;
6560
import org.graalvm.nativeimage.impl.CEntryPointLiteralCodePointer;
@@ -87,6 +82,7 @@
8782
import com.oracle.graal.pointsto.util.AnalysisFuture;
8883
import com.oracle.graal.pointsto.util.CompletionExecutor.DebugContextRunnable;
8984
import com.oracle.svm.core.SubstrateOptions;
85+
import com.oracle.svm.core.annotate.Delete;
9086
import com.oracle.svm.core.classinitialization.ClassInitializationInfo;
9187
import com.oracle.svm.core.graal.code.CGlobalDataInfo;
9288
import com.oracle.svm.core.hub.DynamicHub;
@@ -124,6 +120,12 @@
124120
import com.oracle.svm.hosted.reflect.ReflectionFeature;
125121
import com.oracle.svm.hosted.reflect.serialize.SerializationFeature;
126122
import com.oracle.svm.hosted.util.IdentityHashCodeUtil;
123+
import com.oracle.svm.shaded.org.capnproto.ListReader;
124+
import com.oracle.svm.shaded.org.capnproto.PrimitiveList;
125+
import com.oracle.svm.shaded.org.capnproto.StructList;
126+
import com.oracle.svm.shaded.org.capnproto.StructReader;
127+
import com.oracle.svm.shaded.org.capnproto.Text;
128+
import com.oracle.svm.shaded.org.capnproto.TextList;
127129
import com.oracle.svm.util.LogUtils;
128130
import com.oracle.svm.util.ReflectionUtil;
129131

@@ -1536,7 +1538,7 @@ private JavaConstant lookupHostedObject(PersistedConstant.Reader baseLayerConsta
15361538
} else if (relinking.isFieldConstant()) {
15371539
var fieldConstant = relinking.getFieldConstant();
15381540
AnalysisField analysisField = getAnalysisFieldForBaseLayerId(fieldConstant.getOriginFieldId());
1539-
if (!(analysisField.getWrapped() instanceof BaseLayerField)) {
1541+
if (!(analysisField.getWrapped() instanceof BaseLayerField) && !AnnotationAccess.isAnnotationPresent(analysisField, Delete.class)) {
15401542
VMError.guarantee(!baseLayerConstant.getIsSimulated(), "Should not alter the initialization status for simulated constants.");
15411543
/*
15421544
* The declaring type of relinked fields was already initialized in the previous

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/imagelayer/SVMImageLayerWriter.java

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -67,15 +67,6 @@
6767
import java.util.stream.IntStream;
6868
import java.util.stream.Stream;
6969

70-
import com.oracle.svm.shaded.org.capnproto.ListBuilder;
71-
import com.oracle.svm.shaded.org.capnproto.MessageBuilder;
72-
import com.oracle.svm.shaded.org.capnproto.PrimitiveList;
73-
import com.oracle.svm.shaded.org.capnproto.Serialize;
74-
import com.oracle.svm.shaded.org.capnproto.StructBuilder;
75-
import com.oracle.svm.shaded.org.capnproto.StructList;
76-
import com.oracle.svm.shaded.org.capnproto.Text;
77-
import com.oracle.svm.shaded.org.capnproto.TextList;
78-
import com.oracle.svm.shaded.org.capnproto.Void;
7970
import org.graalvm.collections.EconomicMap;
8071
import org.graalvm.collections.MapCursor;
8172
import org.graalvm.nativeimage.AnnotationAccess;
@@ -104,6 +95,7 @@
10495
import com.oracle.svm.core.FunctionPointerHolder;
10596
import com.oracle.svm.core.StaticFieldsSupport;
10697
import com.oracle.svm.core.SubstrateOptions;
98+
import com.oracle.svm.core.annotate.Delete;
10799
import com.oracle.svm.core.classinitialization.ClassInitializationInfo;
108100
import com.oracle.svm.core.graal.code.CGlobalDataBasePointer;
109101
import com.oracle.svm.core.hub.DynamicHub;
@@ -158,6 +150,15 @@
158150
import com.oracle.svm.hosted.reflect.proxy.ProxySubstitutionType;
159151
import com.oracle.svm.hosted.substitute.PolymorphicSignatureWrapperMethod;
160152
import com.oracle.svm.hosted.substitute.SubstitutionMethod;
153+
import com.oracle.svm.shaded.org.capnproto.ListBuilder;
154+
import com.oracle.svm.shaded.org.capnproto.MessageBuilder;
155+
import com.oracle.svm.shaded.org.capnproto.PrimitiveList;
156+
import com.oracle.svm.shaded.org.capnproto.Serialize;
157+
import com.oracle.svm.shaded.org.capnproto.StructBuilder;
158+
import com.oracle.svm.shaded.org.capnproto.StructList;
159+
import com.oracle.svm.shaded.org.capnproto.Text;
160+
import com.oracle.svm.shaded.org.capnproto.TextList;
161+
import com.oracle.svm.shaded.org.capnproto.Void;
161162
import com.oracle.svm.util.FileDumpingUtil;
162163
import com.oracle.svm.util.LogUtils;
163164
import com.oracle.svm.util.ModuleSupport;
@@ -867,7 +868,8 @@ private boolean shouldRelinkConstant(ImageHeapConstant heapConstant) {
867868
}
868869

869870
private static boolean shouldRelinkField(AnalysisField field) {
870-
return ClassInitializationSupport.singleton().maybeInitializeAtBuildTime(field.getDeclaringClass()) &&
871+
return !AnnotationAccess.isAnnotationPresent(field, Delete.class) &&
872+
ClassInitializationSupport.singleton().maybeInitializeAtBuildTime(field.getDeclaringClass()) &&
871873
field.isStatic() && field.isFinal() && field.isTrackedAcrossLayers() && field.installableInLayer();
872874
}
873875

0 commit comments

Comments
 (0)