RFR: 8341471: [macOS_aarch64] Reversed field layout caused by unstable sorting

Fei Gao fgao at openjdk.org
Mon Oct 7 09:00:14 UTC 2024


For class Test:

    public class Test {
        char a000;
        char a001;
        char a002;
        char a003;
        char a004;
        char a005;
        char a006;
        char a007;
        char a008;
        char a009;
        char a00a;
        char a00b;
    }


We found its field layout on macOS was:


Layout of class Test
  Instance fields:
   @0 12/- RESERVED
   @12 "a00b" C 2/2 REGULAR
   @14 "a001" C 2/2 REGULAR
   @16 "a002" C 2/2 REGULAR
   @18 "a003" C 2/2 REGULAR
   @20 "a004" C 2/2 REGULAR
   @22 "a005" C 2/2 REGULAR
   @24 "a006" C 2/2 REGULAR
   @26 "a007" C 2/2 REGULAR
   @28 "a008" C 2/2 REGULAR
   @30 "a009" C 2/2 REGULAR
   @32 "a00a" C 2/2 REGULAR
   @34 "a000" C 2/2 REGULAR


`a000` was put in the end while `a00b` was put in the beginning.

Fields get sorted according to size in [1]. `qsort()` on macOS reverses the order of fields with the same size. We should extend the comparison function to preserve the order on macOS, as we did on Windows.

Tier 1-3 passed on macOS.

[1] https://github.com/openjdk/jdk/blob/3ee94e040a7395d11a294a6b660d707c97f188f8/src/hotspot/share/classfile/fieldLayoutBuilder.cpp#L102

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

Commit messages:
 - 8341471: [macOS_aarch64] Reversed field layout caused by unstable sorting

Changes: https://git.openjdk.org/jdk/pull/21382/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=21382&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8341471
  Stats: 80 lines in 2 files changed: 76 ins; 0 del; 4 mod
  Patch: https://git.openjdk.org/jdk/pull/21382.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/21382/head:pull/21382

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


More information about the hotspot-runtime-dev mailing list