Skip to content

Commit 3e9e180

Browse files
committed
[GR-64002] Internal ignore lists for -H:Preserve.
PullRequest: graal/20480
2 parents 4f2ed9b + 27be6b9 commit 3e9e180

File tree

2 files changed

+11
-6
lines changed

2 files changed

+11
-6
lines changed

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/SubstrateOptions.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1338,12 +1338,9 @@ public enum ReportingMode {
13381338
@Option(help = "file:doc-files/PreserveHelp.txt")//
13391339
public static final HostedOptionKey<AccumulatingLocatableMultiOptionValue.Strings> Preserve = new HostedOptionKey<>(AccumulatingLocatableMultiOptionValue.Strings.build());
13401340

1341-
@Option(help = "file:doc-files/PreserveHelp.txt")//
1341+
@Option(help = "Ignore classes or packages (comma separated) from the ones included with '-H:Preserve'. This can be used to workaround potential issues related to '-H:Preserve'.", type = OptionType.Debug) //
13421342
public static final HostedOptionKey<AccumulatingLocatableMultiOptionValue.Strings> IgnorePreserveForClasses = new HostedOptionKey<>(AccumulatingLocatableMultiOptionValue.Strings.build());
13431343

1344-
@Option(help = "file:doc-files/PreserveHelp.txt")//
1345-
public static final HostedOptionKey<AccumulatingLocatableMultiOptionValue.Strings> IgnorePreserveForClassesPaths = new HostedOptionKey<>(AccumulatingLocatableMultiOptionValue.Strings.build());
1346-
13471344
@Option(help = "Force include include all public types and methods that can be reached using normal Java access rules.")//
13481345
public static final HostedOptionKey<Boolean> UseBaseLayerInclusionPolicy = new HostedOptionKey<>(false);
13491346

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

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import java.util.Collection;
4444
import java.util.Collections;
4545
import java.util.EnumSet;
46+
import java.util.HashSet;
4647
import java.util.List;
4748
import java.util.ListIterator;
4849
import java.util.Locale;
@@ -1107,10 +1108,10 @@ protected void setupNativeImage(String imageName, OptionValues options, Map<Meth
11071108

11081109
var runtimeReflection = ImageSingletons.lookup(RuntimeReflectionSupport.class);
11091110

1110-
var classesToIgnore = OptionClassFilterBuilder.createFilter(loader, SubstrateOptions.IgnorePreserveForClasses, SubstrateOptions.IgnorePreserveForClassesPaths);
1111+
Set<String> classesOrPackagesToIgnore = ignoredClassesOrPackagesForPreserve();
11111112
loader.classLoaderSupport.getClassesToPreserve().parallel()
11121113
.filter(ClassInclusionPolicy::isClassIncludedBase)
1113-
.filter(c -> classesToIgnore.isIncluded(c) == null)
1114+
.filter(c -> !(classesOrPackagesToIgnore.contains(c.getPackageName()) || classesOrPackagesToIgnore.contains(c.getName())))
11141115
.forEach(c -> runtimeReflection.registerClassFully(ConfigurationCondition.alwaysTrue(), c));
11151116
for (String className : loader.classLoaderSupport.getClassNamesToPreserve()) {
11161117
RuntimeReflection.registerClassLookup(className);
@@ -1123,6 +1124,13 @@ protected void setupNativeImage(String imageName, OptionValues options, Map<Meth
11231124
}
11241125
}
11251126

1127+
private static Set<String> ignoredClassesOrPackagesForPreserve() {
1128+
Set<String> ignoredClassesOrPackages = new HashSet<>(SubstrateOptions.IgnorePreserveForClasses.getValue().valuesAsSet());
1129+
// GR-63360: Parsing of constant_ lambda forms fails
1130+
ignoredClassesOrPackages.add("java.lang.invoke.LambdaForm$Holder");
1131+
return Collections.unmodifiableSet(ignoredClassesOrPackages);
1132+
}
1133+
11261134
protected void registerEntryPointStubs(Map<Method, CEntryPointData> entryPoints) {
11271135
entryPoints.forEach((method, entryPointData) -> CEntryPointCallStubSupport.singleton().registerStubForMethod(method, () -> entryPointData));
11281136
}

0 commit comments

Comments
 (0)