Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

8288623: Move Continuation classes out of javaClasses.hpp #9191

175 changes: 69 additions & 106 deletions src/hotspot/share/classfile/javaClasses.cpp
Expand Up @@ -30,6 +30,7 @@
#include "classfile/altHashing.hpp"
#include "classfile/classLoaderData.inline.hpp"
#include "classfile/javaClasses.inline.hpp"
#include "classfile/javaClassesImpl.hpp"
#include "classfile/javaThreadStatus.hpp"
#include "classfile/moduleEntry.hpp"
#include "classfile/stringTable.hpp"
Expand Down Expand Up @@ -64,6 +65,7 @@
#include "prims/methodHandles.hpp"
#include "prims/resolvedMethodTable.hpp"
#include "runtime/continuationEntry.inline.hpp"
#include "runtime/continuationJavaClasses.inline.hpp"
#include "runtime/fieldDescriptor.inline.hpp"
#include "runtime/frame.inline.hpp"
#include "runtime/handles.inline.hpp"
Expand All @@ -88,14 +90,6 @@
#include "jvmci/jvmciJavaClasses.hpp"
#endif

#define INJECTED_FIELD_COMPUTE_OFFSET(klass, name, signature, may_be_java) \
klass::_##name##_offset = JavaClasses::compute_injected_offset(JavaClasses::klass##_##name##_enum);

