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