196 }
197
198 static unsigned int hash_code(oop java_string);
199 static unsigned int hash_code_noupdate(oop java_string);
200
201 // Compare strings (of different types/encodings), length is the string (array) length
202 static bool equals(oop java_string, const jchar* chars, int len);
203 static bool equals(oop java_string, const char* utf8_str, size_t utf8_len);
204 static bool equals(oop str1, oop str2);
205 static inline bool value_equals(typeArrayOop str_value1, typeArrayOop str_value2);
206
207 // Conversion between '.' and '/' formats, and allocate a String from the result.
208 static Handle externalize_classname(Symbol* java_name, TRAPS);
209
210 // Conversion
211 static Symbol* as_symbol(oop java_string);
212 static Symbol* as_symbol_or_null(oop java_string);
213
214 // Tester
215 static inline bool is_instance(oop obj);
216
217 // Debugging
218 static void print(oop java_string, outputStream* st, int max_length = MaxStringPrintSize);
219 friend class JavaClasses;
220 friend class StringTable;
221 };
222
223
224 // Interface to java.lang.Class objects
225
226 #define CLASS_INJECTED_FIELDS(macro) \
227 macro(java_lang_Class, klass, intptr_signature, false) \
228 macro(java_lang_Class, array_klass, intptr_signature, false) \
229 macro(java_lang_Class, oop_size, int_signature, false) \
230 macro(java_lang_Class, static_oop_field_count, int_signature, false) \
231 macro(java_lang_Class, source_file, object_signature, false) \
232 macro(java_lang_Class, init_lock, object_signature, false)
233
234 class java_lang_Class : AllStatic {
235 friend class VMStructs;
236 friend class JVMCIVMStructs;
237 friend class HeapShared;
238
239 private:
240
241 // The fake offsets are added by the class loader when java.lang.Class is loaded
242
243 static int _klass_offset;
244 static int _array_klass_offset;
245
246 static int _oop_size_offset;
247 static int _static_oop_field_count_offset;
248
249 static int _protection_domain_offset;
250 static int _init_lock_offset;
251 static int _signers_offset;
252 static int _class_loader_offset;
253 static int _module_offset;
254 static int _component_mirror_offset;
255 static int _name_offset;
256 static int _source_file_offset;
257 static int _classData_offset;
258 static int _classRedefinedCount_offset;
259 static int _reflectionData_offset;
260 static int _modifiers_offset;
261 static int _is_primitive_offset;
262 static int _raw_access_flags_offset;
263
264 static bool _offsets_computed;
265
266 static GrowableArray<Klass*>* _fixup_mirror_list;
267 static GrowableArray<Klass*>* _fixup_module_field_list;
268
269 static void set_init_lock(oop java_class, oop init_lock);
270 static void set_protection_domain(oop java_class, oop protection_domain);
271 static void set_class_loader(oop java_class, oop class_loader);
272 static void set_component_mirror(oop java_class, oop comp_mirror);
273 static void initialize_mirror_fields(InstanceKlass* ik, Handle mirror, Handle protection_domain,
274 Handle classData, TRAPS);
275 static void set_mirror_module_field(JavaThread* current, Klass* K, Handle mirror, Handle module);
276
277 static void set_modifiers(oop java_class, u2 value);
278 static void set_raw_access_flags(oop java_class, u2 value);
279 static void set_is_primitive(oop java_class);
280 static void release_set_array_klass(oop java_class, Klass* klass);
281
282 public:
283 static void allocate_fixup_lists();
284 static void compute_offsets();
285
286 // Instance creation
287 static void allocate_mirror(Klass* k, bool is_scratch, Handle protection_domain, Handle classData,
288 Handle& mirror, Handle& comp_mirror, TRAPS); // returns mirror and comp_mirror
289 static void create_mirror(Klass* k, Handle class_loader, Handle module,
290 Handle protection_domain, Handle classData, TRAPS);
291 static void fixup_mirror(Klass* k, TRAPS);
292 static oop create_basic_type_mirror(const char* basic_type_name, BasicType type, TRAPS);
293
294 // Archiving
295 static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
303 // Conversion -- java_class must not be null. The return value is null only if java_class is a primitive type.
304 static Klass* as_Klass(oop java_class);
305 static InstanceKlass* as_InstanceKlass(oop java_class);
306
307 static void set_klass(oop java_class, Klass* klass);
308 static BasicType as_BasicType(oop java_class, Klass** reference_klass = nullptr);
309 static Symbol* as_signature(oop java_class, bool intern_if_not_found);
310 static void print_signature(oop java_class, outputStream *st);
311 static const char* as_external_name(oop java_class);
312 // Testing
313 static bool is_instance(oop obj);
314
315 static bool is_primitive(oop java_class);
316 static BasicType primitive_type(oop java_class);
317 static oop primitive_mirror(BasicType t);
318 static Klass* array_klass_acquire(oop java_class);
319
320 // compiler support for class operations
321 static int klass_offset() { CHECK_INIT(_klass_offset); }
322 static int array_klass_offset() { CHECK_INIT(_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 void clear_init_lock(oop java_class) {
331 set_init_lock(java_class, nullptr);
332 }
333 static oop component_mirror(oop java_class);
334 static int component_mirror_offset() { return _component_mirror_offset; }
335 static objArrayOop signers(oop java_class);
336 static oop class_data(oop java_class);
337 static void set_class_data(oop java_class, oop classData);
338 static int reflection_data_offset() { return _reflectionData_offset; }
339
340 static oop class_loader(oop java_class);
341 static void set_module(oop java_class, oop module);
342 static oop module(oop java_class);
817 static void set_signature(oop constructor, oop value);
818 static void set_annotations(oop constructor, oop value);
819 static void set_parameter_annotations(oop method, oop value);
820
821 // Debugging
822 friend class JavaClasses;
823 };
824
825
826 // Interface to java.lang.reflect.Field objects
827
828 class java_lang_reflect_Field : public java_lang_reflect_AccessibleObject {
829 private:
830 // Note that to reduce dependencies on the JDK we compute these
831 // offsets at run-time.
832 static int _clazz_offset;
833 static int _name_offset;
834 static int _type_offset;
835 static int _slot_offset;
836 static int _modifiers_offset;
837 static int _trusted_final_offset;
838 static int _signature_offset;
839 static int _annotations_offset;
840
841 static void compute_offsets();
842
843 public:
844 static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
845
846 // Allocation
847 static Handle create(TRAPS);
848
849 // Accessors
850 static oop clazz(oop reflect);
851 static void set_clazz(oop reflect, oop value);
852
853 static oop name(oop field);
854 static void set_name(oop field, oop value);
855
856 static oop type(oop field);
857 static void set_type(oop field, oop value);
858
859 static int slot(oop reflect);
860 static void set_slot(oop reflect, int value);
861
862 static int modifiers(oop field);
863 static void set_modifiers(oop field, int value);
864
865 static void set_trusted_final(oop field);
866
867 static void set_signature(oop constructor, oop value);
868 static void set_annotations(oop constructor, oop value);
869
870 // Debugging
871 friend class JavaClasses;
872 };
873
874 class java_lang_reflect_Parameter {
875 private:
876 // Note that to reduce dependencies on the JDK we compute these
877 // offsets at run-time.
878 static int _name_offset;
879 static int _modifiers_offset;
880 static int _index_offset;
881 static int _executable_offset;
882
883 static void compute_offsets();
884
885 public:
967
968 // Debugging
969 friend class JavaClasses;
970 };
971
972
973 // Interface to java.lang primitive type boxing objects:
974 // - java.lang.Boolean
975 // - java.lang.Character
976 // - java.lang.Float
977 // - java.lang.Double
978 // - java.lang.Byte
979 // - java.lang.Short
980 // - java.lang.Integer
981 // - java.lang.Long
982
983 // This could be separated out into 8 individual classes.
984
985 class java_lang_boxing_object: AllStatic {
986 private:
987 static int _value_offset;
988 static int _long_value_offset;
989
990 static void compute_offsets();
991 static oop initialize_and_allocate(BasicType type, TRAPS);
992 public:
993 // Allocation. Returns a boxed value, or null for invalid type.
994 static oop create(BasicType type, jvalue* value, TRAPS);
995 // Accessors. Returns the basic type being boxed, or T_ILLEGAL for invalid oop.
996 static BasicType get_value(oop box, jvalue* value);
997 static BasicType set_value(oop box, jvalue* value);
998 static BasicType basic_type(oop box);
999 static bool is_instance(oop box) { return basic_type(box) != T_ILLEGAL; }
1000 static bool is_instance(oop box, BasicType type) { return basic_type(box) == type; }
1001 static void print(oop box, outputStream* st) { jvalue value; print(get_value(box, &value), &value, st); }
1002 static void print(BasicType type, jvalue* value, outputStream* st);
1003
1004 static int value_offset(BasicType type) {
1005 return is_double_word_type(type) ? _long_value_offset : _value_offset;
1006 }
1007
1008 static void serialize_offsets(SerializeClosure* f);
1009
1010 // Debugging
1011 friend class JavaClasses;
1012 };
1013
1014
1015
1016 // Interface to java.lang.ref.Reference objects
1017
1018 class java_lang_ref_Reference: AllStatic {
1019 static int _referent_offset;
1020 static int _queue_offset;
1021 static int _next_offset;
1022 static int _discovered_offset;
1023
1024 static bool _offsets_initialized;
1025
1347 static void set_flags(oop mname, int flags);
1348
1349 // Link through ResolvedMethodName field to get Method*
1350 static Method* vmtarget(oop mname);
1351 static void set_method(oop mname, oop method);
1352
1353 static intptr_t vmindex(oop mname);
1354 static void set_vmindex(oop mname, intptr_t index);
1355
1356 // Testers
1357 static bool is_subclass(Klass* klass) {
1358 return klass->is_subclass_of(vmClasses::MemberName_klass());
1359 }
1360 static bool is_instance(oop obj);
1361
1362 static bool is_method(oop obj);
1363
1364 // Relevant integer codes (keep these in synch. with MethodHandleNatives.Constants):
1365 enum {
1366 MN_IS_METHOD = 0x00010000, // method (not constructor)
1367 MN_IS_CONSTRUCTOR = 0x00020000, // constructor
1368 MN_IS_FIELD = 0x00040000, // field
1369 MN_IS_TYPE = 0x00080000, // nested type
1370 MN_CALLER_SENSITIVE = 0x00100000, // @CallerSensitive annotation detected
1371 MN_TRUSTED_FINAL = 0x00200000, // trusted final field
1372 MN_HIDDEN_MEMBER = 0x00400000, // @Hidden annotation detected
1373 MN_REFERENCE_KIND_SHIFT = 24, // refKind
1374 MN_REFERENCE_KIND_MASK = 0x0F000000 >> MN_REFERENCE_KIND_SHIFT,
1375 MN_NESTMATE_CLASS = 0x00000001,
1376 MN_HIDDEN_CLASS = 0x00000002,
1377 MN_STRONG_LOADER_LINK = 0x00000004,
1378 MN_ACCESS_VM_ANNOTATIONS = 0x00000008,
1379 // Lookup modes
1380 MN_MODULE_MODE = 0x00000010,
1381 MN_UNCONDITIONAL_MODE = 0x00000020,
1382 MN_TRUSTED_MODE = -1
1383 };
1384
1385 // Accessors for code generation:
1386 static int clazz_offset() { CHECK_INIT(_clazz_offset); }
1387 static int type_offset() { CHECK_INIT(_type_offset); }
1388 static int flags_offset() { CHECK_INIT(_flags_offset); }
1389 static int method_offset() { CHECK_INIT(_method_offset); }
1390 static int vmindex_offset() { CHECK_INIT(_vmindex_offset); }
1391 };
1392
1393
1394 // Interface to java.lang.invoke.MethodType objects
1858 class java_lang_Short_ShortCache : AllStatic {
1859 private:
1860 static int _static_cache_offset;
1861 public:
1862 static Symbol* symbol();
1863 static void compute_offsets(InstanceKlass* k);
1864 static objArrayOop cache(InstanceKlass *k);
1865 static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1866 };
1867
1868 class java_lang_Byte_ByteCache : AllStatic {
1869 private:
1870 static int _static_cache_offset;
1871 public:
1872 static Symbol* symbol();
1873 static void compute_offsets(InstanceKlass* k);
1874 static objArrayOop cache(InstanceKlass *k);
1875 static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1876 };
1877
1878
1879 // Interface to java.lang.InternalError objects
1880
1881 #define INTERNALERROR_INJECTED_FIELDS(macro) \
1882 macro(java_lang_InternalError, during_unsafe_access, bool_signature, false)
1883
1884 class java_lang_InternalError : AllStatic {
1885 private:
1886 static int _during_unsafe_access_offset;
1887 public:
1888 static jboolean during_unsafe_access(oop internal_error);
1889 static void set_during_unsafe_access(oop internal_error);
1890 static void compute_offsets();
1891 static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1892 };
1893
1894 // Use to declare fields that need to be injected into Java classes
1895 // for the JVM to use. The name_index and signature_index are
1896 // declared in vmSymbols. The may_be_java flag is used to declare
1897 // fields that might already exist in Java but should be injected if
1898 // they don't. Otherwise the field is unconditionally injected and
|
196 }
197
198 static unsigned int hash_code(oop java_string);
199 static unsigned int hash_code_noupdate(oop java_string);
200
201 // Compare strings (of different types/encodings), length is the string (array) length
202 static bool equals(oop java_string, const jchar* chars, int len);
203 static bool equals(oop java_string, const char* utf8_str, size_t utf8_len);
204 static bool equals(oop str1, oop str2);
205 static inline bool value_equals(typeArrayOop str_value1, typeArrayOop str_value2);
206
207 // Conversion between '.' and '/' formats, and allocate a String from the result.
208 static Handle externalize_classname(Symbol* java_name, TRAPS);
209
210 // Conversion
211 static Symbol* as_symbol(oop java_string);
212 static Symbol* as_symbol_or_null(oop java_string);
213
214 // Tester
215 static inline bool is_instance(oop obj);
216 static inline bool is_instance_without_asserts(oop obj);
217
218 // Debugging
219 static void print(oop java_string, outputStream* st, int max_length = MaxStringPrintSize);
220 friend class JavaClasses;
221 friend class StringTable;
222 };
223
224
225 // Interface to java.lang.Class objects
226
227 #define CLASS_INJECTED_FIELDS(macro) \
228 macro(java_lang_Class, klass, intptr_signature, false) \
229 macro(java_lang_Class, array_klass, intptr_signature, false) \
230 macro(java_lang_Class, oop_size, int_signature, false) \
231 macro(java_lang_Class, static_oop_field_count, int_signature, false) \
232 macro(java_lang_Class, source_file, object_signature, false) \
233 macro(java_lang_Class, init_lock, object_signature, false)
234
235 class java_lang_Class : AllStatic {
236 friend class VMStructs;
237 friend class JVMCIVMStructs;
238 friend class HeapShared;
239
240 private:
241
242 // The fake offsets are added by the class loader when java.lang.Class is loaded
243
244 static int _klass_offset;
245 static int _array_klass_offset;
246
247 static int _oop_size_offset;
248 static int _static_oop_field_count_offset;
249
250 static int _protection_domain_offset;
251 static int _init_lock_offset;
252 static int _signers_offset;
253 static int _class_loader_offset;
254 static int _module_offset;
255 static int _component_mirror_offset;
256
257 static int _name_offset;
258 static int _source_file_offset;
259 static int _classData_offset;
260 static int _classRedefinedCount_offset;
261 static int _reflectionData_offset;
262 static int _modifiers_offset;
263 static int _is_primitive_offset;
264 static int _is_identity_offset;
265 static int _raw_access_flags_offset;
266
267 static bool _offsets_computed;
268
269 static GrowableArray<Klass*>* _fixup_mirror_list;
270 static GrowableArray<Klass*>* _fixup_module_field_list;
271
272 static void set_init_lock(oop java_class, oop init_lock);
273 static void set_protection_domain(oop java_class, oop protection_domain);
274 static void set_class_loader(oop java_class, oop class_loader);
275 static void set_component_mirror(oop java_class, oop comp_mirror);
276 static void initialize_mirror_fields(InstanceKlass* ik, Handle mirror, Handle protection_domain,
277 Handle classData, TRAPS);
278 static void set_mirror_module_field(JavaThread* current, Klass* K, Handle mirror, Handle module);
279 static void set_is_identity(oop java_class, bool value);
280
281 static void set_modifiers(oop java_class, u2 value);
282 static void set_raw_access_flags(oop java_class, u2 value);
283 static void set_is_primitive(oop java_class);
284 static void release_set_array_klass(oop java_class, Klass* klass);
285
286 public:
287 static void allocate_fixup_lists();
288 static void compute_offsets();
289
290 // Instance creation
291 static void allocate_mirror(Klass* k, bool is_scratch, Handle protection_domain, Handle classData,
292 Handle& mirror, Handle& comp_mirror, TRAPS); // returns mirror and comp_mirror
293 static void create_mirror(Klass* k, Handle class_loader, Handle module,
294 Handle protection_domain, Handle classData, TRAPS);
295 static void fixup_mirror(Klass* k, TRAPS);
296 static oop create_basic_type_mirror(const char* basic_type_name, BasicType type, TRAPS);
297
298 // Archiving
299 static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
307 // Conversion -- java_class must not be null. The return value is null only if java_class is a primitive type.
308 static Klass* as_Klass(oop java_class);
309 static InstanceKlass* as_InstanceKlass(oop java_class);
310
311 static void set_klass(oop java_class, Klass* klass);
312 static BasicType as_BasicType(oop java_class, Klass** reference_klass = nullptr);
313 static Symbol* as_signature(oop java_class, bool intern_if_not_found);
314 static void print_signature(oop java_class, outputStream *st);
315 static const char* as_external_name(oop java_class);
316 // Testing
317 static bool is_instance(oop obj);
318
319 static bool is_primitive(oop java_class);
320 static BasicType primitive_type(oop java_class);
321 static oop primitive_mirror(BasicType t);
322 static Klass* array_klass_acquire(oop java_class);
323
324 // compiler support for class operations
325 static int klass_offset() { CHECK_INIT(_klass_offset); }
326 static int array_klass_offset() { CHECK_INIT(_array_klass_offset); }
327
328 // Support for classRedefinedCount field
329 static int classRedefinedCount(oop the_class_mirror);
330 static void set_classRedefinedCount(oop the_class_mirror, int value);
331
332 // Support for embedded per-class oops
333 static oop protection_domain(oop java_class);
334 static oop init_lock(oop java_class);
335 static void clear_init_lock(oop java_class) {
336 set_init_lock(java_class, nullptr);
337 }
338 static oop component_mirror(oop java_class);
339 static int component_mirror_offset() { return _component_mirror_offset; }
340 static objArrayOop signers(oop java_class);
341 static oop class_data(oop java_class);
342 static void set_class_data(oop java_class, oop classData);
343 static int reflection_data_offset() { return _reflectionData_offset; }
344
345 static oop class_loader(oop java_class);
346 static void set_module(oop java_class, oop module);
347 static oop module(oop java_class);
822 static void set_signature(oop constructor, oop value);
823 static void set_annotations(oop constructor, oop value);
824 static void set_parameter_annotations(oop method, oop value);
825
826 // Debugging
827 friend class JavaClasses;
828 };
829
830
831 // Interface to java.lang.reflect.Field objects
832
833 class java_lang_reflect_Field : public java_lang_reflect_AccessibleObject {
834 private:
835 // Note that to reduce dependencies on the JDK we compute these
836 // offsets at run-time.
837 static int _clazz_offset;
838 static int _name_offset;
839 static int _type_offset;
840 static int _slot_offset;
841 static int _modifiers_offset;
842 static int _flags_offset;
843 static int _signature_offset;
844 static int _annotations_offset;
845
846 static void compute_offsets();
847
848 public:
849 static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
850
851 // Allocation
852 static Handle create(TRAPS);
853
854 // Accessors
855 static oop clazz(oop reflect);
856 static void set_clazz(oop reflect, oop value);
857
858 static oop name(oop field);
859 static void set_name(oop field, oop value);
860
861 static oop type(oop field);
862 static void set_type(oop field, oop value);
863
864 static int slot(oop reflect);
865 static void set_slot(oop reflect, int value);
866
867 static int modifiers(oop field);
868 static void set_modifiers(oop field, int value);
869
870 static void set_flags(oop field, int value);
871
872 static void set_signature(oop constructor, oop value);
873 static void set_annotations(oop constructor, oop value);
874
875 // Debugging
876 friend class JavaClasses;
877 };
878
879 class java_lang_reflect_Parameter {
880 private:
881 // Note that to reduce dependencies on the JDK we compute these
882 // offsets at run-time.
883 static int _name_offset;
884 static int _modifiers_offset;
885 static int _index_offset;
886 static int _executable_offset;
887
888 static void compute_offsets();
889
890 public:
972
973 // Debugging
974 friend class JavaClasses;
975 };
976
977
978 // Interface to java.lang primitive type boxing objects:
979 // - java.lang.Boolean
980 // - java.lang.Character
981 // - java.lang.Float
982 // - java.lang.Double
983 // - java.lang.Byte
984 // - java.lang.Short
985 // - java.lang.Integer
986 // - java.lang.Long
987
988 // This could be separated out into 8 individual classes.
989
990 class java_lang_boxing_object: AllStatic {
991 private:
992 static int* _offsets;
993
994 static void compute_offsets();
995 static oop initialize_and_allocate(BasicType type, TRAPS);
996 public:
997 // Allocation. Returns a boxed value, or null for invalid type.
998 static oop create(BasicType type, jvalue* value, TRAPS);
999 // Accessors. Returns the basic type being boxed, or T_ILLEGAL for invalid oop.
1000 static BasicType get_value(oop box, jvalue* value);
1001 static BasicType set_value(oop box, jvalue* value);
1002 static BasicType basic_type(oop box);
1003 static bool is_instance(oop box) { return basic_type(box) != T_ILLEGAL; }
1004 static bool is_instance(oop box, BasicType type) { return basic_type(box) == type; }
1005 static void print(oop box, outputStream* st) { jvalue value; print(get_value(box, &value), &value, st); }
1006 static void print(BasicType type, jvalue* value, outputStream* st);
1007
1008 static int value_offset(BasicType type) {
1009 assert(type >= T_BOOLEAN && type <= T_LONG, "BasicType out of range");
1010 assert(_offsets != nullptr, "Uninitialized offsets");
1011 return _offsets[type - T_BOOLEAN];
1012 }
1013
1014 static void serialize_offsets(SerializeClosure* f);
1015
1016 // Debugging
1017 friend class JavaClasses;
1018 };
1019
1020
1021
1022 // Interface to java.lang.ref.Reference objects
1023
1024 class java_lang_ref_Reference: AllStatic {
1025 static int _referent_offset;
1026 static int _queue_offset;
1027 static int _next_offset;
1028 static int _discovered_offset;
1029
1030 static bool _offsets_initialized;
1031
1353 static void set_flags(oop mname, int flags);
1354
1355 // Link through ResolvedMethodName field to get Method*
1356 static Method* vmtarget(oop mname);
1357 static void set_method(oop mname, oop method);
1358
1359 static intptr_t vmindex(oop mname);
1360 static void set_vmindex(oop mname, intptr_t index);
1361
1362 // Testers
1363 static bool is_subclass(Klass* klass) {
1364 return klass->is_subclass_of(vmClasses::MemberName_klass());
1365 }
1366 static bool is_instance(oop obj);
1367
1368 static bool is_method(oop obj);
1369
1370 // Relevant integer codes (keep these in synch. with MethodHandleNatives.Constants):
1371 enum {
1372 MN_IS_METHOD = 0x00010000, // method (not constructor)
1373 MN_IS_OBJECT_CONSTRUCTOR = 0x00020000, // constructor
1374 MN_IS_FIELD = 0x00040000, // field
1375 MN_IS_TYPE = 0x00080000, // nested type
1376 MN_CALLER_SENSITIVE = 0x00100000, // @CallerSensitive annotation detected
1377 MN_TRUSTED_FINAL = 0x00200000, // trusted final field
1378 MN_HIDDEN_MEMBER = 0x00400000, // @Hidden annotation detected
1379 MN_NULL_RESTRICTED_FIELD = 0x00800000, // null-restricted field
1380 MN_REFERENCE_KIND_SHIFT = 24, // refKind
1381 MN_REFERENCE_KIND_MASK = 0x0F000000 >> MN_REFERENCE_KIND_SHIFT, // 4 bits
1382 MN_LAYOUT_SHIFT = 28, // field layout
1383 MN_LAYOUT_MASK = 0x70000000 >> MN_LAYOUT_SHIFT, // 3 bits
1384 MN_NESTMATE_CLASS = 0x00000001,
1385 MN_HIDDEN_CLASS = 0x00000002,
1386 MN_STRONG_LOADER_LINK = 0x00000004,
1387 MN_ACCESS_VM_ANNOTATIONS = 0x00000008,
1388 // Lookup modes
1389 MN_MODULE_MODE = 0x00000010,
1390 MN_UNCONDITIONAL_MODE = 0x00000020,
1391 MN_TRUSTED_MODE = -1
1392 };
1393
1394 // Accessors for code generation:
1395 static int clazz_offset() { CHECK_INIT(_clazz_offset); }
1396 static int type_offset() { CHECK_INIT(_type_offset); }
1397 static int flags_offset() { CHECK_INIT(_flags_offset); }
1398 static int method_offset() { CHECK_INIT(_method_offset); }
1399 static int vmindex_offset() { CHECK_INIT(_vmindex_offset); }
1400 };
1401
1402
1403 // Interface to java.lang.invoke.MethodType objects
1867 class java_lang_Short_ShortCache : AllStatic {
1868 private:
1869 static int _static_cache_offset;
1870 public:
1871 static Symbol* symbol();
1872 static void compute_offsets(InstanceKlass* k);
1873 static objArrayOop cache(InstanceKlass *k);
1874 static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1875 };
1876
1877 class java_lang_Byte_ByteCache : AllStatic {
1878 private:
1879 static int _static_cache_offset;
1880 public:
1881 static Symbol* symbol();
1882 static void compute_offsets(InstanceKlass* k);
1883 static objArrayOop cache(InstanceKlass *k);
1884 static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1885 };
1886
1887 // Interface to java.lang.InternalError objects
1888
1889 #define INTERNALERROR_INJECTED_FIELDS(macro) \
1890 macro(java_lang_InternalError, during_unsafe_access, bool_signature, false)
1891
1892 class java_lang_InternalError : AllStatic {
1893 private:
1894 static int _during_unsafe_access_offset;
1895 public:
1896 static jboolean during_unsafe_access(oop internal_error);
1897 static void set_during_unsafe_access(oop internal_error);
1898 static void compute_offsets();
1899 static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1900 };
1901
1902 // Use to declare fields that need to be injected into Java classes
1903 // for the JVM to use. The name_index and signature_index are
1904 // declared in vmSymbols. The may_be_java flag is used to declare
1905 // fields that might already exist in Java but should be injected if
1906 // they don't. Otherwise the field is unconditionally injected and
|