ikvm icon indicating copy to clipboard operation
ikvm copied to clipboard

OpenJDK 8u152 Upgrade

Open AliveDevil opened this issue 2 years ago • 13 comments

Noticable changes: 8u152: Newer Build Toolchain for OpenJDK (builds with gcc-7 (tested)) 8u112: JTReg-compatibility

  • [x] Change openjdk/ commit ID
  • [ ] Validate local forks for changes.
    • [x] Check java.io.FileDescriptor for changes. Numerous local changes.
    • [x] Check sun.misc.VM for changes.
    • [x] Check sun.nio.ch for changes. Large fork.
    • [x] Check sun.nio.fs for changes. Large fork.
    • [x] java.security file may have been altered, fix all the local copies (multiple per arch/image)
    • [x] Check jdk/make/GenerateClasses.gmk for changes
    • [x] Check sun.reflect for changes
  • [ ] Implement JNU_ThrowByNameWithMessageAndLastError
  • [x] Port SharedSecrets.java
  • [x] Changes in ZipFile.java
  • [x] static native extern changes: jdk/src/share/classes/java/io/FileInputStream.java
  • [x] jdk/src/windows/classes/sun/nio/ch/PipeImpl.java, LoopbackConnector changes
  • [x] java.lang.Thread had changes

Targeting 8u152-b16 (original GA-release, not b34 which is a bundled patch release).

AliveDevil avatar Jun 08 '23 07:06 AliveDevil

Changes: IOUtil calls initInetAddressIDs(env); in Java_sun_nio_ch_IOUtil_initIDs from net_util.h. jdk/src/*/native/sun/nio/ch/IOUtil.c, with new export:

+JNIEXPORT void JNICALL initInetAddressIDs(JNIEnv *env);

AliveDevil avatar Jun 08 '23 11:06 AliveDevil

jni_util.h got new export:

+/* Throw an exception by name, using a given message and the string
+ * returned by getLastErrorString to construct the detail string.
+ */
+JNIEXPORT void JNICALL
+JNU_ThrowByNameWithMessageAndLastError
+  (JNIEnv *env, const char *name, const char *message);

AliveDevil avatar Jun 08 '23 11:06 AliveDevil

jdk/src/share/classes/sun/misc/SharedSecrets.java

+    public static void setJavaOISAccess(JavaOISAccess access) {
+        javaOISAccess = access;
+    }
+
+    public static JavaOISAccess getJavaOISAccess() {
+        if (javaOISAccess == null)
+            unsafe.ensureClassInitialized(ObjectInputStream.class);
+
+        return javaOISAccess;
+    }

AliveDevil avatar Jun 08 '23 11:06 AliveDevil

Backport changes in jdk/src/share/classes/java/util/zip/ZipFile.java

AliveDevil avatar Jun 08 '23 11:06 AliveDevil

jdk/src/share/classes/java/io/FileInputStream.java

-    public native long skip(long n) throws IOException;
+    public long skip(long n) throws IOException {
+        return skip0(n);
+    }
+
+    private native long skip0(long n) throws IOException;

-    public native int available() throws IOException;
+    public int available() throws IOException {
+        return available0();
+    }
+
+    private native int available0() throws IOException;

AliveDevil avatar Jun 08 '23 11:06 AliveDevil

jdk/src/windows/classes/sun/nio/ch/PipeImpl.java

AliveDevil avatar Jun 08 '23 11:06 AliveDevil

The ZipFile-fork looks bad going forward. There are tests now that use runtime property jdk.util.zip.ensureTrailingSlash.

AliveDevil avatar Jun 08 '23 12:06 AliveDevil

Building fails with:

