< prev index next >

src/hotspot/share/classfile/javaClasses.hpp

Print this page

 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);

 299   static InstanceKlass* as_InstanceKlass(oop java_class);
 300 
 301   static void set_klass(oop java_class, Klass* klass);
 302   static BasicType as_BasicType(oop java_class, Klass** reference_klass = nullptr);
 303   static Symbol* as_signature(oop java_class, bool intern_if_not_found);
 304   static void print_signature(oop java_class, outputStream *st);
 305   static const char* as_external_name(oop java_class);
 306   // Testing
 307   static bool is_instance(oop obj);
 308 
 309   static bool is_primitive(oop java_class);
 310   static void set_is_primitive(oop java_class);
 311   static BasicType primitive_type(oop java_class);
 312   static oop primitive_mirror(BasicType t);
 313   // JVM_NewArray support
 314   static Klass* array_klass_acquire(oop java_class);
 315   static void release_set_array_klass(oop java_class, Klass* klass);
 316   // compiler support for class operations
 317   static int klass_offset()                { CHECK_INIT(_klass_offset); }
 318   static int array_klass_offset()          { CHECK_INIT(_array_klass_offset); }

 319   // Support for classRedefinedCount field
 320   static int classRedefinedCount(oop the_class_mirror);
 321   static void set_classRedefinedCount(oop the_class_mirror, int value);
 322 
 323   // Support for embedded per-class oops
 324   static oop  protection_domain(oop java_class);
 325   static oop  init_lock(oop java_class);
 326   static void clear_init_lock(oop java_class) {
 327     set_init_lock(java_class, nullptr);
 328   }
 329   static oop  component_mirror(oop java_class);
 330   static int component_mirror_offset() { return _component_mirror_offset; }
 331   static objArrayOop signers(oop java_class);
 332   static oop  class_data(oop java_class);
 333   static void set_class_data(oop java_class, oop classData);
 334   static void set_reflection_data(oop java_class, oop reflection_data);
 335   static int reflection_data_offset() { return _reflectionData_offset; }
 336 
 337   static oop class_loader(oop java_class);
 338   static void set_module(oop java_class, oop module);

 813   static void set_signature(oop constructor, oop value);
 814   static void set_annotations(oop constructor, oop value);
 815   static void set_parameter_annotations(oop method, oop value);
 816 
 817   // Debugging
 818   friend class JavaClasses;
 819 };
 820 
 821 
 822 // Interface to java.lang.reflect.Field objects
 823 
 824 class java_lang_reflect_Field : public java_lang_reflect_AccessibleObject {
 825  private:
 826   // Note that to reduce dependencies on the JDK we compute these
 827   // offsets at run-time.
 828   static int _clazz_offset;
 829   static int _name_offset;
 830   static int _type_offset;
 831   static int _slot_offset;
 832   static int _modifiers_offset;
 833   static int _trusted_final_offset;
 834   static int _signature_offset;
 835   static int _annotations_offset;
 836 
 837   static void compute_offsets();
 838 
 839  public:
 840   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
 841 
 842   // Allocation
 843   static Handle create(TRAPS);
 844 
 845   // Accessors
 846   static oop clazz(oop reflect);
 847   static void set_clazz(oop reflect, oop value);
 848 
 849   static oop name(oop field);
 850   static void set_name(oop field, oop value);
 851 
 852   static oop type(oop field);
 853   static void set_type(oop field, oop value);
 854 
 855   static int slot(oop reflect);
 856   static void set_slot(oop reflect, int value);
 857 
 858   static int modifiers(oop field);
 859   static void set_modifiers(oop field, int value);
 860 
 861   static void set_trusted_final(oop field);
 862 
 863   static void set_signature(oop constructor, oop value);
 864   static void set_annotations(oop constructor, oop value);
 865 
 866   // Debugging
 867   friend class JavaClasses;
 868 };
 869 
 870 class java_lang_reflect_Parameter {
 871  private:
 872   // Note that to reduce dependencies on the JDK we compute these
 873   // offsets at run-time.
 874   static int _name_offset;
 875   static int _modifiers_offset;
 876   static int _index_offset;
 877   static int _executable_offset;
 878 
 879   static void compute_offsets();
 880 
 881  public:

 963 
 964   // Debugging
 965   friend class JavaClasses;
 966 };
 967 
 968 
 969 // Interface to java.lang primitive type boxing objects:
 970 //  - java.lang.Boolean
 971 //  - java.lang.Character
 972 //  - java.lang.Float
 973 //  - java.lang.Double
 974 //  - java.lang.Byte
 975 //  - java.lang.Short
 976 //  - java.lang.Integer
 977 //  - java.lang.Long
 978 
 979 // This could be separated out into 8 individual classes.
 980 
 981 class java_lang_boxing_object: AllStatic {
 982  private:
 983   static int _value_offset;
 984   static int _long_value_offset;
 985 
 986   static void compute_offsets();
 987   static oop initialize_and_allocate(BasicType type, TRAPS);
 988  public:
 989   // Allocation. Returns a boxed value, or null for invalid type.
 990   static oop create(BasicType type, jvalue* value, TRAPS);
 991   // Accessors. Returns the basic type being boxed, or T_ILLEGAL for invalid oop.
 992   static BasicType get_value(oop box, jvalue* value);
 993   static BasicType set_value(oop box, jvalue* value);
 994   static BasicType basic_type(oop box);
 995   static bool is_instance(oop box)                 { return basic_type(box) != T_ILLEGAL; }
 996   static bool is_instance(oop box, BasicType type) { return basic_type(box) == type; }
 997   static void print(oop box, outputStream* st)     { jvalue value;  print(get_value(box, &value), &value, st); }
 998   static void print(BasicType type, jvalue* value, outputStream* st);
 999 
1000   static int value_offset(BasicType type) {
1001     return is_double_word_type(type) ? _long_value_offset : _value_offset;


1002   }
1003 
1004   static void serialize_offsets(SerializeClosure* f);
1005 
1006   // Debugging
1007   friend class JavaClasses;
1008 };
1009 
1010 
1011 
1012 // Interface to java.lang.ref.Reference objects
1013 
1014 class java_lang_ref_Reference: AllStatic {
1015   static int _referent_offset;
1016   static int _queue_offset;
1017   static int _next_offset;
1018   static int _discovered_offset;
1019 
1020   static bool _offsets_initialized;
1021 

1343   static void       set_flags(oop mname, int flags);
1344 
1345   // Link through ResolvedMethodName field to get Method*
1346   static Method*        vmtarget(oop mname);
1347   static void       set_method(oop mname, oop method);
1348 
1349   static intptr_t       vmindex(oop mname);
1350   static void       set_vmindex(oop mname, intptr_t index);
1351 
1352   // Testers
1353   static bool is_subclass(Klass* klass) {
1354     return klass->is_subclass_of(vmClasses::MemberName_klass());
1355   }
1356   static bool is_instance(oop obj);
1357 
1358   static bool is_method(oop obj);
1359 
1360   // Relevant integer codes (keep these in synch. with MethodHandleNatives.Constants):
1361   enum {
1362     MN_IS_METHOD             = 0x00010000, // method (not constructor)
1363     MN_IS_CONSTRUCTOR        = 0x00020000, // constructor
1364     MN_IS_FIELD              = 0x00040000, // field
1365     MN_IS_TYPE               = 0x00080000, // nested type
1366     MN_CALLER_SENSITIVE      = 0x00100000, // @CallerSensitive annotation detected
1367     MN_TRUSTED_FINAL         = 0x00200000, // trusted final field
1368     MN_HIDDEN_MEMBER         = 0x00400000, // @Hidden annotation detected

1369     MN_REFERENCE_KIND_SHIFT  = 24, // refKind
1370     MN_REFERENCE_KIND_MASK   = 0x0F000000 >> MN_REFERENCE_KIND_SHIFT,


1371     MN_NESTMATE_CLASS        = 0x00000001,
1372     MN_HIDDEN_CLASS          = 0x00000002,
1373     MN_STRONG_LOADER_LINK    = 0x00000004,
1374     MN_ACCESS_VM_ANNOTATIONS = 0x00000008,
1375     // Lookup modes
1376     MN_MODULE_MODE           = 0x00000010,
1377     MN_UNCONDITIONAL_MODE    = 0x00000020,
1378     MN_TRUSTED_MODE          = -1
1379   };
1380 
1381   // Accessors for code generation:
1382   static int clazz_offset()   { CHECK_INIT(_clazz_offset); }
1383   static int type_offset()    { CHECK_INIT(_type_offset); }
1384   static int flags_offset()   { CHECK_INIT(_flags_offset); }
1385   static int method_offset()  { CHECK_INIT(_method_offset); }
1386   static int vmindex_offset() { CHECK_INIT(_vmindex_offset); }
1387 };
1388 
1389 
1390 // Interface to java.lang.invoke.MethodType objects

