< prev index next >

src/hotspot/share/classfile/javaClasses.hpp

Print this page

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

 643     trace_hidden_offset  = 6,
 644     trace_size           = 7,
 645     trace_chunk_size     = 32
 646   };
 647 
 648   static int _backtrace_offset;
 649   static int _detailMessage_offset;
 650   static int _stackTrace_offset;
 651   static int _depth_offset;
 652   static int _cause_offset;
 653   static int _static_unassigned_stacktrace_offset;
 654 
 655   // StackTrace (programmatic access, new since 1.4)
 656   static void clear_stacktrace(oop throwable);
 657   // Stacktrace (post JDK 1.7.0 to allow immutability protocol to be followed)
 658   static void set_stacktrace(oop throwable, oop st_element_array);
 659   static oop unassigned_stacktrace();
 660 
 661  public:
 662   // Backtrace
 663   static oop backtrace(oop throwable);
 664   static void set_backtrace(oop throwable, oop value);
 665   static int depth(oop throwable);
 666   static void set_depth(oop throwable, int value);
 667   // Message
 668   static int get_detailMessage_offset() { CHECK_INIT(_detailMessage_offset); }
 669   static oop message(oop throwable);
 670   static const char* message_as_utf8(oop throwable);
 671   static void set_message(oop throwable, oop value);
 672 
 673   static oop cause(oop throwable);
 674 
 675   static void print_stack_element(outputStream *st, Method* method, int bci);
 676 
 677   static void compute_offsets();
 678   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
 679 
 680   // Allocate space for backtrace (created but stack trace not filled in)
 681   static void allocate_backtrace(Handle throwable, TRAPS);
 682   // Fill in current stack trace for throwable with preallocated backtrace (no GC)
 683   static void fill_in_stack_trace_of_preallocated_backtrace(Handle throwable);
 684   // Fill in current stack trace, can cause GC
 685   static void fill_in_stack_trace(Handle throwable, const methodHandle& method, TRAPS);
 686   static void fill_in_stack_trace(Handle throwable, const methodHandle& method = methodHandle());
 687 
 688   // Programmatic access to stack trace
 689   static void get_stack_trace_elements(int depth, Handle backtrace, objArrayHandle stack_trace, TRAPS);
 690 
 691   // For recreating class initialization error exceptions.
 692   static Handle create_initialization_error(JavaThread* current, Handle throwable);
 693 
 694   // Printing
 695   static void print(oop throwable, outputStream* st);
 696   static void print_stack_trace(Handle throwable, outputStream* st);
 697   static void java_printStackTrace(Handle throwable, TRAPS);
 698   // Debugging
 699   friend class JavaClasses;
 700   // Gets the method and bci of the top frame (TOS). Returns false if this failed.
 701   static bool get_top_method_and_bci(oop throwable, Method** method, int* bci);
 702 };
 703 
 704 
 705 // Interface to java.lang.reflect.AccessibleObject objects
 706 
 707 class java_lang_reflect_AccessibleObject: AllStatic {
 708  private:
 709   // Note that to reduce dependencies on the JDK we compute these

 817   // Debugging
 818   friend class JavaClasses;
 819 };
 820 
 821 #if INCLUDE_JFR
 822 #define FIELD_INJECTED_FIELDS(macro) \
 823   macro(java_lang_reflect_Field, jfr_epoch, int_signature, false)
 824 #endif // INCLUDE_JFR
 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   JFR_ONLY(static int _jfr_epoch_offset;)
 841 
 842   static void compute_offsets();
 843 
 844  public:
 845   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
 846 
 847   // Allocation
 848   static Handle create(TRAPS);
 849 
 850   // Accessors
 851   static oop clazz(oop reflect);
 852   static void set_clazz(oop reflect, oop value);
 853 
 854   static oop name(oop field);
 855   static void set_name(oop field, oop value);
 856 
 857   static oop type(oop field);
 858   static void set_type(oop field, oop value);
 859 
 860   static int slot(oop reflect);
 861   static void set_slot(oop reflect, int value);
 862 
 863   static int modifiers(oop field);
 864   static void set_modifiers(oop field, int value);
 865 
 866   static void set_trusted_final(oop field);
 867 
 868   static void set_signature(oop constructor, oop value);
 869   static void set_annotations(oop constructor, oop value);
 870 
 871   JFR_ONLY(static u2 epoch(oop field);)
 872   JFR_ONLY(static int epoch_offset() { CHECK_INIT(_jfr_epoch_offset); })
 873 
 874   // Debugging
 875   friend class JavaClasses;
 876 };
 877 
 878 class java_lang_reflect_Parameter {
 879  private:
 880   // Note that to reduce dependencies on the JDK we compute these
 881   // offsets at run-time.
 882   static int _name_offset;
 883   static int _modifiers_offset;
 884   static int _index_offset;
 885   static int _executable_offset;
 886 

 971 
 972   // Debugging
 973   friend class JavaClasses;
 974 };
 975 
 976 
 977 // Interface to java.lang primitive type boxing objects:
 978 //  - java.lang.Boolean
 979 //  - java.lang.Character
 980 //  - java.lang.Float
 981 //  - java.lang.Double
 982 //  - java.lang.Byte
 983 //  - java.lang.Short
 984 //  - java.lang.Integer
 985 //  - java.lang.Long
 986 
 987 // This could be separated out into 8 individual classes.
 988 
 989 class java_lang_boxing_object: AllStatic {
 990  private:
 991   static int _value_offset;
 992   static int _long_value_offset;
 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     return is_double_word_type(type) ? _long_value_offset : _value_offset;


1010   }
1011 
1012   static void serialize_offsets(SerializeClosure* f);
1013 
1014   // Debugging
1015   friend class JavaClasses;
1016 };
1017 
1018 
1019 
1020 // Interface to java.lang.ref.Reference objects
1021 
1022 class java_lang_ref_Reference: AllStatic {
1023   static int _referent_offset;
1024   static int _queue_offset;
1025   static int _next_offset;
1026   static int _discovered_offset;
1027 
1028   static bool _offsets_initialized;
1029 

1189 };
1190 
1191 class jdk_internal_foreign_abi_ABIDescriptor: AllStatic {
1192   friend class JavaClasses;
1193 
1194  private:
1195   static int _inputStorage_offset;
1196   static int _outputStorage_offset;
1197   static int _volatileStorage_offset;
1198   static int _stackAlignment_offset;
1199   static int _shadowSpace_offset;
1200   static int _scratch1_offset;
1201   static int _scratch2_offset;
1202 
1203   static void compute_offsets();
1204 
1205  public:
1206   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1207 
1208   // Accessors
1209   static objArrayOop inputStorage(oop entry);
1210   static objArrayOop outputStorage(oop entry);
1211   static objArrayOop volatileStorage(oop entry);
1212   static jint        stackAlignment(oop entry);
1213   static jint        shadowSpace(oop entry);
1214   static oop         scratch1(oop entry);
1215   static oop         scratch2(oop entry);
1216 };
1217 
1218 class jdk_internal_foreign_abi_VMStorage: AllStatic {
1219   friend class JavaClasses;
1220 
1221  private:
1222   static int _type_offset;
1223   static int _indexOrOffset_offset;
1224   static int _segmentMaskOrSize_offset;
1225   static int _debugName_offset;
1226 
1227   static void compute_offsets();
1228 
1229  public:
1230   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1231 

1239   static bool is_subclass(Klass* klass) {
1240     return vmClasses::VMStorage_klass() != nullptr &&
1241       klass->is_subclass_of(vmClasses::VMStorage_klass());
1242   }
1243   static bool is_instance(oop obj);
1244 };
1245 
1246 class jdk_internal_foreign_abi_CallConv: AllStatic {
1247   friend class JavaClasses;
1248 
1249  private:
1250   static int _argRegs_offset;
1251   static int _retRegs_offset;
1252 
1253   static void compute_offsets();
1254 
1255  public:
1256   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1257 
1258   // Accessors
1259   static objArrayOop argRegs(oop entry);
1260   static objArrayOop retRegs(oop entry);
1261 
1262   // Testers
1263   static bool is_subclass(Klass* klass) {
1264     return vmClasses::CallConv_klass() != nullptr &&
1265       klass->is_subclass_of(vmClasses::CallConv_klass());
1266   }
1267   static bool is_instance(oop obj);
1268 };
1269 
1270 // Interface to java.lang.invoke.MemberName objects
1271 // (These are a private interface for Java code to query the class hierarchy.)
1272 
1273 #define RESOLVEDMETHOD_INJECTED_FIELDS(macro)                                   \
1274   macro(java_lang_invoke_ResolvedMethodName, vmtarget, intptr_signature, false)
1275 
1276 class java_lang_invoke_ResolvedMethodName : AllStatic {
1277   friend class JavaClasses;
1278 
1279   static int _vmtarget_offset;
1280   static int _vmholder_offset;

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

1363     MN_REFERENCE_KIND_SHIFT  = 24, // refKind
1364     MN_REFERENCE_KIND_MASK   = 0x0F000000 >> MN_REFERENCE_KIND_SHIFT,


1365     MN_NESTMATE_CLASS        = 0x00000001,
1366     MN_HIDDEN_CLASS          = 0x00000002,
1367     MN_STRONG_LOADER_LINK    = 0x00000004,
1368     MN_ACCESS_VM_ANNOTATIONS = 0x00000008,
1369     // Lookup modes
1370     MN_MODULE_MODE           = 0x00000010,
1371     MN_UNCONDITIONAL_MODE    = 0x00000020,
1372     MN_TRUSTED_MODE          = -1
1373   };
1374 
1375   // Accessors for code generation:
1376   static int clazz_offset()   { CHECK_INIT(_clazz_offset); }
1377   static int type_offset()    { CHECK_INIT(_type_offset); }
1378   static int flags_offset()   { CHECK_INIT(_flags_offset); }
1379   static int method_offset()  { CHECK_INIT(_method_offset); }
1380   static int vmindex_offset() { CHECK_INIT(_vmindex_offset); }
1381 };
1382 
1383 
1384 // Interface to java.lang.invoke.MethodType objects
1385 
1386 class java_lang_invoke_MethodType: AllStatic {
1387   friend class JavaClasses;
1388 
1389  private:
1390   static int _rtype_offset;
1391   static int _ptypes_offset;
1392 
1393   static void compute_offsets();
1394 
1395  public:
1396   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1397   // Accessors
1398   static oop            rtype(oop mt);
1399   static objArrayOop    ptypes(oop mt);
1400 
1401   static oop            ptype(oop mt, int index);
1402   static int            ptype_count(oop mt);
1403 
1404   static int            ptype_slot_count(oop mt);  // extra counts for long/double
1405   static int            rtype_slot_count(oop mt);  // extra counts for long/double
1406 
1407   static Symbol*        as_signature(oop mt, bool intern_if_not_found);
1408   static void           print_signature(oop mt, outputStream* st);
1409 
1410   static bool is_instance(oop obj);
1411 
1412   static bool equals(oop mt1, oop mt2);
1413 
1414   // Accessors for code generation:
1415   static int rtype_offset()  { CHECK_INIT(_rtype_offset); }
1416   static int ptypes_offset() { CHECK_INIT(_ptypes_offset); }
1417 };
1418 
1419 