java.lang.InternalError: java.io.EOFException
	at java.util.Currency$1.run(Currency.java:251)
	at java.util.Currency$1.run(Currency.java:214)
	at java.security.AccessController.doPrivileged(AccessController.java:308)
	at java.security.AccessController.doPrivileged(AccessController.java:356)
	at java.util.Currency.<clinit>(Currency.java:214)
	at com.sun.tools.javac.tree.Pretty.printExpr(Pretty.java:193)
	at com.sun.tools.javac.tree.Pretty.visitAssign(Pretty.java:1018)
	at com.sun.tools.javac.tree.JCTree$JCAssign.accept(JCTree.java:1686)
	at com.sun.tools.javac.tree.Pretty.printExpr(Pretty.java:193)
	at com.sun.tools.javac.tree.Pretty.printExpr(Pretty.java:209)
	at com.sun.tools.javac.tree.Pretty.printExprs(Pretty.java:223)
	at com.sun.tools.javac.tree.Pretty.printExprs(Pretty.java:234)
	at com.sun.tools.javac.tree.Pretty.visitAnnotation(Pretty.java:1374)
	at com.sun.tools.javac.tree.JCTree$JCAnnotation.accept(JCTree.java:2317)
	at com.sun.tools.javac.tree.Pretty.printExpr(Pretty.java:193)
	at com.sun.tools.javac.tree.Pretty.printExpr(Pretty.java:209)
	at com.sun.tools.javac.tree.JCTree.toString(JCTree.java:410)
	at java.lang.Object.toString(map.xml)
	at java.lang.StringHelper.valueOf(StringHelper.java:2598)
	at java.lang.String.valueOf(map.xml:415)
	at java.lang.StringBuilder.append(StringBuilder.java:131)
	at com.sun.tools.javac.comp.Check.validateTypeAnnotation(Check.java:2745)
	at com.sun.tools.javac.comp.Attr$TypeAnnotationsValidator.visitAnnotation(Attr.java:4485)
	at com.sun.tools.javac.tree.JCTree$JCAnnotation.accept(JCTree.java:2317)
	at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:50)
	at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:56)
	at com.sun.tools.javac.tree.TreeScanner.visitModifiers(TreeScanner.java:316)
	at com.sun.tools.javac.tree.JCTree$JCModifiers.accept(JCTree.java:2343)
	at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:50)
	at com.sun.tools.javac.comp.Attr$TypeAnnotationsValidator.visitClassDef(Attr.java:4567)
	at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:693)
	at com.sun.tools.javac.comp.Attr.validateTypeAnnotations(Attr.java:4474)
	at com.sun.tools.javac.code.TypeAnnotations$2.run(TypeAnnotations.java:142)
	at com.sun.tools.javac.comp.Annotate.flush(Annotate.java:155)
	at com.sun.tools.javac.comp.Annotate.enterDone(Annotate.java:130)
	at com.sun.tools.javac.comp.Enter.complete(Enter.java:480)
	at com.sun.tools.javac.comp.Enter.main(Enter.java:472)
	at com.sun.tools.javac.main.JavaCompiler.enterTrees(JavaCompiler.java:984)
	at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:857)
	at com.sun.tools.javac.main.Main.compile(Main.java:527)
	at com.sun.tools.javac.main.Main.compile(Main.java:381)
	at com.sun.tools.javac.main.Main.compile(Main.java:370)
	at com.sun.tools.javac.main.Main.compile(Main.java:361)
	at com.sun.tools.javac.Main.compile(Main.java:56)
	at com.sun.tools.javac.Main.main(Main.java:42)
	at java.lang.reflect.Method.invoke(Method.java:486)
	at IKVM.Runtime.Accessors.Java.Lang.Reflect.MethodAccessor.InvokeInvoke(Unknown Source)
Caused by: java.io.EOFException
	at java.io.DataInputStream.readInt(DataInputStream.java:393)
	at java.util.Currency$1.run(Currency.java:224)
	at java.util.Currency$1.run(Currency.java:214)
	at java.security.AccessController.doPrivileged(AccessController.java:308)
	at java.security.AccessController.doPrivileged(AccessController.java:356)
	at java.util.Currency.<clinit>(Currency.java:214)
	at java.util.Currency.getInstance(Currency.java:413)
	at java.text.DecimalFormatSymbols.initialize(DecimalFormatSymbols.java:638)
	at java.text.DecimalFormatSymbols.<init>(DecimalFormatSymbols.java:114)
	at sun.util.locale.provider.DecimalFormatSymbolsProviderImpl.getInstance(DecimalFormatSymbolsProviderImpl.java:85)
	at java.text.DecimalFormatSymbols.getInstance(DecimalFormatSymbols.java:180)
	at java.util.Formatter.getZero(Formatter.java:2283)
	at java.util.Formatter.<init>(Formatter.java:1892)
	at java.util.Formatter.<init>(Formatter.java:1915)
	at java.lang.StringHelper.format(StringHelper.java:2544)
	at java.lang.String.format(map.xml:882)
	at com.sun.tools.javac.util.Convert.quote(Convert.java:262)
	at com.sun.tools.javac.util.Convert.quote(Convert.java:240)
	at com.sun.tools.javac.tree.Pretty.visitLiteral(Pretty.java:1198)
	at com.sun.tools.javac.tree.JCTree$JCLiteral.accept(JCTree.java:2037)
	... 42 more

