From fbd449e4807e9cad8cb3f283b7b9b52051dd35f7 Mon Sep 17 00:00:00 2001 From: Koutheir Attouchi Date: Sun, 1 Aug 2021 22:14:37 -0400 Subject: [PATCH 1/2] More JDK classes require runtime initialization. - `sun.net.PortConfig`: Calls `PortConfig.getLower0()` and `PortConfig.getUpper0()`. - `sun.nio.ch.DevPollArrayWrapper`: Calls `IOUtil.fdLimit()`. - `sun.nio.ch.EPoll`: Calls `EPoll.eventSize()`, `EPoll.eventsOffset()` and `EPoll.dataOffset()`. - `sun.nio.ch.EPollSelectorImpl`: Calls `IOUtil.fdLimit()`. - `sun.nio.ch.EventPortSelectorImpl`: Calls `IOUtil.fdLimit()`. - `sun.nio.fs.LinuxWatchService.Poller`: `LinuxWatchService.eventSize()` and `LinuxWatchService.eventOffsets()`. --- .../oracle/svm/hosted/jdk/JDKInitializationFeature.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/JDKInitializationFeature.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/JDKInitializationFeature.java index aeb51208b448..28e5e9cdf272 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/JDKInitializationFeature.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/JDKInitializationFeature.java @@ -77,6 +77,14 @@ public void afterRegistration(AfterRegistrationAccess access) { rci.rerunInitialization("sun.nio.ch.PipeImpl", "Contains SecureRandom reference, therefore can't be included in the image heap"); } + rci.initializeAtRunTime("sun.net.PortConfig", "Calls PortConfig.getLower0() and PortConfig.getUpper0()"); + + rci.initializeAtRunTime("sun.nio.ch.DevPollArrayWrapper", "Calls IOUtil.fdLimit()"); + rci.initializeAtRunTime("sun.nio.ch.EPoll", "Calls EPoll.eventSize(), EPoll.eventsOffset() and EPoll.dataOffset()"); + rci.initializeAtRunTime("sun.nio.ch.EPollSelectorImpl", "Calls IOUtil.fdLimit()"); + rci.initializeAtRunTime("sun.nio.ch.EventPortSelectorImpl", "Calls IOUtil.fdLimit()"); + rci.initializeAtRunTime("sun.nio.fs.LinuxWatchService$Poller", "LinuxWatchService.eventSize() and LinuxWatchService.eventOffsets()"); + rci.initializeAtBuildTime("sun.reflect", "Core JDK classes are initialized at build time"); rci.initializeAtBuildTime("sun.security.mscapi", "Core JDK classes are initialized at build time"); rci.initializeAtBuildTime("sun.text", "Core JDK classes are initialized at build time"); From 349c16407dc7f3bd34dc71bfe7813d04b5453bd6 Mon Sep 17 00:00:00 2001 From: Vojin Jovanovic Date: Mon, 23 Aug 2021 12:11:43 +0200 Subject: [PATCH 2/2] Rerun sun.nio classes at runtime --- .../svm/hosted/jdk/JDKInitializationFeature.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/JDKInitializationFeature.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/JDKInitializationFeature.java index 28e5e9cdf272..5cdb9bfc0486 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/JDKInitializationFeature.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/JDKInitializationFeature.java @@ -77,13 +77,13 @@ public void afterRegistration(AfterRegistrationAccess access) { rci.rerunInitialization("sun.nio.ch.PipeImpl", "Contains SecureRandom reference, therefore can't be included in the image heap"); } - rci.initializeAtRunTime("sun.net.PortConfig", "Calls PortConfig.getLower0() and PortConfig.getUpper0()"); + rci.rerunInitialization("sun.net.PortConfig", "Calls PortConfig.getLower0() and PortConfig.getUpper0()"); - rci.initializeAtRunTime("sun.nio.ch.DevPollArrayWrapper", "Calls IOUtil.fdLimit()"); - rci.initializeAtRunTime("sun.nio.ch.EPoll", "Calls EPoll.eventSize(), EPoll.eventsOffset() and EPoll.dataOffset()"); - rci.initializeAtRunTime("sun.nio.ch.EPollSelectorImpl", "Calls IOUtil.fdLimit()"); - rci.initializeAtRunTime("sun.nio.ch.EventPortSelectorImpl", "Calls IOUtil.fdLimit()"); - rci.initializeAtRunTime("sun.nio.fs.LinuxWatchService$Poller", "LinuxWatchService.eventSize() and LinuxWatchService.eventOffsets()"); + rci.rerunInitialization("sun.nio.ch.DevPollArrayWrapper", "Calls IOUtil.fdLimit()"); + rci.rerunInitialization("sun.nio.ch.EPoll", "Calls EPoll.eventSize(), EPoll.eventsOffset() and EPoll.dataOffset()"); + rci.rerunInitialization("sun.nio.ch.EPollSelectorImpl", "Calls IOUtil.fdLimit()"); + rci.rerunInitialization("sun.nio.ch.EventPortSelectorImpl", "Calls IOUtil.fdLimit()"); + rci.rerunInitialization("sun.nio.fs.LinuxWatchService$Poller", "LinuxWatchService.eventSize() and LinuxWatchService.eventOffsets()"); rci.initializeAtBuildTime("sun.reflect", "Core JDK classes are initialized at build time"); rci.initializeAtBuildTime("sun.security.mscapi", "Core JDK classes are initialized at build time");