1772   }
1773   static bool is_instance(oop obj);
1774 };
1775 
1776 class java_lang_Boolean : AllStatic {
1777  private:
1778   static int _static_TRUE_offset;
1779   static int _static_FALSE_offset;
1780  public:
1781   static Symbol* symbol();
1782   static void compute_offsets(InstanceKlass* k);
1783   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1784 };
1785 
1786 class java_lang_Integer_IntegerCache : AllStatic {
1787  private:
1788   static int _static_cache_offset;
1789  public:
1790   static Symbol* symbol();
1791   static void compute_offsets(InstanceKlass* k);
1792   static objArrayOop  cache(InstanceKlass *k);
1793   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1794 };
1795 
1796 class java_lang_Long_LongCache : AllStatic {
1797  private:
1798   static int _static_cache_offset;
1799  public:
1800   static Symbol* symbol();
1801   static void compute_offsets(InstanceKlass* k);
1802   static objArrayOop  cache(InstanceKlass *k);
1803   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1804 };
1805 
1806 class java_lang_Character_CharacterCache : AllStatic {
1807  private:
1808   static int _static_cache_offset;
1809  public:
1810   static Symbol* symbol();
1811   static void compute_offsets(InstanceKlass* k);
1812   static objArrayOop  cache(InstanceKlass *k);
1813   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1814 };
1815 
1816 class java_lang_Short_ShortCache : AllStatic {
1817  private:
1818   static int _static_cache_offset;
1819  public:
1820   static Symbol* symbol();
1821   static void compute_offsets(InstanceKlass* k);
1822   static objArrayOop  cache(InstanceKlass *k);
1823   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1824 };
1825 
1826 class java_lang_Byte_ByteCache : AllStatic {
1827  private:
1828   static int _static_cache_offset;
1829  public:
1830   static Symbol* symbol();
1831   static void compute_offsets(InstanceKlass* k);
1832   static objArrayOop  cache(InstanceKlass *k);
1833   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1834 };
1835 
1836 
1837 // Interface to java.lang.InternalError objects
1838 
1839 #define INTERNALERROR_INJECTED_FIELDS(macro)                      \
1840   macro(java_lang_InternalError, during_unsafe_access, bool_signature, false)
1841 
1842 class java_lang_InternalError : AllStatic {
1843  private:
1844   static int _during_unsafe_access_offset;
1845  public:
1846   static jboolean during_unsafe_access(oop internal_error);
1847   static void set_during_unsafe_access(oop internal_error);
1848   static void compute_offsets();
1849   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1850 };
1851 
1852 // Use to declare fields that need to be injected into Java classes
1853 // for the JVM to use.  The name_index and signature_index are
1854 // declared in vmSymbols.  The may_be_java flag is used to declare
1855 // fields that might already exist in Java but should be injected if
1856 // they don't.  Otherwise the field is unconditionally injected and

 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 
 324   // Support for classRedefinedCount field
 325   static int classRedefinedCount(oop the_class_mirror);
 326   static void set_classRedefinedCount(oop the_class_mirror, int value);
 327 
 328   // Support for embedded per-class oops
 329   static oop  protection_domain(oop java_class);
 330   static oop  init_lock(oop java_class);
 331   static void clear_init_lock(oop java_class) {
 332     set_init_lock(java_class, nullptr);
 333   }
 334   static oop  component_mirror(oop java_class);
 335   static int component_mirror_offset() { return _component_mirror_offset; }
 336   static objArrayOop signers(oop java_class);
 337   static oop  class_data(oop java_class);
 338   static void set_class_data(oop java_class, oop classData);
 339   static int reflection_data_offset() { return _reflectionData_offset; }
 340 
 341   static oop class_loader(oop java_class);
 342   static void set_module(oop java_class, oop module);
 343   static oop module(oop java_class);

 644     trace_hidden_offset  = 6,
 645     trace_size           = 7,
 646     trace_chunk_size     = 32
 647   };
 648 
 649   static int _backtrace_offset;
 650   static int _detailMessage_offset;
 651   static int _stackTrace_offset;
 652   static int _depth_offset;
 653   static int _cause_offset;
 654   static int _static_unassigned_stacktrace_offset;
 655 
 656   // StackTrace (programmatic access, new since 1.4)
 657   static void clear_stacktrace(oop throwable);
 658   // Stacktrace (post JDK 1.7.0 to allow immutability protocol to be followed)
 659   static void set_stacktrace(oop throwable, oop st_element_array);
 660   static oop unassigned_stacktrace();
 661 
 662  public:
 663   // Backtrace
 664   static refArrayOop backtrace(oop throwable);
 665   static void set_backtrace(oop throwable, refArrayOop value);
 666   static int depth(oop throwable);
 667   static void set_depth(oop throwable, int value);
 668   // Message
 669   static int get_detailMessage_offset() { CHECK_INIT(_detailMessage_offset); }
 670   static oop message(oop throwable);
 671   static const char* message_as_utf8(oop throwable);
 672   static void set_message(oop throwable, oop value);
 673 
 674   static oop cause(oop throwable);
 675 
 676   static void print_stack_element(outputStream *st, Method* method, int bci);
 677 
 678   static void compute_offsets();
 679   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
 680 
 681   // Allocate space for backtrace (created but stack trace not filled in)
 682   static void allocate_backtrace(Handle throwable, TRAPS);
 683   // Fill in current stack trace for throwable with preallocated backtrace (no GC)
 684   static void fill_in_stack_trace_of_preallocated_backtrace(Handle throwable);
 685   // Fill in current stack trace, can cause GC
 686   static void fill_in_stack_trace(Handle throwable, const methodHandle& method, TRAPS);
 687   static void fill_in_stack_trace(Handle throwable, const methodHandle& method = methodHandle());
 688 
 689   // Programmatic access to stack trace
 690   static void get_stack_trace_elements(int depth, Handle backtrace, refArrayHandle stack_trace, TRAPS);
 691 
 692   // For recreating class initialization error exceptions.
 693   static Handle create_initialization_error(JavaThread* current, Handle throwable);
 694 
 695   // Printing
 696   static void print(oop throwable, outputStream* st);
 697   static void print_stack_trace(Handle throwable, outputStream* st);
 698   static void java_printStackTrace(Handle throwable, TRAPS);
 699   // Debugging
 700   friend class JavaClasses;
 701   // Gets the method and bci of the top frame (TOS). Returns false if this failed.
 702   static bool get_top_method_and_bci(oop throwable, Method** method, int* bci);
 703 };
 704 
 705 
 706 // Interface to java.lang.reflect.AccessibleObject objects
 707 
 708 class java_lang_reflect_AccessibleObject: AllStatic {
 709  private:
 710   // Note that to reduce dependencies on the JDK we compute these

 818   // Debugging
 819   friend class JavaClasses;
 820 };
 821 
 822 #if INCLUDE_JFR
 823 #define FIELD_INJECTED_FIELDS(macro) \
 824   macro(java_lang_reflect_Field, jfr_epoch, int_signature, false)
 825 #endif // INCLUDE_JFR
 826 
 827 // Interface to java.lang.reflect.Field objects
 828 
 829 class java_lang_reflect_Field : public java_lang_reflect_AccessibleObject {
 830  private:
 831   // Note that to reduce dependencies on the JDK we compute these
 832   // offsets at run-time.
 833   static int _clazz_offset;
 834   static int _name_offset;
 835   static int _type_offset;
 836   static int _slot_offset;
 837   static int _modifiers_offset;
 838   static int _flags_offset;
 839   static int _signature_offset;
 840   static int _annotations_offset;
 841   JFR_ONLY(static int _jfr_epoch_offset;)
 842 
 843   static void compute_offsets();
 844 
 845  public:
 846   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
 847 
 848   // Allocation
 849   static Handle create(TRAPS);
 850 
 851   // Accessors
 852   static oop clazz(oop reflect);
 853   static void set_clazz(oop reflect, oop value);
 854 
 855   static oop name(oop field);
 856   static void set_name(oop field, oop value);
 857 
 858   static oop type(oop field);
 859   static void set_type(oop field, oop value);
 860 
 861   static int slot(oop reflect);
 862   static void set_slot(oop reflect, int value);
 863 
 864   static int modifiers(oop field);
 865   static void set_modifiers(oop field, int value);
 866 
 867   static void set_flags(oop field, int value);
 868 
 869   static void set_signature(oop constructor, oop value);
 870   static void set_annotations(oop constructor, oop value);
 871 
 872   JFR_ONLY(static u2 epoch(oop field);)
 873   JFR_ONLY(static int epoch_offset() { CHECK_INIT(_jfr_epoch_offset); })
 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 

 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 

1191 };
1192 
1193 class jdk_internal_foreign_abi_ABIDescriptor: AllStatic {
1194   friend class JavaClasses;
1195 
1196  private:
1197   static int _inputStorage_offset;
1198   static int _outputStorage_offset;
1199   static int _volatileStorage_offset;
1200   static int _stackAlignment_offset;
1201   static int _shadowSpace_offset;
1202   static int _scratch1_offset;
1203   static int _scratch2_offset;
1204 
1205   static void compute_offsets();
1206 
1207  public:
1208   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1209 
1210   // Accessors
1211   static refArrayOop inputStorage(oop entry);
1212   static refArrayOop outputStorage(oop entry);
1213   static refArrayOop volatileStorage(oop entry);
1214   static jint        stackAlignment(oop entry);
1215   static jint        shadowSpace(oop entry);
1216   static oop         scratch1(oop entry);
1217   static oop         scratch2(oop entry);
1218 };
1219 
1220 class jdk_internal_foreign_abi_VMStorage: AllStatic {
1221   friend class JavaClasses;
1222 
1223  private:
1224   static int _type_offset;
1225   static int _indexOrOffset_offset;
1226   static int _segmentMaskOrSize_offset;
1227   static int _debugName_offset;
1228 
1229   static void compute_offsets();
1230 
1231  public:
1232   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1233 

1241   static bool is_subclass(Klass* klass) {
1242     return vmClasses::VMStorage_klass() != nullptr &&
1243       klass->is_subclass_of(vmClasses::VMStorage_klass());
1244   }
1245   static bool is_instance(oop obj);
1246 };
1247 
1248 class jdk_internal_foreign_abi_CallConv: AllStatic {
1249   friend class JavaClasses;
1250 
1251  private:
1252   static int _argRegs_offset;
1253   static int _retRegs_offset;
1254 
1255   static void compute_offsets();
1256 
1257  public:
1258   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1259 
1260   // Accessors
1261   static refArrayOop argRegs(oop entry);
1262   static refArrayOop retRegs(oop entry);
1263 
1264   // Testers
1265   static bool is_subclass(Klass* klass) {
1266     return vmClasses::CallConv_klass() != nullptr &&
1267       klass->is_subclass_of(vmClasses::CallConv_klass());
1268   }
1269   static bool is_instance(oop obj);
1270 };
1271 
1272 // Interface to java.lang.invoke.MemberName objects
1273 // (These are a private interface for Java code to query the class hierarchy.)
1274 
1275 #define RESOLVEDMETHOD_INJECTED_FIELDS(macro)                                   \
1276   macro(java_lang_invoke_ResolvedMethodName, vmtarget, intptr_signature, false)
1277 
1278 class java_lang_invoke_ResolvedMethodName : AllStatic {
1279   friend class JavaClasses;
1280 
1281   static int _vmtarget_offset;
1282   static int _vmholder_offset;

1339   static void       set_flags(oop mname, int flags);
1340 
1341   // Link through ResolvedMethodName field to get Method*
1342   static Method*        vmtarget(oop mname);
1343   static void       set_method(oop mname, oop method);
1344 
1345   static intptr_t       vmindex(oop mname);
1346   static void       set_vmindex(oop mname, intptr_t index);
1347 
1348   // Testers
1349   static bool is_subclass(Klass* klass) {
1350     return klass->is_subclass_of(vmClasses::MemberName_klass());
1351   }
1352   static bool is_instance(oop obj);
1353 
1354   static bool is_method(oop obj);
1355 
1356   // Relevant integer codes (keep these in synch. with MethodHandleNatives.Constants):
1357   enum {
1358     MN_IS_METHOD             = 0x00010000, // method (not constructor)
1359     MN_IS_OBJECT_CONSTRUCTOR = 0x00020000, // constructor
1360     MN_IS_FIELD              = 0x00040000, // field
1361     MN_IS_TYPE               = 0x00080000, // nested type
1362     MN_CALLER_SENSITIVE      = 0x00100000, // @CallerSensitive annotation detected
1363     MN_TRUSTED_FINAL         = 0x00200000, // trusted final field
1364     MN_HIDDEN_MEMBER         = 0x00400000, // @Hidden annotation detected
1365     MN_NULL_RESTRICTED_FIELD = 0x00800000, // null-restricted field
1366     MN_REFERENCE_KIND_SHIFT  = 24, // refKind
1367     MN_REFERENCE_KIND_MASK   = 0x0F000000 >> MN_REFERENCE_KIND_SHIFT, // 4 bits
1368     MN_LAYOUT_SHIFT          = 28, // field layout
1369     MN_LAYOUT_MASK           = 0x70000000 >> MN_LAYOUT_SHIFT, // 3 bits
1370     MN_NESTMATE_CLASS        = 0x00000001,
1371     MN_HIDDEN_CLASS          = 0x00000002,
1372     MN_STRONG_LOADER_LINK    = 0x00000004,
1373     MN_ACCESS_VM_ANNOTATIONS = 0x00000008,
1374     // Lookup modes
1375     MN_MODULE_MODE           = 0x00000010,
1376     MN_UNCONDITIONAL_MODE    = 0x00000020,
1377     MN_TRUSTED_MODE          = -1
1378   };
1379 
1380   // Accessors for code generation:
1381   static int clazz_offset()   { CHECK_INIT(_clazz_offset); }
1382   static int type_offset()    { CHECK_INIT(_type_offset); }
1383   static int flags_offset()   { CHECK_INIT(_flags_offset); }
1384   static int method_offset()  { CHECK_INIT(_method_offset); }
1385   static int vmindex_offset() { CHECK_INIT(_vmindex_offset); }
1386 };
1387 
1388 
1389 // Interface to java.lang.invoke.MethodType objects
1390 
1391 class java_lang_invoke_MethodType: AllStatic {
1392   friend class JavaClasses;
1393 
1394  private:
1395   static int _rtype_offset;
1396   static int _ptypes_offset;
1397 
1398   static void compute_offsets();
1399 
1400  public:
1401   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1402   // Accessors
1403   static oop            rtype(oop mt);
1404   static refArrayOop    ptypes(oop mt);
1405 
1406   static oop            ptype(oop mt, int index);
1407   static int            ptype_count(oop mt);
1408 
1409   static int            ptype_slot_count(oop mt);  // extra counts for long/double
1410   static int            rtype_slot_count(oop mt);  // extra counts for long/double
1411 
1412   static Symbol*        as_signature(oop mt, bool intern_if_not_found);
1413   static void           print_signature(oop mt, outputStream* st);
1414 
1415   static bool is_instance(oop obj);
1416 
1417   static bool equals(oop mt1, oop mt2);
1418 
1419   // Accessors for code generation:
1420   static int rtype_offset()  { CHECK_INIT(_rtype_offset); }
1421   static int ptypes_offset() { CHECK_INIT(_ptypes_offset); }
1422 };
1423 
1424 