#if INCLUDE_CDS
#define INJECTED_FIELD_SERIALIZE_OFFSET(klass, name, signature, may_be_java) \
f->do_u4((u4*)&_##name##_offset);
#endif

#define DECLARE_INJECTED_FIELD(klass, name, signature, may_be_java) \
{ VM_CLASS_ID(klass), VM_SYMBOL_ENUM_NAME(name##_name), VM_SYMBOL_ENUM_NAME(signature), may_be_java },

Expand All @@ -119,7 +113,7 @@ void java_lang_Object::register_natives(TRAPS) {
}

int JavaClasses::compute_injected_offset(InjectedFieldID id) {
return _injected_fields[id].compute_offset();
return _injected_fields[(int)id].compute_offset();
}

InjectedField* JavaClasses::get_injected(Symbol* class_name, int* field_count) {
Expand All @@ -137,7 +131,9 @@ InjectedField* JavaClasses::get_injected(Symbol* class_name, int* field_count) {
#define LOOKUP_INJECTED_FIELD(klass, name, signature, may_be_java) \
if (sid == VM_SYMBOL_ENUM_NAME(klass)) { \
count++; \
if (start == -1) start = klass##_##name##_enum; \
if (start == -1) { \
start = (int)InjectedFieldID::klass##_##name##_enum; \
} \
}
ALL_INJECTED_FIELDS(LOOKUP_INJECTED_FIELD);
#undef LOOKUP_INJECTED_FIELD
Expand All @@ -153,9 +149,9 @@ InjectedField* JavaClasses::get_injected(Symbol* class_name, int* field_count) {
// Helpful routine for computing field offsets at run time rather than hardcoding them
// Finds local fields only, including static fields. Static field offsets are from the
// beginning of the mirror.
static void compute_offset(int &dest_offset,
InstanceKlass* ik, Symbol* name_symbol, Symbol* signature_symbol,
bool is_static = false) {
void JavaClasses::compute_offset(int &dest_offset,
InstanceKlass* ik, Symbol* name_symbol, Symbol* signature_symbol,
bool is_static) {
fieldDescriptor fd;
if (ik == NULL) {
ResourceMark rm;
Expand All @@ -179,9 +175,9 @@ static void compute_offset(int &dest_offset,
}

// Overloading to pass name as a string.
static void compute_offset(int& dest_offset, InstanceKlass* ik,
const char* name_string, Symbol* signature_symbol,
bool is_static = false) {
void JavaClasses::compute_offset(int& dest_offset, InstanceKlass* ik,
const char* name_string, Symbol* signature_symbol,
bool is_static) {
TempNewSymbol name = SymbolTable::probe(name_string, (int)strlen(name_string));
if (name == NULL) {
ResourceMark rm;
Expand All @@ -191,16 +187,6 @@ static void compute_offset(int& dest_offset, InstanceKlass* ik,
compute_offset(dest_offset, ik, name, signature_symbol, is_static);
}


#if INCLUDE_CDS
#define FIELD_SERIALIZE_OFFSET(offset, klass, name, signature, is_static) \
f->do_u4((u4*)&offset)
#endif

#define FIELD_COMPUTE_OFFSET(offset, klass, name, signature, is_static) \
compute_offset(offset, klass, name, vmSymbols::signature(), is_static)


// java_lang_String

int java_lang_String::_value_offset;
Expand Down Expand Up @@ -5106,86 +5092,6 @@ void java_lang_AssertionStatusDirectives::set_deflt(oop o, bool val) {
o->bool_field_put(_deflt_offset, val);
}

// Support for jdk.internal.vm.Continuation

int jdk_internal_vm_ContinuationScope::_name_offset;
int jdk_internal_vm_Continuation::_scope_offset;
int jdk_internal_vm_Continuation::_target_offset;
int jdk_internal_vm_Continuation::_tail_offset;
int jdk_internal_vm_Continuation::_parent_offset;
int jdk_internal_vm_Continuation::_yieldInfo_offset;
int jdk_internal_vm_Continuation::_mounted_offset;
int jdk_internal_vm_Continuation::_done_offset;
int jdk_internal_vm_Continuation::_preempted_offset;

#define CONTINUATIONSCOPE_FIELDS_DO(macro) \
macro(_name_offset, k, vmSymbols::name_name(), string_signature, false);

void jdk_internal_vm_ContinuationScope::compute_offsets() {
InstanceKlass* k = vmClasses::ContinuationScope_klass();
CONTINUATIONSCOPE_FIELDS_DO(FIELD_COMPUTE_OFFSET);
}

#if INCLUDE_CDS
void jdk_internal_vm_ContinuationScope::serialize_offsets(SerializeClosure* f) {
CONTINUATIONSCOPE_FIELDS_DO(FIELD_SERIALIZE_OFFSET);
}
#endif

// Support for jdk.internal.vm.Continuation

#define CONTINUATION_FIELDS_DO(macro) \
macro(_scope_offset, k, vmSymbols::scope_name(), continuationscope_signature, false); \
macro(_target_offset, k, vmSymbols::target_name(), runnable_signature, false); \
macro(_parent_offset, k, vmSymbols::parent_name(), continuation_signature, false); \
macro(_yieldInfo_offset, k, vmSymbols::yieldInfo_name(), object_signature, false); \
macro(_tail_offset, k, vmSymbols::tail_name(), stackchunk_signature, false); \
macro(_mounted_offset, k, vmSymbols::mounted_name(), bool_signature, false); \
macro(_done_offset, k, vmSymbols::done_name(), bool_signature, false); \
macro(_preempted_offset, k, "preempted", bool_signature, false);

void jdk_internal_vm_Continuation::compute_offsets() {
InstanceKlass* k = vmClasses::Continuation_klass();
CONTINUATION_FIELDS_DO(FIELD_COMPUTE_OFFSET);
}

#if INCLUDE_CDS
void jdk_internal_vm_Continuation::serialize_offsets(SerializeClosure* f) {
CONTINUATION_FIELDS_DO(FIELD_SERIALIZE_OFFSET);
}
#endif

// Support for jdk.internal.vm.StackChunk

int jdk_internal_vm_StackChunk::_parent_offset;
int jdk_internal_vm_StackChunk::_size_offset;
int jdk_internal_vm_StackChunk::_sp_offset;
int jdk_internal_vm_StackChunk::_pc_offset;
int jdk_internal_vm_StackChunk::_argsize_offset;
int jdk_internal_vm_StackChunk::_flags_offset;
int jdk_internal_vm_StackChunk::_maxThawingSize_offset;
int jdk_internal_vm_StackChunk::_cont_offset;

#define STACKCHUNK_FIELDS_DO(macro) \
macro(_parent_offset, k, vmSymbols::parent_name(), stackchunk_signature, false); \
macro(_size_offset, k, vmSymbols::size_name(), int_signature, false); \
macro(_sp_offset, k, vmSymbols::sp_name(), int_signature, false); \
macro(_argsize_offset, k, vmSymbols::argsize_name(), int_signature, false);

void jdk_internal_vm_StackChunk::compute_offsets() {
InstanceKlass* k = vmClasses::StackChunk_klass();
STACKCHUNK_FIELDS_DO(FIELD_COMPUTE_OFFSET);
STACKCHUNK_INJECTED_FIELDS(INJECTED_FIELD_COMPUTE_OFFSET);
}

#if INCLUDE_CDS
void jdk_internal_vm_StackChunk::serialize_offsets(SerializeClosure* f) {
STACKCHUNK_FIELDS_DO(FIELD_SERIALIZE_OFFSET);
STACKCHUNK_INJECTED_FIELDS(INJECTED_FIELD_SERIALIZE_OFFSET);
}
#endif


int java_util_concurrent_locks_AbstractOwnableSynchronizer::_owner_offset;

#define AOS_FIELDS_DO(macro) \
Expand Down Expand Up @@ -5507,6 +5413,63 @@ void java_lang_InternalError::serialize_offsets(SerializeClosure* f) {
}
#endif

#define BASIC_JAVA_CLASSES_DO_PART1(f) \
f(java_lang_Class) \
f(java_lang_String) \
f(java_lang_ref_Reference) \
//end

#define BASIC_JAVA_CLASSES_DO_PART2(f) \
f(java_lang_System) \
f(java_lang_ClassLoader) \
f(java_lang_Throwable) \
f(java_lang_Thread) \
f(java_lang_Thread_FieldHolder) \
f(java_lang_Thread_Constants) \
f(java_lang_ThreadGroup) \
f(java_lang_VirtualThread) \
f(java_lang_InternalError) \
f(java_lang_AssertionStatusDirectives) \
f(java_lang_ref_SoftReference) \
f(java_lang_invoke_MethodHandle) \
f(java_lang_invoke_DirectMethodHandle) \
f(java_lang_invoke_MemberName) \
f(java_lang_invoke_ResolvedMethodName) \
f(java_lang_invoke_LambdaForm) \
f(java_lang_invoke_MethodType) \
f(java_lang_invoke_CallSite) \
f(java_lang_invoke_ConstantCallSite) \
f(java_lang_invoke_MethodHandleNatives_CallSiteContext) \
f(java_security_AccessControlContext) \
f(java_lang_reflect_AccessibleObject) \
f(java_lang_reflect_Method) \
f(java_lang_reflect_Constructor) \
f(java_lang_reflect_Field) \
f(java_lang_reflect_RecordComponent) \
f(reflect_ConstantPool) \
f(reflect_UnsafeStaticFieldAccessorImpl) \
f(java_lang_reflect_Parameter) \
f(java_lang_Module) \
f(java_lang_StackTraceElement) \
f(java_lang_StackFrameInfo) \
f(java_lang_LiveStackFrameInfo) \
f(jdk_internal_vm_ContinuationScope) \
f(jdk_internal_vm_Continuation) \
f(jdk_internal_vm_StackChunk) \
f(java_util_concurrent_locks_AbstractOwnableSynchronizer) \
f(jdk_internal_foreign_abi_NativeEntryPoint) \
f(jdk_internal_foreign_abi_ABIDescriptor) \
f(jdk_internal_foreign_abi_VMStorage) \
f(jdk_internal_foreign_abi_CallConv) \
f(jdk_internal_misc_UnsafeConstants) \
f(java_lang_boxing_object) \
f(vector_VectorPayload) \
//end

#define BASIC_JAVA_CLASSES_DO(f) \
BASIC_JAVA_CLASSES_DO_PART1(f) \
BASIC_JAVA_CLASSES_DO_PART2(f)

#define DO_COMPUTE_OFFSETS(k) k::compute_offsets();

// Compute field offsets of all the classes in this file
Expand Down