AliveDevil avatar Jun 08 '23 13:06 AliveDevil

Test results:

cp: cannot stat 'E:/ikvm/src/IKVM.OpenJDK.Tests/bin/Debug/net461/jdk/com/sun/jdi/oom/@debuggeeVMOptions': No such file or directory
    wsl.exe \\
        sh /mnt/e/ikvm/src/IKVM.OpenJDK.Tests/bin/Debug/net461/jdk/com/sun/jdi/oom/OomDebugTestSetup.sh
result: Failed. Execution failed: exit code 1
/bin/bash: -c: line 1: syntax error near unexpected token `('
/bin/bash: -c: line 1: `sh /mnt/e/ikvm/src/IKVM.OpenJDK.Tests/bin/Debug/net461/jdk/com/sun/jdi/EvalArraysAsList.sh The test checks if evaluation of the expression java.util.Arrays.asList(null, "a") works normally and does not throw an IllegalArgumentException.'

    wsl.exe \\
        sh /mnt/e/ikvm/src/IKVM.OpenJDK.Tests/bin/Debug/net461/jdk/com/sun/jdi/EvalArraysAsList.sh The test checks if evaluation of the expression java.util.Arrays.asList(null, "a") works normally and does not throw an IllegalArgumentException.
/mnt/e/ikvm/src/IKVM.OpenJDK.Tests/bin/Debug/net461/jdk/com/sun/jdi/RedefineAddPrivateMethod.sh: 77: runit: not found
/mnt/e/ikvm/src/IKVM.OpenJDK.Tests/bin/Debug/net461/jdk/com/sun/jdi/RedefineAddPrivateMethod.sh: 78: debuggeeFailIfPresent: not found
/mnt/e/ikvm/src/IKVM.OpenJDK.Tests/bin/Debug/net461/jdk/com/sun/jdi/RedefineAddPrivateMethod.sh: 79: pass: not found

    wsl.exe \\
        sh /mnt/e/ikvm/src/IKVM.OpenJDK.Tests/bin/Debug/net461/jdk/com/sun/jdi/RedefineAddPrivateMethod.sh

