Skip to content

Commit 4ec94c1

Browse files
committed
Update points-to analyzer.
1 parent e319441 commit 4ec94c1

File tree

3 files changed

+25
-11
lines changed

3 files changed

+25
-11
lines changed

substratevm/src/com.oracle.graal.pointsto.standalone/src/com/oracle/graal/pointsto/standalone/PointsToAnalyzer.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@
2626

2727
package com.oracle.graal.pointsto.standalone;
2828

29-
import static jdk.graal.compiler.replacements.StandardGraphBuilderPlugins.registerInvocationPlugins;
30-
3129
import java.io.File;
3230
import java.lang.reflect.Method;
3331
import java.net.MalformedURLException;
@@ -56,6 +54,7 @@
5654
import com.oracle.graal.pointsto.meta.HostedProviders;
5755
import com.oracle.graal.pointsto.meta.PointsToAnalysisFactory;
5856
import com.oracle.graal.pointsto.phases.NoClassInitializationPlugin;
57+
import com.oracle.graal.pointsto.plugins.PointstoGraphBuilderPlugins;
5958
import com.oracle.graal.pointsto.reports.AnalysisReporter;
6059
import com.oracle.graal.pointsto.standalone.features.StandaloneAnalysisFeatureImpl;
6160
import com.oracle.graal.pointsto.standalone.features.StandaloneAnalysisFeatureManager;
@@ -97,7 +96,6 @@ public final class PointsToAnalyzer {
9796
ModuleSupport.accessPackagesToClass(ModuleSupport.Access.OPEN, null, false, "java.base", "sun.text.spi");
9897
ModuleSupport.accessPackagesToClass(ModuleSupport.Access.OPEN, null, false, "java.base", "sun.reflect.annotation");
9998
ModuleSupport.accessPackagesToClass(ModuleSupport.Access.OPEN, null, false, "java.base", "sun.security.jca");
100-
ModuleSupport.accessPackagesToClass(ModuleSupport.Access.OPEN, null, false, "jdk.jdeps", "com.sun.tools.classfile");
10199
}
102100

103101
private final OptionValues options;
@@ -212,7 +210,9 @@ private PointsToAnalyzer(String mainEntryClass, OptionValues options) {
212210
NoClassInitializationPlugin classInitializationPlugin = new NoClassInitializationPlugin();
213211
plugins.setClassInitializationPlugin(classInitializationPlugin);
214212
aProviders.setGraphBuilderPlugins(plugins);
215-
registerInvocationPlugins(originalProviders.getSnippetReflection(), plugins.getInvocationPlugins(), false, true, false);
213+
PointstoGraphBuilderPlugins.registerArrayPlugins(plugins.getInvocationPlugins());
214+
PointstoGraphBuilderPlugins.registerSystemPlugins(plugins.getInvocationPlugins());
215+
PointstoGraphBuilderPlugins.registerObjectPlugins(plugins.getInvocationPlugins());
216216
}
217217
}
218218

@@ -286,6 +286,7 @@ public int run() {
286286
try (Timer t = new Timer("analysis", analysisName)) {
287287
StandaloneAnalysisFeatureImpl.DuringAnalysisAccessImpl config = new StandaloneAnalysisFeatureImpl.DuringAnalysisAccessImpl(standaloneAnalysisFeatureManager, analysisClassLoader, bigbang,
288288
debugContext);
289+
bigbang.getUniverse().setConcurrentAnalysisAccess(config);
289290
bigbang.runAnalysis(debugContext, (analysisUniverse) -> {
290291
bigbang.getHostVM().notifyClassReachabilityListener(analysisUniverse, config);
291292
standaloneAnalysisFeatureManager.forEachFeature(feature -> feature.duringAnalysis(config));

substratevm/src/com.oracle.graal.pointsto.standalone/src/com/oracle/graal/pointsto/standalone/StandaloneObjectScanner.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,13 @@ protected void scanEmbeddedRoot(JavaConstant root, Object position) {
5858
@Override
5959
protected final void scanField(AnalysisField field, JavaConstant receiver, ScanReason prevReason) {
6060
if (shouldScanField.test(field)) {
61-
super.scanField(field, receiver, prevReason);
61+
if (field.isStatic()) {
62+
if (field.getDeclaringClass().isInitialized()) {
63+
super.scanField(field, receiver, prevReason);
64+
}
65+
} else {
66+
super.scanField(field, receiver, prevReason);
67+
}
6268
}
6369
}
6470

substratevm/src/com.oracle.graal.pointsto.standalone/src/com/oracle/graal/pointsto/standalone/heap/StandaloneImageHeapScanner.java

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,19 +69,26 @@ protected Class<?> getClass(String className) {
6969

7070
@Override
7171
public ValueSupplier<JavaConstant> readHostedFieldValue(AnalysisField field, JavaConstant receiver) {
72+
if (field.isStatic() && !field.getDeclaringClass().isInitialized()) {
73+
return ValueSupplier.eagerValue(getConstantValue(field));
74+
}
7275
ValueSupplier<JavaConstant> ret = super.readHostedFieldValue(field, receiver);
7376
if (ret.get() == null && field.isStatic()) {
74-
ResolvedJavaField wrappedField = field.getWrapped();
75-
JavaConstant constant = wrappedField.getConstantValue();
76-
if (constant == null) {
77-
constant = JavaConstant.defaultForKind(wrappedField.getJavaKind());
78-
}
79-
return ValueSupplier.eagerValue(constant);
77+
return ValueSupplier.eagerValue(getConstantValue(field));
8078
} else {
8179
return ret;
8280
}
8381
}
8482

83+
private static JavaConstant getConstantValue(AnalysisField field) {
84+
ResolvedJavaField wrappedField = field.getWrapped();
85+
JavaConstant constant = wrappedField.getConstantValue();
86+
if (constant == null) {
87+
constant = JavaConstant.defaultForKind(wrappedField.getJavaKind());
88+
}
89+
return constant;
90+
}
91+
8592
@Override
8693
public void scanEmbeddedRoot(JavaConstant root, BytecodePosition position) {
8794
if (shouldScanConstant.test(root)) {

0 commit comments

Comments
 (0)