8283689: Update the foreign linker VM implementation

Co-authored-by: Jorn Vernee <jvernee@openjdk.org>
Co-authored-by: Nick Gasson <ngasson@openjdk.org>
Reviewed-by: mcimadamore, vlivanov, rehn
This commit is contained in:
Jorn Vernee 2022-05-18 09:49:55 +00:00
parent 6a8be358d2
commit 81e4bdbe13
154 changed files with 3718 additions and 4360 deletions

View file

@ -83,7 +83,10 @@ class RecordComponent;
f(jdk_internal_vm_Continuation) \
f(jdk_internal_vm_StackChunk) \
f(java_util_concurrent_locks_AbstractOwnableSynchronizer) \
f(jdk_internal_invoke_NativeEntryPoint) \
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) \
@ -1276,16 +1279,12 @@ class java_lang_invoke_LambdaForm: AllStatic {
// Interface to java.lang.invoke.NativeEntryPoint objects
// (These are a private interface for managing adapter code generation.)
class jdk_internal_invoke_NativeEntryPoint: AllStatic {
class jdk_internal_foreign_abi_NativeEntryPoint: AllStatic {
friend class JavaClasses;
private:
static int _shadow_space_offset;
static int _argMoves_offset;
static int _returnMoves_offset;
static int _need_transition_offset;
static int _method_type_offset;
static int _name_offset;
static int _invoker_offset;
static void compute_offsets();
@ -1293,12 +1292,8 @@ class jdk_internal_invoke_NativeEntryPoint: AllStatic {
static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
// Accessors
static jint shadow_space(oop entry);
static oop argMoves(oop entry);
static oop returnMoves(oop entry);
static jboolean need_transition(oop entry);
static oop method_type(oop entry);
static oop name(oop entry);
static jlong invoker(oop entry);
// Testers
static bool is_subclass(Klass* klass) {
@ -1308,12 +1303,92 @@ class jdk_internal_invoke_NativeEntryPoint: AllStatic {
static bool is_instance(oop obj);
// Accessors for code generation:
static int shadow_space_offset_in_bytes() { return _shadow_space_offset; }
static int argMoves_offset_in_bytes() { return _argMoves_offset; }
static int returnMoves_offset_in_bytes() { return _returnMoves_offset; }
static int need_transition_offset_in_bytes() { return _need_transition_offset; }
static int method_type_offset_in_bytes() { return _method_type_offset; }
static int name_offset_in_bytes() { return _name_offset; }
static int invoker_offset_in_bytes() { return _invoker_offset; }
};
class jdk_internal_foreign_abi_ABIDescriptor: AllStatic {
friend class JavaClasses;
private:
static int _inputStorage_offset;
static int _outputStorage_offset;
static int _volatileStorage_offset;
static int _stackAlignment_offset;
static int _shadowSpace_offset;
static int _targetAddrStorage_offset;
static int _retBufAddrStorage_offset;
static void compute_offsets();
public:
static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
// Accessors
static objArrayOop inputStorage(oop entry);
static objArrayOop outputStorage(oop entry);
static objArrayOop volatileStorage(oop entry);
static jint stackAlignment(oop entry);
static jint shadowSpace(oop entry);
static oop targetAddrStorage(oop entry);
static oop retBufAddrStorage(oop entry);
// Testers
static bool is_subclass(Klass* klass) {
return vmClasses::ABIDescriptor_klass() != NULL &&
klass->is_subclass_of(vmClasses::ABIDescriptor_klass());
}
static bool is_instance(oop obj);
};
class jdk_internal_foreign_abi_VMStorage: AllStatic {
friend class JavaClasses;
private:
static int _type_offset;
static int _index_offset;
static int _debugName_offset;
static void compute_offsets();
public:
static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
// Accessors
static jint type(oop entry);
static jint index(oop entry);
static oop debugName(oop entry);
// Testers
static bool is_subclass(Klass* klass) {
return vmClasses::VMStorage_klass() != NULL &&
klass->is_subclass_of(vmClasses::VMStorage_klass());
}
static bool is_instance(oop obj);
};
class jdk_internal_foreign_abi_CallConv: AllStatic {
friend class JavaClasses;
private:
static int _argRegs_offset;
static int _retRegs_offset;
static void compute_offsets();
public:
static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
// Accessors
static objArrayOop argRegs(oop entry);
static objArrayOop retRegs(oop entry);
// Testers
static bool is_subclass(Klass* klass) {
return vmClasses::CallConv_klass() != NULL &&
klass->is_subclass_of(vmClasses::CallConv_klass());
}
static bool is_instance(oop obj);
};
// Interface to java.lang.invoke.MemberName objects