246 friend class VMStructs;
247 friend class JVMCIVMStructs;
248
249 private:
250 // The fake offsets are added by the class loader when java.lang.Class is loaded
251
252 static int _klass_offset;
253 static int _array_klass_offset;
254
255 static int _oop_size_offset;
256 static int _static_oop_field_count_offset;
257
258 static int _protection_domain_offset;
259 static int _init_lock_offset;
260 static int _signers_offset;
261 static int _class_loader_offset;
262 static int _module_offset;
263 static int _component_mirror_offset;
264 static int _name_offset;
265 static int _source_file_offset;
266
267 static bool offsets_computed;
268 static int classRedefinedCount_offset;
269
270 static GrowableArray<Klass*>* _fixup_mirror_list;
271 static GrowableArray<Klass*>* _fixup_module_field_list;
272
273 static void set_init_lock(oop java_class, oop init_lock);
274 static void set_protection_domain(oop java_class, oop protection_domain);
275 static void set_class_loader(oop java_class, oop class_loader);
276 static void set_component_mirror(oop java_class, oop comp_mirror);
277 static void initialize_mirror_fields(Klass* k, Handle mirror, Handle protection_domain, TRAPS);
278 static void set_mirror_module_field(Klass* K, Handle mirror, Handle module, TRAPS);
279 public:
280 static void allocate_fixup_lists();
281 static void compute_offsets();
282
283 // Instance creation
284 static void create_mirror(Klass* k, Handle class_loader, Handle module,
285 Handle protection_domain, TRAPS);
286 static void fixup_mirror(Klass* k, TRAPS);
287 static oop create_basic_type_mirror(const char* basic_type_name, BasicType type, TRAPS);
288 static void update_archived_primitive_mirror_native_pointers(oop archived_mirror) NOT_CDS_JAVA_HEAP_RETURN;
289 static void update_archived_mirror_native_pointers(oop archived_mirror) NOT_CDS_JAVA_HEAP_RETURN;
290
291 // Archiving
292 static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
293 static void archive_basic_type_mirrors(TRAPS) NOT_CDS_JAVA_HEAP_RETURN;
294 static oop archive_mirror(Klass* k, TRAPS) NOT_CDS_JAVA_HEAP_RETURN_(NULL);
295 static oop process_archived_mirror(Klass* k, oop mirror, oop archived_mirror, Thread *THREAD)
296 NOT_CDS_JAVA_HEAP_RETURN_(NULL);
297 static bool restore_archived_mirror(Klass *k, Handle class_loader, Handle module,
298 Handle protection_domain,
299 TRAPS) NOT_CDS_JAVA_HEAP_RETURN_(false);
300
301 static void fixup_module_field(Klass* k, Handle module);
302
303 // Conversion
304 static Klass* as_Klass(oop java_class);
305 static Klass* as_Klass_raw(oop java_class);
313
314 static bool is_primitive(oop java_class);
315 static BasicType primitive_type(oop java_class);
316 static oop primitive_mirror(BasicType t);
317 // JVM_NewArray support
318 static Klass* array_klass_acquire(oop java_class);
319 static void release_set_array_klass(oop java_class, Klass* klass);
320 // compiler support for class operations
321 static int klass_offset_in_bytes() { return _klass_offset; }
322 static int array_klass_offset_in_bytes() { return _array_klass_offset; }
323 // Support for classRedefinedCount field
324 static int classRedefinedCount(oop the_class_mirror);
325 static void set_classRedefinedCount(oop the_class_mirror, int value);
326
327 // Support for embedded per-class oops
328 static oop protection_domain(oop java_class);
329 static oop init_lock(oop java_class);
330 static oop component_mirror(oop java_class);
331 static objArrayOop signers(oop java_class);
332 static void set_signers(oop java_class, objArrayOop signers);
333
334 static oop class_loader(oop java_class);
335 static void set_module(oop java_class, oop module);
336 static oop module(oop java_class);
337
338 static oop name(Handle java_class, TRAPS);
339
340 static oop source_file(oop java_class);
341 static void set_source_file(oop java_class, oop source_file);
342
343 static int oop_size(oop java_class);
344 static int oop_size_raw(oop java_class);
345 static void set_oop_size(HeapWord* java_class, int size);
346 static int static_oop_field_count(oop java_class);
347 static int static_oop_field_count_raw(oop java_class);
348 static void set_static_oop_field_count(oop java_class, int size);
349
350 static GrowableArray<Klass*>* fixup_mirror_list() {
351 return _fixup_mirror_list;
352 }
1134
1135 // Testers
1136 static bool is_subclass(Klass* klass) {
1137 return klass->is_subclass_of(SystemDictionary::MemberName_klass());
1138 }
1139 static bool is_instance(oop obj);
1140
1141 static bool is_method(oop obj);
1142
1143 // Relevant integer codes (keep these in synch. with MethodHandleNatives.Constants):
1144 enum {
1145 MN_IS_METHOD = 0x00010000, // method (not constructor)
1146 MN_IS_CONSTRUCTOR = 0x00020000, // constructor
1147 MN_IS_FIELD = 0x00040000, // field
1148 MN_IS_TYPE = 0x00080000, // nested type
1149 MN_CALLER_SENSITIVE = 0x00100000, // @CallerSensitive annotation detected
1150 MN_REFERENCE_KIND_SHIFT = 24, // refKind
1151 MN_REFERENCE_KIND_MASK = 0x0F000000 >> MN_REFERENCE_KIND_SHIFT,
1152 // The SEARCH_* bits are not for MN.flags but for the matchFlags argument of MHN.getMembers:
1153 MN_SEARCH_SUPERCLASSES = 0x00100000, // walk super classes
1154 MN_SEARCH_INTERFACES = 0x00200000 // walk implemented interfaces
1155 };
1156
1157 // Accessors for code generation:
1158 static int clazz_offset_in_bytes() { return _clazz_offset; }
1159 static int type_offset_in_bytes() { return _type_offset; }
1160 static int name_offset_in_bytes() { return _name_offset; }
1161 static int flags_offset_in_bytes() { return _flags_offset; }
1162 static int method_offset_in_bytes() { return _method_offset; }
1163 static int vmindex_offset_in_bytes() { return _vmindex_offset; }
1164 };
1165
1166
1167 // Interface to java.lang.invoke.MethodType objects
1168
1169 class java_lang_invoke_MethodType: AllStatic {
1170 friend class JavaClasses;
1171
1172 private:
1173 static int _rtype_offset;
1174 static int _ptypes_offset;
|
246 friend class VMStructs;
247 friend class JVMCIVMStructs;
248
249 private:
250 // The fake offsets are added by the class loader when java.lang.Class is loaded
251
252 static int _klass_offset;
253 static int _array_klass_offset;
254
255 static int _oop_size_offset;
256 static int _static_oop_field_count_offset;
257
258 static int _protection_domain_offset;
259 static int _init_lock_offset;
260 static int _signers_offset;
261 static int _class_loader_offset;
262 static int _module_offset;
263 static int _component_mirror_offset;
264 static int _name_offset;
265 static int _source_file_offset;
266 static int _classData_offset;
267
268 static bool offsets_computed;
269 static int classRedefinedCount_offset;
270
271 static GrowableArray<Klass*>* _fixup_mirror_list;
272 static GrowableArray<Klass*>* _fixup_module_field_list;
273
274 static void set_init_lock(oop java_class, oop init_lock);
275 static void set_protection_domain(oop java_class, oop protection_domain);
276 static void set_class_loader(oop java_class, oop class_loader);
277 static void set_component_mirror(oop java_class, oop comp_mirror);
278 static void initialize_mirror_fields(Klass* k, Handle mirror, Handle protection_domain,
279 Handle classData, TRAPS);
280 static void set_mirror_module_field(Klass* K, Handle mirror, Handle module, TRAPS);
281 public:
282 static void allocate_fixup_lists();
283 static void compute_offsets();
284
285 // Instance creation
286 static void create_mirror(Klass* k, Handle class_loader, Handle module,
287 Handle protection_domain, Handle classData, TRAPS);
288 static void fixup_mirror(Klass* k, TRAPS);
289 static oop create_basic_type_mirror(const char* basic_type_name, BasicType type, TRAPS);
290 static void update_archived_primitive_mirror_native_pointers(oop archived_mirror) NOT_CDS_JAVA_HEAP_RETURN;
291 static void update_archived_mirror_native_pointers(oop archived_mirror) NOT_CDS_JAVA_HEAP_RETURN;
292
293 // Archiving
294 static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
295 static void archive_basic_type_mirrors(TRAPS) NOT_CDS_JAVA_HEAP_RETURN;
296 static oop archive_mirror(Klass* k, TRAPS) NOT_CDS_JAVA_HEAP_RETURN_(NULL);
297 static oop process_archived_mirror(Klass* k, oop mirror, oop archived_mirror, Thread *THREAD)
298 NOT_CDS_JAVA_HEAP_RETURN_(NULL);
299 static bool restore_archived_mirror(Klass *k, Handle class_loader, Handle module,
300 Handle protection_domain,
301 TRAPS) NOT_CDS_JAVA_HEAP_RETURN_(false);
302
303 static void fixup_module_field(Klass* k, Handle module);
304
305 // Conversion
306 static Klass* as_Klass(oop java_class);
307 static Klass* as_Klass_raw(oop java_class);
315
316 static bool is_primitive(oop java_class);
317 static BasicType primitive_type(oop java_class);
318 static oop primitive_mirror(BasicType t);
319 // JVM_NewArray support
320 static Klass* array_klass_acquire(oop java_class);
321 static void release_set_array_klass(oop java_class, Klass* klass);
322 // compiler support for class operations
323 static int klass_offset_in_bytes() { return _klass_offset; }
324 static int array_klass_offset_in_bytes() { return _array_klass_offset; }
325 // Support for classRedefinedCount field
326 static int classRedefinedCount(oop the_class_mirror);
327 static void set_classRedefinedCount(oop the_class_mirror, int value);
328
329 // Support for embedded per-class oops
330 static oop protection_domain(oop java_class);
331 static oop init_lock(oop java_class);
332 static oop component_mirror(oop java_class);
333 static objArrayOop signers(oop java_class);
334 static void set_signers(oop java_class, objArrayOop signers);
335 static oop class_data(oop java_class);
336 static void set_class_data(oop java_class, oop classData);
337
338 static oop class_loader(oop java_class);
339 static void set_module(oop java_class, oop module);
340 static oop module(oop java_class);
341
342 static oop name(Handle java_class, TRAPS);
343
344 static oop source_file(oop java_class);
345 static void set_source_file(oop java_class, oop source_file);
346
347 static int oop_size(oop java_class);
348 static int oop_size_raw(oop java_class);
349 static void set_oop_size(HeapWord* java_class, int size);
350 static int static_oop_field_count(oop java_class);
351 static int static_oop_field_count_raw(oop java_class);
352 static void set_static_oop_field_count(oop java_class, int size);
353
354 static GrowableArray<Klass*>* fixup_mirror_list() {
355 return _fixup_mirror_list;
356 }
1138
1139 // Testers
1140 static bool is_subclass(Klass* klass) {
1141 return klass->is_subclass_of(SystemDictionary::MemberName_klass());
1142 }
1143 static bool is_instance(oop obj);
1144
1145 static bool is_method(oop obj);
1146
1147 // Relevant integer codes (keep these in synch. with MethodHandleNatives.Constants):
1148 enum {
1149 MN_IS_METHOD = 0x00010000, // method (not constructor)
1150 MN_IS_CONSTRUCTOR = 0x00020000, // constructor
1151 MN_IS_FIELD = 0x00040000, // field
1152 MN_IS_TYPE = 0x00080000, // nested type
1153 MN_CALLER_SENSITIVE = 0x00100000, // @CallerSensitive annotation detected
1154 MN_REFERENCE_KIND_SHIFT = 24, // refKind
1155 MN_REFERENCE_KIND_MASK = 0x0F000000 >> MN_REFERENCE_KIND_SHIFT,
1156 // The SEARCH_* bits are not for MN.flags but for the matchFlags argument of MHN.getMembers:
1157 MN_SEARCH_SUPERCLASSES = 0x00100000, // walk super classes
1158 MN_SEARCH_INTERFACES = 0x00200000, // walk implemented interfaces
1159 MN_NESTMATE_CLASS = 0x00000001,
1160 MN_HIDDEN_CLASS = 0x00000002,
1161 MN_STRONG_LOADER_LINK = 0x00000004,
1162 MN_ACCESS_VM_ANNOTATIONS = 0x00000008
1163 };
1164
1165 // Accessors for code generation:
1166 static int clazz_offset_in_bytes() { return _clazz_offset; }
1167 static int type_offset_in_bytes() { return _type_offset; }
1168 static int name_offset_in_bytes() { return _name_offset; }
1169 static int flags_offset_in_bytes() { return _flags_offset; }
1170 static int method_offset_in_bytes() { return _method_offset; }
1171 static int vmindex_offset_in_bytes() { return _vmindex_offset; }
1172 };
1173
1174
1175 // Interface to java.lang.invoke.MethodType objects
1176
1177 class java_lang_invoke_MethodType: AllStatic {
1178 friend class JavaClasses;
1179
1180 private:
1181 static int _rtype_offset;
1182 static int _ptypes_offset;
|