RFR: 8339112: Move JVM Klass flags out of AccessFlags [v2]

Yudi Zheng yzheng at openjdk.org
Fri Aug 30 13:48:20 UTC 2024


On Thu, 29 Aug 2024 18:50:42 GMT, Coleen Phillimore <coleenp at openjdk.org> wrote:

>> Move JVM implementation access flags that are not specified by the classfile format into Klass so we can shrink AccessFlags to u2 in a future change.
>> 
>> Tested with tier1-7.
>> 
>> NOTE: there are arm, ppc and s390 changes to this that are just a guess.  Also, graal changes.
>
> Coleen Phillimore has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Add in graal flags and a comment.

src/hotspot/share/jvmci/vmStructs_jvmci.cpp line 274:

> 272:   nonstatic_field(Klass,                       _bitmap,                                       uintx)                                 \
> 273:   nonstatic_field(Klass,                       _hash_slot,                                    uint8_t)                               \
> 274:   nonstatic_field(Klass,                       _misc_flags._flags,                            u1)                                    \

Can we export `_misc_flags` instead, similar to `_access_flags`?

diff --git a/src/hotspot/share/jvmci/vmStructs_jvmci.cpp b/src/hotspot/share/jvmci/vmStructs_jvmci.cpp
index 9d65268f0fe..6170647186c 100644
--- a/src/hotspot/share/jvmci/vmStructs_jvmci.cpp
+++ b/src/hotspot/share/jvmci/vmStructs_jvmci.cpp
@@ -268,10 +268,10 @@
   nonstatic_field(Klass,                       _java_mirror,                                  OopHandle)                             \
   nonstatic_field(Klass,                       _modifier_flags,                               jint)                                  \
   nonstatic_field(Klass,                       _access_flags,                                 AccessFlags)                           \
+  nonstatic_field(Klass,                       _misc_flags,                                   KlassFlags)                            \
   nonstatic_field(Klass,                       _class_loader_data,                            ClassLoaderData*)                      \
   nonstatic_field(Klass,                       _bitmap,                                       uintx)                                 \
   nonstatic_field(Klass,                       _hash_slot,                                    uint8_t)                               \
-  nonstatic_field(Klass,                       _misc_flags._flags,                            u1)                                    \
                                                                                                                                      \
   nonstatic_field(LocalVariableTableElement,   start_bci,                                     u2)                                    \
   nonstatic_field(LocalVariableTableElement,   length,                                        u2)                                    \
diff --git a/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl.java b/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl.java
index 3de4de7d42d..91c9e73b532 100644
--- a/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl.java
+++ b/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl.java
@@ -170,6 +170,11 @@ public int getAccessFlags() {
         return UNSAFE.getInt(getKlassPointer() + config.klassAccessFlagsOffset);
     }
 
+    public int getMiscFlags() {
+        HotSpotVMConfig config = config();
+        return UNSAFE.getInt(getKlassPointer() + config.klassMiscFlagsOffset);
+    }
+
     @Override
     public ResolvedJavaType getComponentType() {
         if (componentType == null) {
@@ -373,9 +378,7 @@ public AssumptionResult<Boolean> hasFinalizableSubclass() {
 
     @Override
     public boolean hasFinalizer() {
-        HotSpotVMConfig config = config();
-        int miscFlags = UNSAFE.getByte(getKlassPointer() + config.klassMiscFlagsOffset);
-        return (miscFlags & config().jvmAccHasFinalizer) != 0;
+        return (getMiscFlags() & config().jvmAccHasFinalizer) != 0;
     }
 
     @Override
@@ -1112,9 +1115,7 @@ public ResolvedJavaField resolveField(UnresolvedJavaField unresolvedJavaField, R
 
     @Override
     public boolean isCloneableWithAllocation() {
-        HotSpotVMConfig config = config();
-        int miscFlags = UNSAFE.getByte(getKlassPointer() + config.klassMiscFlagsOffset);
-        return (miscFlags & config().jvmAccIsCloneableFast) != 0;
+        return (getMiscFlags() & config().jvmAccIsCloneableFast) != 0;
     }
 
     @Override
diff --git a/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotVMConfig.java b/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotVMConfig.java
index 16d9cf3625e..6f1c325ee47 100644
--- a/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotVMConfig.java
+++ b/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotVMConfig.java
@@ -85,6 +85,7 @@ String getHostArchitectureName() {
     final int javaMirrorOffset = getFieldOffset("Klass::_java_mirror", Integer.class, "OopHandle");
 
     final int klassAccessFlagsOffset = getFieldOffset("Klass::_access_flags", Integer.class, "AccessFlags");
+    final int klassMiscFlagsOffset = getFieldOffset("Klass::_misc_flags", Integer.class, "KlassFlags");
     final int klassLayoutHelperOffset = getFieldOffset("Klass::_layout_helper", Integer.class, "jint");
 
     final int klassLayoutHelperNeutralValue = getConstant("Klass::_lh_neutral_value", Integer.class);
@@ -98,7 +99,6 @@ String getHostArchitectureName() {
     final int instanceKlassFieldInfoStreamOffset = getFieldOffset("InstanceKlass::_fieldinfo_stream", Integer.class, "Array<u1>*");
     final int instanceKlassAnnotationsOffset = getFieldOffset("InstanceKlass::_annotations", Integer.class, "Annotations*");
     final int instanceKlassMiscFlagsOffset = getFieldOffset("InstanceKlass::_misc_flags._flags", Integer.class, "u2");
-    final int klassMiscFlagsOffset = getFieldOffset("Klass::_misc_flags._flags", Integer.class, "u1");
     final int klassVtableStartOffset = getFieldValue("CompilerToVM::Data::Klass_vtable_start_offset", Integer.class, "int");
     final int klassVtableLengthOffset = getFieldValue("CompilerToVM::Data::Klass_vtable_length_offset", Integer.class, "int");

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

PR Review Comment: https://git.openjdk.org/jdk/pull/20719#discussion_r1738703831


More information about the serviceability-dev mailing list