Skip to content

Update to jdk8u504-b01 and FreeType 2.14.3 - #743

Merged
wasabii merged 3 commits into
mainfrom
jdk8u504-b01
Aug 23, 2026
Merged

Update to jdk8u504-b01 and FreeType 2.14.3#743
wasabii merged 3 commits into
mainfrom
jdk8u504-b01

Conversation

@wasabii

@wasabii wasabii commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

Moves the JDK from 8u482-b08 to 8u504-b01 and ext/freetype from 2.13.2 to 2.14.3.

This replaces #722, which bumped OpenJdkUpdateVersion to 492 and left the submodule where it was. Upstream has since released twice more, so this goes to the current GA rather than to 492. 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.

Changes

  • Directory.Build.props: OpenJdkUpdateVersion 482 to 504, OpenJdkBuildNumber b08 to b01, matching JDK_UPDATE_VERSION=504 in the tag's common/autoconf/version-numbers
  • ext/openjdk: to 5c75a45a, the tip of the new ikvm-jdk8u504-b01 branch on ikvmnet/jdk8u
  • ext/freetype: to 0a0221a1, tag VER-2-14-3

The fork branch

ikvm-jdk8u504-b01 was cut from the jdk8u504-b01 tag with ikvm-jdk8u482-b08 merged into it, the same shape as the 472 merge. 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.

Why nothing else changed

The delta is 115 commits of CPU security backports, bundled library refreshes and test work, with no new API.

Of the sixty-three changed Java files under jdk/src, two collide with an OpenJdkSource Remove rule, and neither needs anything:

  • ZipFile.java is removed unconditionally and replaced by our own pure Java implementation.
  • Metacity.java sits in the GTK look and feel package, which is removed only when IkvmJavaRuntimeIdentifier is win or ref. The linux and osx builds compile it, along with the GTK icons, the metacity fallback theme and the GTK resource bundles. So this change does reach those two runtimes. It is JDK-8382471, wrapping the gconf reader in try-with-resources to fix a stream leak, with no API or behaviour change to accommodate.

None of the sixty-three 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.

ChunghwaTLSPolicy, the two new WISeKey roots, tzdata 2026b, and the java.security additions 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.

FreeType

8u482 bundled 2.13.x, which VER-2-13-2 matched. 8u502 took the JDK to 2.14.2 and 8u504 to 2.14.3, so this bump closes a gap the JDK move would otherwise open. No project changes were needed: all forty-five paths in libfreetype.clangproj still exist, and everything 2.14 added arrives through the amalgams we already compile, autofit.c picking up ft-hb.c, ft-hb-ft.c, afadjust.c and afgsub.c, and sfnt.c picking up ttgpos.c. HarfBuzz stays out, since FT_CONFIG_OPTION_USE_HARFBUZZ is not defined. Only Windows and macOS are affected; on Linux libfontmanager takes freetype from the SDK sysroot.

Verification

Local, Windows only, compile and link. Nothing was executed.

  • 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
  • libfreetype for win-x64 and win-x86: no errors. The 32 bit build is the one worth calling out, since 2.14 is what forced upstream to add -Dinline=__inline for 32 bit MSVC, and win-x86 compiled clean without it, as we build with clang at c17
  • libfontmanager for win-x64 with its object directory cleared first, so freetypeScaler.c genuinely recompiled against the 2.14 headers: no errors, and no diagnostic from freetypeScaler.c or from anything under ext/freetype

macOS is the other consumer of ext/freetype and was not built locally. The linux and osx variants of IKVM.Java, which are the ones that compile the GTK sources, were not built locally either. jtreg triage is left to CI.

Tests

Eighteen jtreg tests were added upstream 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 no exclusions are added here. Any that turn out to be flaky should be added once CI has evidence, with the scope kept as narrow as that evidence supports.

Note that VerifyCACerts.java is not excluded and does run. It hard codes a count, a SHA-256 of the whole generated store, and per-alias fingerprints; upstream moved the count from 109 to 111 and updated the checksum in this range. We generate cacerts from the same jdk/make/data/cacerts data the test tracks, so those stay consistent.

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.
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.
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant