8254231: Implementation of Foreign Linker API (Incubator)

Reviewed-by: coleenp, ihse, dholmes, vlivanov
This commit is contained in:
Maurizio Cimadamore 2020-11-23 11:00:38 +00:00
parent 53f38353e0
commit 0fb31dbf3a
212 changed files with 67390 additions and 179 deletions

View file

@ -75,6 +75,7 @@ class RecordComponent;
f(java_lang_StackFrameInfo) \
f(java_lang_LiveStackFrameInfo) \
f(java_util_concurrent_locks_AbstractOwnableSynchronizer) \
f(jdk_internal_invoke_NativeEntryPoint) \
f(jdk_internal_misc_UnsafeConstants) \
f(java_lang_boxing_object) \
f(vector_VectorPayload) \
@ -1008,6 +1009,51 @@ class java_lang_invoke_LambdaForm: AllStatic {
static int vmentry_offset() { CHECK_INIT(_vmentry_offset); }
};
// Interface to java.lang.invoke.NativeEntryPoint objects
// (These are a private interface for managing adapter code generation.)
class jdk_internal_invoke_NativeEntryPoint: AllStatic {
friend class JavaClasses;
private:
static int _addr_offset; // type is jlong
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 void compute_offsets();
public:
static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
// Accessors
static address addr(oop entry);
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);
// Testers
static bool is_subclass(Klass* klass) {
return SystemDictionary::NativeEntryPoint_klass() != NULL &&
klass->is_subclass_of(SystemDictionary::NativeEntryPoint_klass());
}
static bool is_instance(oop obj);
// Accessors for code generation:
static int addr_offset_in_bytes() { return _addr_offset; }
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; }
};
// Interface to java.lang.invoke.MemberName objects
// (These are a private interface for Java code to query the class hierarchy.)