Skip to content

Commit 0baa135

Browse files
committed
Trace serialization accesses
1 parent c91f994 commit 0baa135

File tree

3 files changed

+18
-4
lines changed

3 files changed

+18
-4
lines changed

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,6 @@
3535
import java.util.concurrent.ConcurrentMap;
3636
import java.util.stream.Collectors;
3737

38-
import jdk.graal.compiler.java.LambdaUtils;
39-
4038
import com.oracle.svm.core.annotate.Alias;
4139
import com.oracle.svm.core.annotate.RecomputeFieldValue;
4240
import com.oracle.svm.core.annotate.RecomputeFieldValue.Kind;
@@ -45,8 +43,11 @@
4543
import com.oracle.svm.core.annotate.TargetElement;
4644
import com.oracle.svm.core.fieldvaluetransformer.NewInstanceFieldValueTransformer;
4745
import com.oracle.svm.core.hub.DynamicHub;
46+
import com.oracle.svm.core.metadata.MetadataTracer;
4847
import com.oracle.svm.core.reflect.serialize.MissingSerializationRegistrationUtils;
4948

49+
import jdk.graal.compiler.java.LambdaUtils;
50+
5051
@TargetClass(java.io.FileDescriptor.class)
5152
final class Target_java_io_FileDescriptor {
5253

@@ -68,8 +69,8 @@ static ObjectStreamClass lookup(Class<?> cl, boolean all) {
6869
return null;
6970
}
7071

71-
if (Serializable.class.isAssignableFrom(cl)) {
72-
if (!cl.isArray() && !DynamicHub.fromClass(cl).isRegisteredForSerialization()) {
72+
if (Serializable.class.isAssignableFrom(cl) && !cl.isArray()) {
73+
if (!DynamicHub.fromClass(cl).isRegisteredForSerialization()) {
7374
boolean isLambda = cl.getTypeName().contains(LambdaUtils.LAMBDA_CLASS_NAME_SUBSTRING);
7475
boolean isProxy = Proxy.isProxyClass(cl);
7576
if (isProxy || isLambda) {
@@ -87,6 +88,9 @@ static ObjectStreamClass lookup(Class<?> cl, boolean all) {
8788
MissingSerializationRegistrationUtils.missingSerializationRegistration(cl, "type " + cl.getTypeName());
8889
}
8990
}
91+
if (MetadataTracer.Options.MetadataTracingSupport.getValue() && MetadataTracer.singleton().enabled()) {
92+
MetadataTracer.singleton().traceSerializationType(cl.getName());
93+
}
9094
}
9195

9296
return Target_java_io_ObjectStreamClass_Caches.localDescs0.get(cl);

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/metadata/MetadataTracer.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import org.graalvm.nativeimage.ImageSingletons;
3434
import org.graalvm.nativeimage.hosted.Feature;
3535

36+
import com.oracle.svm.configure.NamedConfigurationTypeDescriptor;
3637
import com.oracle.svm.configure.UnresolvedConfigurationCondition;
3738
import com.oracle.svm.configure.config.ConfigurationSet;
3839
import com.oracle.svm.core.feature.AutomaticallyRegisteredFeature;
@@ -88,6 +89,11 @@ public void traceResourceBundle(String baseName) {
8889
config.getResourceConfiguration().addBundle(UnresolvedConfigurationCondition.alwaysTrue(), baseName, List.of());
8990
}
9091

92+
public void traceSerializationType(String className) {
93+
assert enabled();
94+
config.getReflectionConfiguration().getOrCreateType(UnresolvedConfigurationCondition.alwaysTrue(), new NamedConfigurationTypeDescriptor(className)).setSerializable();
95+
}
96+
9197
private static void initialize() {
9298
assert Options.MetadataTracingSupport.getValue();
9399
MetadataTracer singleton = MetadataTracer.singleton();

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/reflect/serialize/SerializationSupport.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import com.oracle.svm.core.layeredimagesingleton.LayeredImageSingletonSupport;
4949
import com.oracle.svm.core.layeredimagesingleton.MultiLayeredImageSingleton;
5050
import com.oracle.svm.core.layeredimagesingleton.UnsavedSingleton;
51+
import com.oracle.svm.core.metadata.MetadataTracer;
5152
import com.oracle.svm.core.reflect.SubstrateConstructorAccessor;
5253
import com.oracle.svm.core.util.ImageHeapMap;
5354
import com.oracle.svm.core.util.VMError;
@@ -269,6 +270,9 @@ public static Object getSerializationConstructorAccessor(Class<?> serializationT
269270
for (var singleton : layeredSingletons()) {
270271
Object constructorAccessor = singleton.getSerializationConstructorAccessor0(declaringClass, targetConstructorClass);
271272
if (constructorAccessor != null) {
273+
if (MetadataTracer.Options.MetadataTracingSupport.getValue() && MetadataTracer.singleton().enabled()) {
274+
MetadataTracer.singleton().traceSerializationType(declaringClass.getName());
275+
}
272276
return constructorAccessor;
273277
}
274278
}

0 commit comments

Comments
 (0)