From c641cc365c8fc22c38c6c8c275ee214ab8ca4694 Mon Sep 17 00:00:00 2001 From: Jerome Haltom Date: Sat, 22 Aug 2026 08:11:46 -0500 Subject: [PATCH 1/3] Update to jdk8u504-b01. Moves OpenJdkUpdateVersion from 482 to 504, OpenJdkBuildNumber from b08 to b01, and the ext/openjdk submodule to 5c75a45a, the tip of ikvm-jdk8u504-b01. Upstream has moved on twice since 8u482, so this skips past 8u492 to the current GA. Ancestry is linear (482, 492, 502, 504), so merging the newest tag subsumes the older ones. 8u504 is an out-of-band release: six commits on top of the 8u502 July CPU. The fork branch was cut from the jdk8u504-b01 tag and ikvm-jdk8u482-b08 merged into it. The merge was clean. All fifteen carried source forks came across byte-identical, and upstream touched none of those paths in this range, so there was nothing to reconcile. Nothing else in the tree needs to change. The delta is CPU security backports, bundled library refreshes and test work, with no new API. Of the sixty-three changed Java files under jdk/src, only two collide with an OpenJdkSource Remove rule: ZipFile.java, which we replace wholesale, and Metacity.java, in the GTK look and feel package we drop entirely. None has a counterpart under IKVM.Runtime Java/Externs. The one signature change worth naming is ZipFile.getEntry, which drops its addSlash parameter in JDK-8370995. That is the kind of change that turns a native into a stub that throws at runtime, but our ZipFile is a pure Java implementation with no natives, and its getEntry already does the unconditional trailing slash fallback that 8u504 restores. It is also the only native declaration change in the range. The new ChunghwaTLSPolicy class, the two new WISeKey roots, tzdata 2026b and the java.security changes for CHUNGHWA_TLS and com.sun.security.crl.maxSize all arrive through existing globs. zlib 1.3.2, libpng 1.6.57, giflib 6.1.2 and LCMS 2.19.1 add and remove no files, and libzip globs its sources. Eighteen jtreg tests were added and one removed, IllegalRecordVersion.java, superseded by HandshakeWithInvalidRecordVersion.java. None of the nineteen appears in ExcludeList.txt, so there is no stale entry to drop, and any new exclusions should wait for CI rather than be guessed at here. One thing this deliberately leaves alone: ext/freetype is pinned at VER-2-13-2, which matched 8u482. 8u502 took the JDK to FreeType 2.14.2 and 8u504 to 2.14.3. We build FreeType from the submodule rather than the JDK copy, so nothing breaks, but the gap opens here. 2.14 changed enough that upstream needed -Dinline=__inline for 32 bit MSVC, so bumping it is its own change with its own risk. Verified by building IKVM.Java narrowed to win-x64: javac compiles the merged source set and ikvmc imports it for net472, net6.0 and net8.0 with no errors and no importer diagnostics. --- Directory.Build.props | 4 ++-- ext/openjdk | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 044c0d5571..013305d551 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -24,8 +24,8 @@ 1 8 0 - 482 - b08 + 504 + b01 OpenJDK $(OpenJdkMinorVersion)u$(OpenJdkUpdateVersion) $(OpenJdkBuildNumber) $(OpenJdkMajorVersion).$(OpenJdkMinorVersion).$(OpenJdkMicroVersion)_$(OpenJdkUpdateVersion)-$(OpenJdkBuildNumber) Oracle diff --git a/ext/openjdk b/ext/openjdk index 69137c6403..5c75a45a66 160000 --- a/ext/openjdk +++ b/ext/openjdk @@ -1 +1 @@ -Subproject commit 69137c64034c4d1c93e8d5c9fd1b46e3d8016d87 +Subproject commit 5c75a45a66cc5be500bda366c6f0812e9cd17aed From 0d772985f6318b7222683f52876e5582cbfef21e Mon Sep 17 00:00:00 2001 From: Jerome Haltom Date: Sat, 22 Aug 2026 08:52:57 -0500 Subject: [PATCH 2/3] Update ext/freetype to 2.14.3. 8u482 bundled FreeType 2.13.x, which is what VER-2-13-2 matched. 8u502 took the JDK to 2.14.2 and 8u504 to 2.14.3, so moving to jdk8u504-b01 opened a gap between the FreeType we build and the one the JDK expects. This closes it. The version macros in the submodule now read 2.14.3, identical to the copy bundled under jdk/src/share/native/sun/awt/libfreetype. No project changes were needed. All forty-five paths listed in libfreetype.clangproj still exist in 2.14.3, and everything 2.14 added arrives through the amalgamated module files we already compile: autofit.c picked up ft-hb.c, ft-hb-ft.c, afadjust.c and afgsub.c, and sfnt.c picked up ttgpos.c. The removed ttsubpix.c dropped out of truetype.c's includes at the same time, so there is no stale reference either. HarfBuzz stays out. FT_CONFIG_OPTION_USE_HARFBUZZ is commented out in ftoption.h and we do not define it, so the new ft-hb.c compiles inert and no dependency is added. Only Windows and macOS are affected. libfontmanager references the submodule under win- and osx- conditions only; on Linux it takes freetype from the SDK sysroot, and IKVM.Image ships freetype.dll for exactly the Windows and macOS runtimes. Verified by compiling libfreetype for win-x64 and win-x86 and libfontmanager for win-x64 with its object directory cleared first, so freetypeScaler.c genuinely recompiled against the 2.14 headers rather than being skipped as up to date. No errors, and no diagnostic from freetypeScaler.c or from anything under ext/freetype. The sixteen warnings in the fontmanager build are longstanding clang pedantry in fontpath.c and lcdglyph.c, about deprecated Win32 calls and pointer signedness, unrelated to FreeType. The 32 bit build is the one worth calling out: 2.14 is what forced upstream to add -Dinline=__inline for 32 bit MSVC, and win-x86 compiled clean without it, since we build with clang at c17. --- ext/freetype | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/freetype b/ext/freetype index 920c5502cc..0a0221a134 160000 --- a/ext/freetype +++ b/ext/freetype @@ -1 +1 @@ -Subproject commit 920c5502cc3ddda88f6c7d85ee834ac611bb11cc +Subproject commit 0a0221a1347e2f1e07c395263540026e9a0aa7c7 From 1e4c7d654912fa7e2a3efc43ba6746625a551ed0 Mon Sep 17 00:00:00 2001 From: Jerome Haltom Date: Sat, 22 Aug 2026 17:59:51 -0500 Subject: [PATCH 3/3] Exclude three tests that 8u504 newly fails. All three come from this upgrade, all three fail identically on net472 win-x64, net8.0 win-x64 and net8.0 linux-x64, and all three failed on both CI attempts rather than intermittently, so the scope is generic-all. Partition 4, the two CAInterop cases. JDK-8372351 added two WISeKey roots, and CAInterop.java gained a test id for each. They fail the same way every other CAInterop case in that block already does, with a FileNotFoundException on jre/lib/security/cacerts, which is the layout problem the block's "needs JRE subfolder" comment describes. They were not excluded only because they did not exist when the block was written. Partition 2, BulkSoundBank. This one is not a layout quirk. It is the regression test for JDK-8350813, and the fix it covers computes a budget from Runtime.maxMemory() minus the used heap, throwing InvalidMidiDataException when the audio data will not fit. Our Runtime.maxMemory returns Long.MAX_VALUE, which is what the spec asks for from a runtime with no inherent limit, so the budget is effectively infinite, the guard never fires, and the read continues until the CLR throws OutOfMemoryError. The test also asks for -Xmx1g, which we log as an unrecognized option. Both facts are the same underlying one: we do not model a heap cap. The test cannot pass until that changes, so the exclusion carries the reasoning rather than a bare line. Not excluded here: TextAreaTextEventTest failed once on partition 14 net8.0 win-x64 in the first attempt and passed in the second. It is a robot driven AWT test, predates this upgrade and is unrelated to it, so one occurrence is left as evidence for a separate decision rather than folded into this change. --- src/IKVM.OpenJDK.Tests/jdk/test/ExcludeList.txt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/IKVM.OpenJDK.Tests/jdk/test/ExcludeList.txt b/src/IKVM.OpenJDK.Tests/jdk/test/ExcludeList.txt index fc98abe323..24f416cb1d 100644 --- a/src/IKVM.OpenJDK.Tests/jdk/test/ExcludeList.txt +++ b/src/IKVM.OpenJDK.Tests/jdk/test/ExcludeList.txt @@ -1601,6 +1601,18 @@ javax/rmi/PortableRemoteObject/ConcurrentHashMapTest.java javax/rmi/ssl/SSLSocketParametersTest.sh generic-all javax/script/ProviderTest.sh generic-all javax/security/auth/Subject/doAs/Test.sh generic-all +# BulkSoundBank.java is the regression test for JDK-8350813, which guards +# against OutOfMemoryError when rendering a bulky soundbank. The upstream fix +# in AudioFileSoundbankReader.getSoundbank computes a budget from +# Runtime.maxMemory() minus the used heap and throws InvalidMidiDataException +# when the audio data will not fit. IKVM has no fixed heap, so maxMemory() +# returns Long.MAX_VALUE as the spec requires, the budget is effectively +# infinite, the guard never fires, and the read runs until the CLR throws. +# The test also runs with -Xmx1g, which IKVM logs as an unrecognized option. +# The test cannot pass while the fix is expressed purely in terms of a heap +# cap we do not model. Excluded on all platforms, where it fails identically. +javax/sound/midi/BulkSoundBank/BulkSoundBank.java generic-all + javax/sound/midi/Devices/InitializationHang.java generic-all javax/sound/midi/File/SMPTESequence.java macosx-all javax/sound/midi/Gervill/AudioFloatConverter/GetFormat.java macosx-all @@ -3438,6 +3450,8 @@ security/infra/java/security/cert/CertPathValidator/certification/CAInterop.java security/infra/java/security/cert/CertPathValidator/certification/CAInterop.java#twcaglobalrootca generic-all security/infra/java/security/cert/CertPathValidator/certification/CAInterop.java#usertrusteccca generic-all security/infra/java/security/cert/CertPathValidator/certification/CAInterop.java#usertrustrsaca generic-all +security/infra/java/security/cert/CertPathValidator/certification/CAInterop.java#wisekeyglobalrootgbca generic-all +security/infra/java/security/cert/CertPathValidator/certification/CAInterop.java#wisekeyglobalrootgcca generic-all security/infra/java/security/cert/CertPathValidator/certification/DTrustCA.java generic-all security/infra/java/security/cert/CertPathValidator/certification/HaricaCA.java generic-all security/infra/java/security/cert/CertPathValidator/certification/LuxTrustCA.java generic-all