1854 class java_lang_Short_ShortCache : AllStatic {
1855  private:
1856   static int _static_cache_offset;
1857  public:
1858   static Symbol* symbol();
1859   static void compute_offsets(InstanceKlass* k);
1860   static objArrayOop  cache(InstanceKlass *k);
1861   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1862 };
1863 
1864 class java_lang_Byte_ByteCache : AllStatic {
1865  private:
1866   static int _static_cache_offset;
1867  public:
1868   static Symbol* symbol();
1869   static void compute_offsets(InstanceKlass* k);
1870   static objArrayOop  cache(InstanceKlass *k);
1871   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1872 };
1873 
1874 
1875 // Interface to java.lang.InternalError objects
1876 
1877 #define INTERNALERROR_INJECTED_FIELDS(macro)                      \
1878   macro(java_lang_InternalError, during_unsafe_access, bool_signature, false)
1879 
1880 class java_lang_InternalError : AllStatic {
1881  private:
1882   static int _during_unsafe_access_offset;
1883  public:
1884   static jboolean during_unsafe_access(oop internal_error);
1885   static void set_during_unsafe_access(oop internal_error);
1886   static void compute_offsets();
1887   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1888 };
1889 
1890 // Use to declare fields that need to be injected into Java classes
1891 // for the JVM to use.  The name_index and signature_index are
1892 // declared in vmSymbols.  The may_be_java flag is used to declare
1893 // fields that might already exist in Java but should be injected if
1894 // 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 _raw_access_flags_offset;
 265 
 266   static bool _offsets_computed;
 267 
 268   static GrowableArray<Klass*>* _fixup_mirror_list;
 269   static GrowableArray<Klass*>* _fixup_module_field_list;
 270 
 271   static void set_init_lock(oop java_class, oop init_lock);
 272   static void set_protection_domain(oop java_class, oop protection_domain);
 273   static void set_class_loader(oop java_class, oop class_loader);
 274   static void set_component_mirror(oop java_class, oop comp_mirror);
 275   static void initialize_mirror_fields(InstanceKlass* ik, Handle mirror, Handle protection_domain,
 276                                        Handle classData, TRAPS);

 301   static InstanceKlass* as_InstanceKlass(oop java_class);
 302 
 303   static void set_klass(oop java_class, Klass* klass);
 304   static BasicType as_BasicType(oop java_class, Klass** reference_klass = nullptr);
 305   static Symbol* as_signature(oop java_class, bool intern_if_not_found);
 306   static void print_signature(oop java_class, outputStream *st);
 307   static const char* as_external_name(oop java_class);
 308   // Testing
 309   static bool is_instance(oop obj);
 310 
 311   static bool is_primitive(oop java_class);
 312   static void set_is_primitive(oop java_class);
 313   static BasicType primitive_type(oop java_class);
 314   static oop primitive_mirror(BasicType t);
 315   // JVM_NewArray support
 316   static Klass* array_klass_acquire(oop java_class);
 317   static void release_set_array_klass(oop java_class, Klass* klass);
 318   // compiler support for class operations
 319   static int klass_offset()                { CHECK_INIT(_klass_offset); }
 320   static int array_klass_offset()          { CHECK_INIT(_array_klass_offset); }
 321 
 322   // Support for classRedefinedCount field
 323   static int classRedefinedCount(oop the_class_mirror);
 324   static void set_classRedefinedCount(oop the_class_mirror, int value);
 325 
 326   // Support for embedded per-class oops
 327   static oop  protection_domain(oop java_class);
 328   static oop  init_lock(oop java_class);
 329   static void clear_init_lock(oop java_class) {
 330     set_init_lock(java_class, nullptr);
 331   }
 332   static oop  component_mirror(oop java_class);
 333   static int component_mirror_offset() { return _component_mirror_offset; }
 334   static objArrayOop signers(oop java_class);
 335   static oop  class_data(oop java_class);
 336   static void set_class_data(oop java_class, oop classData);
 337   static void set_reflection_data(oop java_class, oop reflection_data);
 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);

 816   static void set_signature(oop constructor, oop value);
 817   static void set_annotations(oop constructor, oop value);
 818   static void set_parameter_annotations(oop method, oop value);
 819 
 820   // Debugging
 821   friend class JavaClasses;
 822 };
 823 
 824 
 825 // Interface to java.lang.reflect.Field objects
 826 
 827 class java_lang_reflect_Field : public java_lang_reflect_AccessibleObject {
 828  private:
 829   // Note that to reduce dependencies on the JDK we compute these
 830   // offsets at run-time.
 831   static int _clazz_offset;
 832   static int _name_offset;
 833   static int _type_offset;
 834   static int _slot_offset;
 835   static int _modifiers_offset;
 836   static int _flags_offset;
 837   static int _signature_offset;
 838   static int _annotations_offset;
 839 
 840   static void compute_offsets();
 841 
 842  public:
 843   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
 844 
 845   // Allocation
 846   static Handle create(TRAPS);
 847 
 848   // Accessors
 849   static oop clazz(oop reflect);
 850   static void set_clazz(oop reflect, oop value);
 851 
 852   static oop name(oop field);
 853   static void set_name(oop field, oop value);
 854 
 855   static oop type(oop field);
 856   static void set_type(oop field, oop value);
 857 
 858   static int slot(oop reflect);
 859   static void set_slot(oop reflect, int value);
 860 
 861   static int modifiers(oop field);
 862   static void set_modifiers(oop field, int value);
 863 
 864   static void set_flags(oop field, int value);
 865 
 866   static void set_signature(oop constructor, oop value);
 867   static void set_annotations(oop constructor, oop value);
 868 
 869   // Debugging
 870   friend class JavaClasses;
 871 };
 872 
 873 class java_lang_reflect_Parameter {
 874  private:
 875   // Note that to reduce dependencies on the JDK we compute these
 876   // offsets at run-time.
 877   static int _name_offset;
 878   static int _modifiers_offset;
 879   static int _index_offset;
 880   static int _executable_offset;
 881 
 882   static void compute_offsets();
 883 
 884  public:

 966 
 967   // Debugging
 968   friend class JavaClasses;
 969 };
 970 
 971 
 972 // Interface to java.lang primitive type boxing objects:
 973 //  - java.lang.Boolean
 974 //  - java.lang.Character
 975 //  - java.lang.Float
 976 //  - java.lang.Double
 977 //  - java.lang.Byte
 978 //  - java.lang.Short
 979 //  - java.lang.Integer
 980 //  - java.lang.Long
 981 
 982 // This could be separated out into 8 individual classes.
 983 
 984 class java_lang_boxing_object: AllStatic {
 985  private:
 986   static int* _offsets;

 987 
 988   static void compute_offsets();
 989   static oop initialize_and_allocate(BasicType type, TRAPS);
 990  public:
 991   // Allocation. Returns a boxed value, or null for invalid type.
 992   static oop create(BasicType type, jvalue* value, TRAPS);
 993   // Accessors. Returns the basic type being boxed, or T_ILLEGAL for invalid oop.
 994   static BasicType get_value(oop box, jvalue* value);
 995   static BasicType set_value(oop box, jvalue* value);
 996   static BasicType basic_type(oop box);
 997   static bool is_instance(oop box)                 { return basic_type(box) != T_ILLEGAL; }
 998   static bool is_instance(oop box, BasicType type) { return basic_type(box) == type; }
 999   static void print(oop box, outputStream* st)     { jvalue value;  print(get_value(box, &value), &value, st); }
1000   static void print(BasicType type, jvalue* value, outputStream* st);
1001 
1002   static int value_offset(BasicType type) {
1003     assert(type >= T_BOOLEAN && type <= T_LONG, "BasicType out of range");
1004     assert(_offsets != nullptr, "Uninitialized offsets");
1005     return _offsets[type - T_BOOLEAN];
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_OBJECT_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_NULL_RESTRICTED_FIELD = 0x00800000, // null-restricted field
1374     MN_REFERENCE_KIND_SHIFT  = 24, // refKind
1375     MN_REFERENCE_KIND_MASK   = 0x0F000000 >> MN_REFERENCE_KIND_SHIFT, // 4 bits
1376     MN_LAYOUT_SHIFT          = 28, // field layout
1377     MN_LAYOUT_MASK           = 0x70000000 >> MN_LAYOUT_SHIFT, // 3 bits
1378     MN_NESTMATE_CLASS        = 0x00000001,
1379     MN_HIDDEN_CLASS          = 0x00000002,
1380     MN_STRONG_LOADER_LINK    = 0x00000004,
1381     MN_ACCESS_VM_ANNOTATIONS = 0x00000008,
1382     // Lookup modes
1383     MN_MODULE_MODE           = 0x00000010,
1384     MN_UNCONDITIONAL_MODE    = 0x00000020,
1385     MN_TRUSTED_MODE          = -1
1386   };
1387 
1388   // Accessors for code generation:
1389   static int clazz_offset()   { CHECK_INIT(_clazz_offset); }
1390   static int type_offset()    { CHECK_INIT(_type_offset); }
1391   static int flags_offset()   { CHECK_INIT(_flags_offset); }
1392   static int method_offset()  { CHECK_INIT(_method_offset); }
1393   static int vmindex_offset() { CHECK_INIT(_vmindex_offset); }
1394 };
1395 
1396 
1397 // Interface to java.lang.invoke.MethodType objects

