> 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...

Boris Ulasevich has updated the pull request incrementally with one additional 
commit since the last revision:

  fixing profile_array_accesses assert: swith it off on the case of disabled 
TypeProfile

-------------

Changes:
  - all: https://git.openjdk.org/jdk/pull/32402/files
  - new: https://git.openjdk.org/jdk/pull/32402/files/70a9905e..bbccf75d

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=32402&range=03
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=32402&range=02-03

  Stats: 5 lines in 2 files changed: 4 ins; 0 del; 1 mod
  Patch: https://git.openjdk.org/jdk/pull/32402.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/32402/head:pull/32402

PR: https://git.openjdk.org/jdk/pull/32402

Reply via email to