Unrecognized option: -Xbootclasspath/a:E:\\ikvm\\TestResults\\ikvm-jtreg-1c550341aa03a84b\\work\\net461_jdk\\classes\\2\\java\\lang\\invoke;E:\\ikvm\\src\\IKVM.OpenJDK.Tests\\bin\\Debug\\net461\\jdk\\java\\lang\\invoke;E:\\ikvm\\src\\IKVM.OpenJDK.Tests\\bin\\Debug\\net461\\jtreg\\javatest.jar;E:\\ikvm\\src\\IKVM.OpenJDK.Tests\\bin\\Debug\\net461\\jtreg\\jtreg.jar
result: Error. Error invoking program `E:\ikvm\src\IKVM.OpenJDK.Tests\bin\Debug\net461\ikvm\win7-x64\bin\java': java.io.IOException: Cannot run program "E:\ikvm\src\IKVM.OpenJDK.Tests\bin\Debug\net461\ikvm\win7-x64\bin\java" (in directory "E:\ikvm\TestResults\ikvm-jtreg-1c550341aa03a84b\work\net461_jdk\scratch\2"): Illegal characters in path.

AliveDevil avatar Jun 14 '23 07:06 AliveDevil

Looks like jps is an unsupported tool to list hotspot VMs on the system. We aren't going to do that without very good reason. Disable tests.

wasabii avatar Jun 14 '23 13:06 wasabii

WeakReference<PrivateMLet> mletRef =
        new WeakReference<PrivateMLet>(mlet);
mlet = null;

System.out.println("MXBean registered and unregistered, waiting for " +
        "garbage collector to collect class loader");

for (int i = 0; i < 10000 && mletRef.get() != null; i++) {
System.gc();
Thread.sleep(1);
}
----------System.out:(11/742)----------
MXBeanLoadingTest1::run: Start
We ensure no reference is retained on MXBean class after it is unregistered. We take time to perform some little extra check of Descriptors, MBean*Info.
MXBean registered and unregistered, waiting for garbage collector to collect class loader
(ERROR) Class loader was not GC'd
java.lang.RuntimeException: (ERROR) Class loader was not GC'd
	at MXBeanLoadingTest1.run(MXBeanLoadingTest1.java:259)
	at MXBeanLoadingTest1.main(MXBeanLoadingTest1.java:60)
	at java.lang.reflect.Method.invoke(Method.java:486)
	at com.sun.javatest.regtest.agent.MainWrapper$MainThread.run(MainWrapper.java:127)
	at java.lang.Thread.run(Thread.java:963)
 class java.lang.RuntimeException==>(ERROR) Class loader was not GC'd
----------System.err:(14/833)----------
java.lang.RuntimeException: java.lang.RuntimeException: (ERROR) Class loader was not GC'd
	at MXBeanLoadingTest1.run(MXBeanLoadingTest1.java:292)
	at MXBeanLoadingTest1.main(MXBeanLoadingTest1.java:60)
	at java.lang.reflect.Method.invoke(Method.java:486)
	at com.sun.javatest.regtest.agent.MainWrapper$MainThread.run(MainWrapper.java:127)
	at java.lang.Thread.run(Thread.java:963)
Caused by: java.lang.RuntimeException: (ERROR) Class loader was not GC'd
	at MXBeanLoadingTest1.run(MXBeanLoadingTest1.java:259)
	... 4 more

JavaTest Message: Test threw exception: java.lang.RuntimeException: java.lang.RuntimeException: (ERROR) Class loader was not GC'd
JavaTest Message: shutting down test

STATUS:Failed.`main' threw exception: java.lang.RuntimeException: java.lang.RuntimeException: (ERROR) Class loader was not GC'd

AliveDevil avatar Jun 21 '23 13:06 AliveDevil

java.lang.NullPointerException
	at IKVM.Java.Externs.java.lang.Class.forName0(Unknown Source)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:299)
	at java.awt.Toolkit$2.run(Toolkit.java:860)
	at java.awt.Toolkit$2.run(Toolkit.java:855)
	at java.security.AccessController.doPrivileged(AccessController.java:308)
	at java.security.AccessController.doPrivileged(AccessController.java:356)
	at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:854)
	at java.awt.EventQueue.invokeAndWait(EventQueue.java:1296)
	at javax.swing.SwingUtilities.invokeAndWait(SwingUtilities.java:1349)
	at AccessibleJListChildNPETest.main(AccessibleJListChildNPETest.java:63)
	at java.lang.reflect.Method.invoke(Method.java:486)
	at com.sun.javatest.regtest.agent.MainWrapper$MainThread.run(MainWrapper.java:127)
	at java.lang.Thread.run(Thread.java:963)

JavaTest Message: Test threw exception: java.lang.NullPointerException
JavaTest Message: shutting down test

AliveDevil avatar Jun 21 '23 13:06 AliveDevil

