8366477: Refactor AOT-related flag bits in klass.hpp

Reviewed-by: liach, asmehra, kvn
This commit is contained in:
Ioi Lam 2025-09-05 23:55:13 +00:00
parent cdc8b5eb83
commit dbf4ffffe3
7 changed files with 50 additions and 40 deletions

View File

@ -942,7 +942,7 @@ void ArchiveBuilder::make_klasses_shareable() {
old = " old";
}
if (ik->is_generated_shared_class()) {
if (ik->is_aot_generated_class()) {
generated = " generated";
}
if (aotlinked) {

View File

@ -184,7 +184,7 @@ void LambdaFormInvokers::regenerate_holder_classes(TRAPS) {
klass->set_shared_classpath_index(0);
// Set the "generated" bit, so it won't interfere with JVMTI.
// See SystemDictionaryShared::find_builtin_class().
klass->set_is_generated_shared_class();
klass->set_is_aot_generated_class();
}
} else {
int len = h_bytes->length();
@ -222,7 +222,7 @@ void LambdaFormInvokers::regenerate_class(char* class_name, ClassFileStream& st,
AOTMetaspace::try_link_class(THREAD, result);
assert(!HAS_PENDING_EXCEPTION, "Invariant");
result->set_is_generated_shared_class();
result->set_is_aot_generated_class();
if (!klass->in_aot_cache()) {
log_info(aot, lambda)("regenerate_class excluding klass %s %s", class_name, klass->name()->as_C_string());
SystemDictionaryShared::set_excluded(InstanceKlass::cast(klass)); // exclude the existing class from dump

View File

@ -1146,7 +1146,7 @@ InstanceKlass* SystemDictionaryShared::find_builtin_class(Symbol* name) {
DEBUG_ONLY(check_klass_after_loading(record->klass());)
// We did not save the classfile data of the generated LambdaForm invoker classes,
// so we cannot support CLFH for such classes.
if (record->klass()->is_generated_shared_class() && JvmtiExport::should_post_class_file_load_hook()) {
if (record->klass()->is_aot_generated_class() && JvmtiExport::should_post_class_file_load_hook()) {
return nullptr;
}
return record->klass();

View File

@ -764,14 +764,6 @@ public:
bool has_final_method() const { return _misc_flags.has_final_method(); }
void set_has_final_method() { _misc_flags.set_has_final_method(true); }
// Indicates presence of @AOTSafeClassInitializer. Also see AOTClassInitializer for more details.
bool has_aot_safe_initializer() const { return _misc_flags.has_aot_safe_initializer(); }
void set_has_aot_safe_initializer() { _misc_flags.set_has_aot_safe_initializer(true); }
// Indicates @AOTRuntimeSetup private static void runtimeSetup() presence.
bool is_runtime_setup_required() const { return _misc_flags.is_runtime_setup_required(); }
void set_is_runtime_setup_required() { _misc_flags.set_is_runtime_setup_required(true); }
// for adding methods, ConstMethod::UNSET_IDNUM means no more ids available
inline u2 next_method_idnum();
void set_initial_method_idnum(u2 value) { _idnum_allocated_count = value; }

View File

@ -54,8 +54,6 @@ class InstanceKlassFlags {
flag(has_localvariable_table , 1 << 11) /* has localvariable information */ \
flag(has_miranda_methods , 1 << 12) /* True if this class has miranda methods in it's vtable */ \
flag(has_final_method , 1 << 13) /* True if klass has final method */ \
flag(has_aot_safe_initializer , 1 << 14) /* has @AOTSafeClassInitializer annotation */ \
flag(is_runtime_setup_required , 1 << 15) /* has a runtimeSetup method to be called */ \
/* end of list */
#define IK_FLAGS_ENUM_NAME(name, value) _misc_##name = value,

View File

@ -302,7 +302,7 @@ Klass::Klass() : _kind(UnknownKlassKind) {
Klass::Klass(KlassKind kind) : _kind(kind),
_prototype_header(make_prototype(this)),
_shared_class_path_index(-1) {
CDS_ONLY(_shared_class_flags = 0;)
CDS_ONLY(_aot_class_flags = 0;)
CDS_JAVA_HEAP_ONLY(_archived_mirror_index = -1;)
_primary_supers[0] = this;
set_super_check_offset(in_bytes(primary_supers_offset()));

View File

@ -174,18 +174,20 @@ private:
#if INCLUDE_CDS
// Various attributes for shared classes. Should be zero for a non-shared class.
u2 _shared_class_flags;
enum CDSSharedClassFlags {
u2 _aot_class_flags;
enum {
_in_aot_cache = 1 << 0,
_archived_lambda_proxy_is_available = 1 << 1,
_has_value_based_class_annotation = 1 << 2,
_verified_at_dump_time = 1 << 3,
_has_archived_enum_objs = 1 << 4,
// This class was not loaded from a classfile in the module image
// or classpath.
_is_generated_shared_class = 1 << 5,
// archived mirror already initialized by AOT-cache assembly: no further need to call <clinit>
_has_aot_initialized_mirror = 1 << 6,
_is_aot_generated_class = 1 << 5, // this class was not loaded from a classfile in the module image
// or classpath, but was generated during AOT cache assembly.
_has_aot_initialized_mirror = 1 << 6, // archived mirror already initialized by AOT cache assembly.
// no further need to call <clinit>
_has_aot_safe_initializer = 1 << 7, // has @AOTSafeClassInitializer annotation
_is_runtime_setup_required = 1 << 8, // has a runtimeSetup method to be called when
// this class is loaded from AOT cache
};
#endif
@ -325,66 +327,84 @@ protected:
void clear_archived_mirror_index() NOT_CDS_JAVA_HEAP_RETURN;
void set_lambda_proxy_is_available() {
CDS_ONLY(_shared_class_flags |= _archived_lambda_proxy_is_available;)
CDS_ONLY(_aot_class_flags |= _archived_lambda_proxy_is_available;)
}
void clear_lambda_proxy_is_available() {
CDS_ONLY(_shared_class_flags &= (u2)(~_archived_lambda_proxy_is_available);)
CDS_ONLY(_aot_class_flags &= (u2)(~_archived_lambda_proxy_is_available);)
}
bool lambda_proxy_is_available() const {
CDS_ONLY(return (_shared_class_flags & _archived_lambda_proxy_is_available) != 0;)
CDS_ONLY(return (_aot_class_flags & _archived_lambda_proxy_is_available) != 0;)
NOT_CDS(return false;)
}
void set_has_value_based_class_annotation() {
CDS_ONLY(_shared_class_flags |= _has_value_based_class_annotation;)
CDS_ONLY(_aot_class_flags |= _has_value_based_class_annotation;)
}
void clear_has_value_based_class_annotation() {
CDS_ONLY(_shared_class_flags &= (u2)(~_has_value_based_class_annotation);)
CDS_ONLY(_aot_class_flags &= (u2)(~_has_value_based_class_annotation);)
}
bool has_value_based_class_annotation() const {
CDS_ONLY(return (_shared_class_flags & _has_value_based_class_annotation) != 0;)
CDS_ONLY(return (_aot_class_flags & _has_value_based_class_annotation) != 0;)
NOT_CDS(return false;)
}
void set_verified_at_dump_time() {
CDS_ONLY(_shared_class_flags |= _verified_at_dump_time;)
CDS_ONLY(_aot_class_flags |= _verified_at_dump_time;)
}
bool verified_at_dump_time() const {
CDS_ONLY(return (_shared_class_flags & _verified_at_dump_time) != 0;)
CDS_ONLY(return (_aot_class_flags & _verified_at_dump_time) != 0;)
NOT_CDS(return false;)
}
void set_has_archived_enum_objs() {
CDS_ONLY(_shared_class_flags |= _has_archived_enum_objs;)
CDS_ONLY(_aot_class_flags |= _has_archived_enum_objs;)
}
bool has_archived_enum_objs() const {
CDS_ONLY(return (_shared_class_flags & _has_archived_enum_objs) != 0;)
CDS_ONLY(return (_aot_class_flags & _has_archived_enum_objs) != 0;)
NOT_CDS(return false;)
}
void set_is_generated_shared_class() {
CDS_ONLY(_shared_class_flags |= _is_generated_shared_class;)
void set_is_aot_generated_class() {
CDS_ONLY(_aot_class_flags |= _is_aot_generated_class;)
}
bool is_generated_shared_class() const {
CDS_ONLY(return (_shared_class_flags & _is_generated_shared_class) != 0;)
bool is_aot_generated_class() const {
CDS_ONLY(return (_aot_class_flags & _is_aot_generated_class) != 0;)
NOT_CDS(return false;)
}
void set_has_aot_initialized_mirror() {
CDS_ONLY(_shared_class_flags |= _has_aot_initialized_mirror;)
CDS_ONLY(_aot_class_flags |= _has_aot_initialized_mirror;)
}
bool has_aot_initialized_mirror() const {
CDS_ONLY(return (_shared_class_flags & _has_aot_initialized_mirror) != 0;)
CDS_ONLY(return (_aot_class_flags & _has_aot_initialized_mirror) != 0;)
NOT_CDS(return false;)
}
// Indicates presence of @AOTSafeClassInitializer. Also see AOTClassInitializer for more details.
void set_has_aot_safe_initializer() {
CDS_ONLY(_aot_class_flags |= _has_aot_safe_initializer;)
}
bool has_aot_safe_initializer() const {
CDS_ONLY(return (_aot_class_flags & _has_aot_safe_initializer) != 0;)
NOT_CDS(return false;)
}
// Indicates @AOTRuntimeSetup private static void runtimeSetup() presence.
void set_is_runtime_setup_required() {
CDS_ONLY(_aot_class_flags |= _is_runtime_setup_required;)
}
bool is_runtime_setup_required() const {
CDS_ONLY(return (_aot_class_flags & _is_runtime_setup_required) != 0;)
NOT_CDS(return false;)
}
bool in_aot_cache() const { // shadows MetaspaceObj::in_aot_cache)()
CDS_ONLY(return (_shared_class_flags & _in_aot_cache) != 0;)
CDS_ONLY(return (_aot_class_flags & _in_aot_cache) != 0;)
NOT_CDS(return false;)
}
void set_in_aot_cache() {
CDS_ONLY(_shared_class_flags |= _in_aot_cache;)
CDS_ONLY(_aot_class_flags |= _in_aot_cache;)
}
// Obtain the module or package for this class