1861 class java_lang_Short_ShortCache : AllStatic {
1862  private:
1863   static int _static_cache_offset;
1864  public:
1865   static Symbol* symbol();
1866   static void compute_offsets(InstanceKlass* k);
1867   static objArrayOop  cache(InstanceKlass *k);
1868   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1869 };
1870 
1871 class java_lang_Byte_ByteCache : AllStatic {
1872  private:
1873   static int _static_cache_offset;
1874  public:
1875   static Symbol* symbol();
1876   static void compute_offsets(InstanceKlass* k);
1877   static objArrayOop  cache(InstanceKlass *k);
1878   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1879 };
1880 

1881 // Interface to java.lang.InternalError objects
1882 
1883 #define INTERNALERROR_INJECTED_FIELDS(macro)                      \
1884   macro(java_lang_InternalError, during_unsafe_access, bool_signature, false)
1885 
1886 class java_lang_InternalError : AllStatic {
1887  private:
1888   static int _during_unsafe_access_offset;
1889  public:
1890   static jboolean during_unsafe_access(oop internal_error);
1891   static void set_during_unsafe_access(oop internal_error);
1892   static void compute_offsets();
1893   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1894 };
1895 
1896 // Use to declare fields that need to be injected into Java classes
1897 // for the JVM to use.  The name_index and signature_index are
1898 // declared in vmSymbols.  The may_be_java flag is used to declare
1899 // fields that might already exist in Java but should be injected if
1900 // they don't.  Otherwise the field is unconditionally injected and
< prev index next >