----------rerun:(23/2858)*----------
cd 'E:\\ikvm-jdk8u152\\TestResults\\ikvm-jtreg-8c0d93ed54967f7d\\work\\net461_jdk\\scratch\\1' && \\
PATH='C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;C:\\Windows\\System32\\OpenSSH\\;C:\\Program Files\\RedHat\\java-1.8.0-openjdk-1.8.0.362-1\\bin;C:\\Program Files\\RedHat\\java-1.8.0-openjdk-1.8.0.362-1\\jre\\bin;C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\MSBuild\\Current\\Bin\\;C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\Llvm\\x64\\bin;C:\\Program Files\\Git\\cmd;C:\\Program Files\\dotnet\\;C:\\Users\\user\\AppData\\Local\\Microsoft\\WindowsApps;C:\\Users\\user\\.dotnet\\tools' \\
SystemDrive=C: \\
SystemRoot='C:\\Windows' \\
TEMP='C:\\Users\\user\\AppData\\Local\\Temp' \\
TMP='C:\\Users\\user\\AppData\\Local\\Temp' \\
windir='C:\\Windows' \\
CLASSPATH='E:\\ikvm-jdk8u152\\TestResults\\ikvm-jtreg-8c0d93ed54967f7d\\work\\net461_jdk\\classes\\1\\javax\\net\\ssl\\TLSv12;E:\\ikvm-jdk8u152\\src\\IKVM.OpenJDK.Tests\\bin\\Debug\\net461\\jdk\\javax\\net\\ssl\\TLSv12;E:\\ikvm-jdk8u152\\src\\IKVM.OpenJDK.Tests\\bin\\Debug\\net461\\jtreg\\javatest.jar;E:\\ikvm-jdk8u152\\src\\IKVM.OpenJDK.Tests\\bin\\Debug\\net461\\jtreg\\jtreg.jar' \\
    'E:\\ikvm-jdk8u152\\src\\IKVM.OpenJDK.Tests\\bin\\Debug\\net461\\ikvm\\win7-x64\\bin\\java' \\
        -Dtest.class.path.prefix='E:\\ikvm-jdk8u152\\TestResults\\ikvm-jtreg-8c0d93ed54967f7d\\work\\net461_jdk\\classes\\1\\javax\\net\\ssl\\TLSv12;E:\\ikvm-jdk8u152\\src\\IKVM.OpenJDK.Tests\\bin\\Debug\\net461\\jdk\\javax\\net\\ssl\\TLSv12' \\
        -Dtest.src='E:\\ikvm-jdk8u152\\src\\IKVM.OpenJDK.Tests\\bin\\Debug\\net461\\jdk\\javax\\net\\ssl\\TLSv12' \\
        -Dtest.src.path='E:\\ikvm-jdk8u152\\src\\IKVM.OpenJDK.Tests\\bin\\Debug\\net461\\jdk\\javax\\net\\ssl\\TLSv12' \\
        -Dtest.classes='E:\\ikvm-jdk8u152\\TestResults\\ikvm-jtreg-8c0d93ed54967f7d\\work\\net461_jdk\\classes\\1\\javax\\net\\ssl\\TLSv12' \\
        -Dtest.class.path='E:\\ikvm-jdk8u152\\TestResults\\ikvm-jtreg-8c0d93ed54967f7d\\work\\net461_jdk\\classes\\1\\javax\\net\\ssl\\TLSv12' \\
        -Dtest.vm.opts= \\
        -Dtest.tool.vm.opts= \\
        -Dtest.compiler.opts= \\
        -Dtest.java.opts= \\
        -Dtest.jdk='E:\\ikvm-jdk8u152\\src\\IKVM.OpenJDK.Tests\\bin\\Debug\\net461\\ikvm\\win7-x64' \\
        -Dcompile.jdk='E:\\ikvm-jdk8u152\\src\\IKVM.OpenJDK.Tests\\bin\\Debug\\net461\\ikvm\\win7-x64' \\
        -Dtest.timeout.factor=6.0 \\
        -Dtest.root='E:\\ikvm-jdk8u152\\src\\IKVM.OpenJDK.Tests\\bin\\Debug\\net461\\jdk' \\
        com.sun.javatest.regtest.agent.MainWrapper 'E:\\ikvm-jdk8u152\\TestResults\\ikvm-jtreg-8c0d93ed54967f7d\\work\\net461_jdk\\javax\\net\\ssl\\TLSv12\\SignatureAlgorithms.d\\main.0.jta' PKIX "SHA-224,SHA-256" TLS_DHE_DSS_WITH_AES_128_CBC_SHA
result: Error. Error invoking program `E:\ikvm-jdk8u152\src\IKVM.OpenJDK.Tests\bin\Debug\net461\ikvm\win7-x64\bin\java': java.io.IOException: Cannot run program "E:\ikvm-jdk8u152\src\IKVM.OpenJDK.Tests\bin\Debug\net461\ikvm\win7-x64\bin\java" (in directory "E:\ikvm-jdk8u152\TestResults\ikvm-jtreg-8c0d93ed54967f7d\work\net461_jdk\scratch\1"): Illegal characters in path.

AliveDevil avatar Jun 26 '23 08:06 AliveDevil