Skip to content

Commit

Permalink
[GR-28827] All built-in packages must be registered before informatio…
Browse files Browse the repository at this point in the history
…n is used the first time.

PullRequest: graal/8911
  • Loading branch information
Christian Wimmer committed May 12, 2021
2 parents b1b6ac0 + 1c3f19b commit 09612a1
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@
import org.graalvm.nativeimage.impl.InternalPlatform;
import org.graalvm.word.PointerBase;

import com.oracle.svm.core.util.VMError;

public abstract class PlatformNativeLibrarySupport {

public static final String[] defaultBuiltInLibraries = {
Expand Down Expand Up @@ -105,12 +107,18 @@ public boolean isBuiltinLibrary(@SuppressWarnings("unused") String name) {
}

private List<String> builtInPkgNatives;
private boolean builtInPkgNativesSealed;

public void addBuiltinPkgNativePrefix(String name) {
if (builtInPkgNativesSealed) {
throw VMError.shouldNotReachHere("Cannot register any more packages as built-ins because information has already been used.");
}
builtInPkgNatives.add(name);
}

public boolean isBuiltinPkgNative(String name) {
builtInPkgNativesSealed = true;

String commonPrefix = "Java_";
if (name.startsWith(commonPrefix)) {
String strippedName = name.substring(commonPrefix.length());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -252,10 +252,14 @@ public void beforeAnalysis(BeforeAnalysisAccess access) {
access.registerReachabilityHandler(SecurityServicesFeature::linkSunEC,
method(access, "sun.security.ec.ECDSASignature", "signDigest", byte[].class, byte[].class, byte[].class, byte[].class, int.class),
method(access, "sun.security.ec.ECDSASignature", "verifySignedDigest", byte[].class, byte[].class, byte[].class, byte[].class));
/* Ensure native calls to sun_security_ec* will be resolved as builtIn. */
PlatformNativeLibrarySupport.singleton().addBuiltinPkgNativePrefix("sun_security_ec");
}

if (isPosix()) {
access.registerReachabilityHandler(SecurityServicesFeature::linkJaas, method(access, "com.sun.security.auth.module.UnixSystem", "getUnixInfo"));
/* Resolve calls to com_sun_security_auth_module_UnixSystem* as builtIn. */
PlatformNativeLibrarySupport.singleton().addBuiltinPkgNativePrefix("com_sun_security_auth_module_UnixSystem");
}
}

Expand All @@ -264,8 +268,6 @@ private static void linkSunEC(DuringAnalysisAccess a) {
/* We statically link sunec thus we classify it as builtIn library */
PlatformNativeLibrarySupport.singleton();
NativeLibrarySupport.singleton().preregisterUninitializedBuiltinLibrary("sunec");
/* and ensure native calls to sun_security_ec* will be resolved as builtIn. */
PlatformNativeLibrarySupport.singleton().addBuiltinPkgNativePrefix("sun_security_ec");

nativeLibraries.addStaticJniLibrary("sunec");
if (isPosix()) {
Expand All @@ -280,8 +282,6 @@ private static void linkJaas(DuringAnalysisAccess a) {
NativeLibraries nativeLibraries = ((DuringAnalysisAccessImpl) a).getNativeLibraries();
/* We can statically link jaas, thus we classify it as builtIn library */
NativeLibrarySupport.singleton().preregisterUninitializedBuiltinLibrary(JavaVersionUtil.JAVA_SPEC >= 11 ? "jaas" : "jaas_unix");
/* Resolve calls to com_sun_security_auth_module_UnixSystem* as builtIn. */
PlatformNativeLibrarySupport.singleton().addBuiltinPkgNativePrefix("com_sun_security_auth_module_UnixSystem");
nativeLibraries.addStaticJniLibrary("jaas");
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,13 @@ public void beforeAnalysis(BeforeAnalysisAccess access) {
clazz(access, "sun.awt.X11GraphicsEnvironment"),
clazz(access, "sun.font.FontManagerNativeLibrary"),
clazz(access, "sun.java2d.Disposer"));
PlatformNativeLibrarySupport.singleton().addBuiltinPkgNativePrefix("java_awt");
PlatformNativeLibrarySupport.singleton().addBuiltinPkgNativePrefix("sun_awt");
PlatformNativeLibrarySupport.singleton().addBuiltinPkgNativePrefix("sun_java2d");

access.registerReachabilityHandler(JNIRegistrationAwt::registerFreeType,
clazz(access, "sun.font.FontManagerNativeLibrary"));
PlatformNativeLibrarySupport.singleton().addBuiltinPkgNativePrefix("sun_font");

access.registerReachabilityHandler(JNIRegistrationAwt::registerLCMS,
clazz(access, "sun.java2d.cmm.lcms.LCMS"));
Expand All @@ -73,6 +77,7 @@ public void beforeAnalysis(BeforeAnalysisAccess access) {
clazz(access, "sun.awt.image.JPEGImageDecoder"),
clazz(access, "com.sun.imageio.plugins.jpeg.JPEGImageReader"),
clazz(access, "com.sun.imageio.plugins.jpeg.JPEGImageWriter"));
PlatformNativeLibrarySupport.singleton().addBuiltinPkgNativePrefix("com_sun_imageio_plugins_jpeg");

access.registerReachabilityHandler(JNIRegistrationAwt::registerColorProfiles,
clazz(access, "java.awt.color.ICC_Profile"));
Expand Down Expand Up @@ -114,10 +119,6 @@ private static void handlePreferencesClassReachable(DuringAnalysisAccess access)
nativeLibraries.addDynamicNonJniLibrary("Xi");
}

PlatformNativeLibrarySupport.singleton().addBuiltinPkgNativePrefix("java_awt");
PlatformNativeLibrarySupport.singleton().addBuiltinPkgNativePrefix("sun_awt");
PlatformNativeLibrarySupport.singleton().addBuiltinPkgNativePrefix("sun_java2d");

nativeLibraries.addDynamicNonJniLibrary("stdc++");
nativeLibraries.addDynamicNonJniLibrary("m");

Expand All @@ -126,9 +127,6 @@ private static void handlePreferencesClassReachable(DuringAnalysisAccess access)
}

private static void registerJPEG(DuringAnalysisAccess access) {

PlatformNativeLibrarySupport.singleton().addBuiltinPkgNativePrefix("com_sun_imageio_plugins_jpeg");

NativeLibraries nativeLibraries = getNativeLibraries(access);

NativeLibrarySupport.singleton().preregisterUninitializedBuiltinLibrary("javajpeg");
Expand Down Expand Up @@ -156,8 +154,6 @@ private static void registerFreeType(DuringAnalysisAccess access) {
nativeLibraries.addStaticJniLibrary("fontmanager", isHeadless() ? "awt_headless" : "awt_xawt");
nativeLibraries.addStaticJniLibrary("harfbuzz");

PlatformNativeLibrarySupport.singleton().addBuiltinPkgNativePrefix("sun_font");

nativeLibraries.addDynamicNonJniLibrary("freetype");

JNIRuntimeAccess.register(clazz(access, "sun.font.FontConfigManager$FontConfigInfo"));
Expand Down

0 comments on commit 09612a1

Please sign in to comment.