1777   }
1778   static bool is_instance(oop obj);
1779 };
1780 
1781 class java_lang_Boolean : AllStatic {
1782  private:
1783   static int _static_TRUE_offset;
1784   static int _static_FALSE_offset;
1785  public:
1786   static Symbol* symbol();
1787   static void compute_offsets(InstanceKlass* k);
1788   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1789 };
1790 
1791 class java_lang_Integer_IntegerCache : AllStatic {
1792  private:
1793   static int _static_cache_offset;
1794  public:
1795   static Symbol* symbol();
1796   static void compute_offsets(InstanceKlass* k);
1797   static refArrayOop  cache(InstanceKlass *k);
1798   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1799 };
1800 
1801 class java_lang_Long_LongCache : AllStatic {
1802  private:
1803   static int _static_cache_offset;
1804  public:
1805   static Symbol* symbol();
1806   static void compute_offsets(InstanceKlass* k);
1807   static refArrayOop  cache(InstanceKlass *k);
1808   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1809 };
1810 
1811 class java_lang_Character_CharacterCache : AllStatic {
1812  private:
1813   static int _static_cache_offset;
1814  public:
1815   static Symbol* symbol();
1816   static void compute_offsets(InstanceKlass* k);
1817   static refArrayOop  cache(InstanceKlass *k);
1818   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1819 };
1820 
1821 class java_lang_Short_ShortCache : AllStatic {
1822  private:
1823   static int _static_cache_offset;
1824  public:
1825   static Symbol* symbol();
1826   static void compute_offsets(InstanceKlass* k);
1827   static refArrayOop  cache(InstanceKlass *k);
1828   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1829 };
1830 
1831 class java_lang_Byte_ByteCache : AllStatic {
1832  private:
1833   static int _static_cache_offset;
1834  public:
1835   static Symbol* symbol();
1836   static void compute_offsets(InstanceKlass* k);
1837   static refArrayOop  cache(InstanceKlass *k);
1838   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1839 };
1840 

1841 // Interface to java.lang.InternalError objects
1842 
1843 #define INTERNALERROR_INJECTED_FIELDS(macro)                      \
1844   macro(java_lang_InternalError, during_unsafe_access, bool_signature, false)
1845 
1846 class java_lang_InternalError : AllStatic {
1847  private:
1848   static int _during_unsafe_access_offset;
1849  public:
1850   static jboolean during_unsafe_access(oop internal_error);
1851   static void set_during_unsafe_access(oop internal_error);
1852   static void compute_offsets();
1853   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
1854 };
1855 
1856 // Use to declare fields that need to be injected into Java classes
1857 // for the JVM to use.  The name_index and signature_index are
1858 // declared in vmSymbols.  The may_be_java flag is used to declare
1859 // fields that might already exist in Java but should be injected if
1860 // they don't.  Otherwise the field is unconditionally injected and
< prev index next >