On Mon, 17 Aug 2026 20:31:04 GMT, Boris Ulasevich <[email protected]> wrote:
> These fixes address a series of failures reproducible when building arm32 > natively on an arm32 platform (not cross-compilation), in both release and > fastdebug modes. > > 1. jniFastGetField_arm.cpp: use offset_shift > > After JEP 401 was integrated, jfieldIDWorkaround's offset_shift changed from > 2 to 3. ARM32 is the only port where the shift was hardcoded as the literal 2 > in JNI_FastGetField::generate_fast_get_int_field0. Other architectures take > this value from the jfieldIDWorkaround::offset_shift constant and picked up > the change automatically. This caused java.io.FileDescriptor's int fd field > to be read incorrectly in the native fdval() function (IOUtil.c, libnio.so), > which made the JVM hang during module loading at the COMPILE_CREATE_SYMBOLS > step of the JDK build (fd was incorrectly decoded as 0 -- a blocking read > from stdin). Fix: use the jfieldIDWorkaround::offset_shift constant instead > of the hardcoded literal. > > 2. oops/symbol.hpp: class alignas(8) Symbol > > JEP 401 widened VerificationType::TypeMask from 0x3 to 0x7, reserving a third > bit for inline types. As a result is_reference() now requires a Symbol* to be > 8-byte aligned. On 32-bit a Symbol sits at offset 4 inside a SymbolTable > node, so is_reference() is always false and verification of any class fails > with VerifyError. This only happens in release builds: in debug builds the > node carries an extra DEBUG_ONLY field, which pushes the Symbol to offset 8. > Fix: alignas(8) makes Symbol 8-byte aligned. On 64-bit the layout is > unchanged. > > 3. make/autoconf/jdk-options.m4: disable cds-archive-preview for 32-bit > systems > > The build unconditionally generates a preview CDS archive, but value objects > are not supported on 32-bit: InlineKlass::InlineKlass hits assert "Should not > be called in 32 bit mode" (markWord.hpp), and the jdk-image step fails while > dumping classes_preview.jsa. Fix: make the cds-archive-preview option > unavailable on non-64-bit platforms. > > 4. cds/archiveUtils.cpp: additional check for minimal gap size > > This fixes a fastdebug build failure at the generate-link-opt-data step: > assert(is_aligned(gap_bytes(), SharedSpaceObjectAlignment)) failed. It is > related to ee90f00b3b3 (8376822, UseCompactObjectHeaders: fill Klass > alignment gaps), not to JEP 401. That change started inserting an alignment > gap in front of a buffered Klass and recording it for later reuse. On arm32 > the gap is always 4 bytes -- nothing can ever fit into it, and AllocGap fails > its precondition. Fix: only record a gap that is at least Sh... This also resolve a general issue with 32 bit Zero builds: https://bugs.openjdk.org/browse/JDK-8390446 ------------- PR Comment: https://git.openjdk.org/jdk/pull/32402#issuecomment-5320101329
