775
776 // Allocation
777 static Handle create(Handle loader, Handle module_name, TRAPS);
778
779 // Testers
780 static bool is_instance(oop obj);
781
782 // Accessors
783 static oop loader(oop module);
784 static void set_loader(oop module, oop value);
785
786 static oop name(oop module);
787 static void set_name(oop module, oop value);
788
789 static ModuleEntry* module_entry(oop module);
790 static void set_module_entry(oop module, ModuleEntry* module_entry);
791
792 friend class JavaClasses;
793 };
794
795 // Interface to jdk.internal.reflect.ConstantPool objects
796 class reflect_ConstantPool {
797 private:
798 // Note that to reduce dependencies on the JDK we compute these
799 // offsets at run-time.
800 static int _oop_offset;
801
802 static void compute_offsets();
803
804 public:
805 static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
806
807 // Allocation
808 static Handle create(TRAPS);
809
810 // Accessors
811 static void set_cp(oop reflect, ConstantPool* value);
812 static int oop_offset() {
813 return _oop_offset;
814 }
815
816 static ConstantPool* get_cp(oop reflect);
817
818 // Debugging
819 friend class JavaClasses;
820 };
821
822 // Interface to jdk.internal.reflect.UnsafeStaticFieldAccessorImpl objects
823 class reflect_UnsafeStaticFieldAccessorImpl {
824 private:
825 static int _base_offset;
826 static void compute_offsets();
827
828 public:
829 static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
830
831 static int base_offset() {
832 return _base_offset;
833 }
1490 const bool may_be_java;
1491
1492
1493 Klass* klass() const { return SystemDictionary::well_known_klass(klass_id); }
1494 Symbol* name() const { return lookup_symbol(name_index); }
1495 Symbol* signature() const { return lookup_symbol(signature_index); }
1496
1497 int compute_offset();
1498
1499 // Find the Symbol for this index
1500 static Symbol* lookup_symbol(int symbol_index) {
1501 return vmSymbols::symbol_at((vmSymbols::SID)symbol_index);
1502 }
1503 };
1504
1505 #define DECLARE_INJECTED_FIELD_ENUM(klass, name, signature, may_be_java) \
1506 klass##_##name##_enum,
1507
1508 #define ALL_INJECTED_FIELDS(macro) \
1509 CLASS_INJECTED_FIELDS(macro) \
1510 CLASSLOADER_INJECTED_FIELDS(macro) \
1511 RESOLVEDMETHOD_INJECTED_FIELDS(macro) \
1512 MEMBERNAME_INJECTED_FIELDS(macro) \
1513 CALLSITECONTEXT_INJECTED_FIELDS(macro) \
1514 STACKFRAMEINFO_INJECTED_FIELDS(macro) \
1515 MODULE_INJECTED_FIELDS(macro)
1516
1517 // Interface to hard-coded offset checking
1518
1519 class JavaClasses : AllStatic {
1520 private:
1521
1522 static InjectedField _injected_fields[];
1523
1524 static bool check_offset(const char *klass_name, int offset, const char *field_name, const char* field_sig) PRODUCT_RETURN0;
1525 public:
1526 enum InjectedFieldID {
1527 ALL_INJECTED_FIELDS(DECLARE_INJECTED_FIELD_ENUM)
1528 MAX_enum
1529 };
|
775
776 // Allocation
777 static Handle create(Handle loader, Handle module_name, TRAPS);
778
779 // Testers
780 static bool is_instance(oop obj);
781
782 // Accessors
783 static oop loader(oop module);
784 static void set_loader(oop module, oop value);
785
786 static oop name(oop module);
787 static void set_name(oop module, oop value);
788
789 static ModuleEntry* module_entry(oop module);
790 static void set_module_entry(oop module, ModuleEntry* module_entry);
791
792 friend class JavaClasses;
793 };
794
795 #define CONSTANTPOOL_INJECTED_FIELDS(macro) \
796 macro(reflect_ConstantPool, constantPoolOop, object_signature, false)
797
798 // Interface to jdk.internal.reflect.ConstantPool objects
799 class reflect_ConstantPool {
800 private:
801 // Note that to reduce dependencies on the JDK we compute these
802 // offsets at run-time.
803 static int _constantPoolOop_offset;
804
805 static void compute_offsets();
806
807 public:
808 static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
809
810 // Allocation
811 static Handle create_from_pool(ConstantPool* value, TRAPS);
812
813 // Accessors
814 static int oop_offset() {
815 return _constantPoolOop_offset;
816 }
817
818 static ConstantPool* get_cp(oop reflect);
819
820 // Debugging
821 friend class JavaClasses;
822 };
823
824 // Interface to jdk.internal.reflect.UnsafeStaticFieldAccessorImpl objects
825 class reflect_UnsafeStaticFieldAccessorImpl {
826 private:
827 static int _base_offset;
828 static void compute_offsets();
829
830 public:
831 static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
832
833 static int base_offset() {
834 return _base_offset;
835 }
1492 const bool may_be_java;
1493
1494
1495 Klass* klass() const { return SystemDictionary::well_known_klass(klass_id); }
1496 Symbol* name() const { return lookup_symbol(name_index); }
1497 Symbol* signature() const { return lookup_symbol(signature_index); }
1498
1499 int compute_offset();
1500
1501 // Find the Symbol for this index
1502 static Symbol* lookup_symbol(int symbol_index) {
1503 return vmSymbols::symbol_at((vmSymbols::SID)symbol_index);
1504 }
1505 };
1506
1507 #define DECLARE_INJECTED_FIELD_ENUM(klass, name, signature, may_be_java) \
1508 klass##_##name##_enum,
1509
1510 #define ALL_INJECTED_FIELDS(macro) \
1511 CLASS_INJECTED_FIELDS(macro) \
1512 CONSTANTPOOL_INJECTED_FIELDS(macro) \
1513 CLASSLOADER_INJECTED_FIELDS(macro) \
1514 RESOLVEDMETHOD_INJECTED_FIELDS(macro) \
1515 MEMBERNAME_INJECTED_FIELDS(macro) \
1516 CALLSITECONTEXT_INJECTED_FIELDS(macro) \
1517 STACKFRAMEINFO_INJECTED_FIELDS(macro) \
1518 MODULE_INJECTED_FIELDS(macro)
1519
1520 // Interface to hard-coded offset checking
1521
1522 class JavaClasses : AllStatic {
1523 private:
1524
1525 static InjectedField _injected_fields[];
1526
1527 static bool check_offset(const char *klass_name, int offset, const char *field_name, const char* field_sig) PRODUCT_RETURN0;
1528 public:
1529 enum InjectedFieldID {
1530 ALL_INJECTED_FIELDS(DECLARE_INJECTED_FIELD_ENUM)
1531 MAX_enum
1532 };
|