81 class ResolutionErrorTable;
82 class SymbolPropertyTable;
83 class ProtectionDomainCacheTable;
84 class ProtectionDomainCacheEntry;
85 class GCTimer;
86 class OopStorage;
87
88 // Certain classes are preloaded, such as java.lang.Object and java.lang.String.
89 // They are all "well-known", in the sense that no class loader is allowed
90 // to provide a different definition.
91 //
92 // These klasses must all have names defined in vmSymbols.
93
94 #define WK_KLASS_ENUM_NAME(kname) kname##_knum
95
96 // Each well-known class has a short klass name (like object_klass),
97 // a vmSymbol name (like java_lang_Object), and a flag word
98 // that makes some minor distinctions, like whether the klass
99 // is preloaded, optional, release-specific, etc.
100 // The order of these definitions is significant; it is the order in which
101 // preloading is actually performed by initialize_preloaded_classes.
102
103 #define WK_KLASSES_DO(do_klass) \
104 /* well-known classes */ \
105 do_klass(Object_klass, java_lang_Object, Pre ) \
106 do_klass(String_klass, java_lang_String, Pre ) \
107 do_klass(Class_klass, java_lang_Class, Pre ) \
108 do_klass(Cloneable_klass, java_lang_Cloneable, Pre ) \
109 do_klass(ClassLoader_klass, java_lang_ClassLoader, Pre ) \
110 do_klass(Serializable_klass, java_io_Serializable, Pre ) \
111 do_klass(System_klass, java_lang_System, Pre ) \
112 do_klass(Throwable_klass, java_lang_Throwable, Pre ) \
113 do_klass(Error_klass, java_lang_Error, Pre ) \
114 do_klass(ThreadDeath_klass, java_lang_ThreadDeath, Pre ) \
115 do_klass(Exception_klass, java_lang_Exception, Pre ) \
116 do_klass(RuntimeException_klass, java_lang_RuntimeException, Pre ) \
117 do_klass(SecurityManager_klass, java_lang_SecurityManager, Pre ) \
118 do_klass(ProtectionDomain_klass, java_security_ProtectionDomain, Pre ) \
119 do_klass(AccessControlContext_klass, java_security_AccessControlContext, Pre ) \
120 do_klass(SecureClassLoader_klass, java_security_SecureClassLoader, Pre ) \
121 do_klass(ClassNotFoundException_klass, java_lang_ClassNotFoundException, Pre ) \
400 // Needed by evolution and breakpoint code
401 static inline void notice_modification() { assert_locked_or_safepoint(Compile_lock); ++_number_of_modifications; }
402
403 // Verification
404 static void verify();
405
406 // Initialization
407 static void initialize(TRAPS);
408
409 // Checked fast access to commonly used classes - mostly preloaded
410 static InstanceKlass* check_klass(InstanceKlass* k) {
411 assert(k != NULL, "klass not loaded");
412 return k;
413 }
414
415 static InstanceKlass* check_klass_Pre(InstanceKlass* k) { return check_klass(k); }
416 static InstanceKlass* check_klass_Opt(InstanceKlass* k) { return k; }
417
418 JVMCI_ONLY(static InstanceKlass* check_klass_Jvmci(InstanceKlass* k) { return k; })
419
420 static bool initialize_wk_klass(WKID id, int init_opt, TRAPS);
421 static void initialize_wk_klasses_until(WKID limit_id, WKID &start_id, TRAPS);
422 static void initialize_wk_klasses_through(WKID end_id, WKID &start_id, TRAPS) {
423 int limit = (int)end_id + 1;
424 initialize_wk_klasses_until((WKID) limit, start_id, THREAD);
425 }
426
427 public:
428 #define WK_KLASS_DECLARE(name, symbol, option) \
429 static InstanceKlass* name() { return check_klass_##option(_well_known_klasses[WK_KLASS_ENUM_NAME(name)]); } \
430 static InstanceKlass** name##_addr() { \
431 return &SystemDictionary::_well_known_klasses[SystemDictionary::WK_KLASS_ENUM_NAME(name)]; \
432 }
433 WK_KLASSES_DO(WK_KLASS_DECLARE);
434 #undef WK_KLASS_DECLARE
435
436 static InstanceKlass* well_known_klass(WKID id) {
437 assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob");
438 return _well_known_klasses[id];
439 }
440
441 static InstanceKlass** well_known_klass_addr(WKID id) {
442 assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob");
443 return &_well_known_klasses[id];
444 }
691 static InstanceKlass* find_class(Symbol* class_name, ClassLoaderData* loader_data);
692
693 // Basic find on classes in the midst of being loaded
694 static Symbol* find_placeholder(Symbol* name, ClassLoaderData* loader_data);
695
696 // Add a placeholder for a class being loaded
697 static void add_placeholder(int index,
698 Symbol* class_name,
699 ClassLoaderData* loader_data);
700 static void remove_placeholder(int index,
701 Symbol* class_name,
702 ClassLoaderData* loader_data);
703
704 // Performs cleanups after resolve_super_or_fail. This typically needs
705 // to be called on failure.
706 // Won't throw, but can block.
707 static void resolution_cleanups(Symbol* class_name,
708 ClassLoaderData* loader_data,
709 TRAPS);
710
711 // Initialization
712 static void initialize_preloaded_classes(TRAPS);
713
714 // Class loader constraints
715 static void check_constraints(unsigned int hash,
716 InstanceKlass* k, Handle loader,
717 bool defining, TRAPS);
718 static void update_dictionary(unsigned int d_hash,
719 int p_index, unsigned int p_hash,
720 InstanceKlass* k, Handle loader,
721 TRAPS);
722
723 // Variables holding commonly used klasses (preloaded)
724 static InstanceKlass* _well_known_klasses[];
725
726 // table of box klasses (int_klass, etc.)
727 static InstanceKlass* _box_klasses[T_VOID+1];
728
729 private:
730 static oop _java_system_loader;
731 static oop _java_platform_loader;
732
|
81 class ResolutionErrorTable;
82 class SymbolPropertyTable;
83 class ProtectionDomainCacheTable;
84 class ProtectionDomainCacheEntry;
85 class GCTimer;
86 class OopStorage;
87
88 // Certain classes are preloaded, such as java.lang.Object and java.lang.String.
89 // They are all "well-known", in the sense that no class loader is allowed
90 // to provide a different definition.
91 //
92 // These klasses must all have names defined in vmSymbols.
93
94 #define WK_KLASS_ENUM_NAME(kname) kname##_knum
95
96 // Each well-known class has a short klass name (like object_klass),
97 // a vmSymbol name (like java_lang_Object), and a flag word
98 // that makes some minor distinctions, like whether the klass
99 // is preloaded, optional, release-specific, etc.
100 // The order of these definitions is significant; it is the order in which
101 // preloading is actually performed by resolve_preloaded_classes.
102
103 #define WK_KLASSES_DO(do_klass) \
104 /* well-known classes */ \
105 do_klass(Object_klass, java_lang_Object, Pre ) \
106 do_klass(String_klass, java_lang_String, Pre ) \
107 do_klass(Class_klass, java_lang_Class, Pre ) \
108 do_klass(Cloneable_klass, java_lang_Cloneable, Pre ) \
109 do_klass(ClassLoader_klass, java_lang_ClassLoader, Pre ) \
110 do_klass(Serializable_klass, java_io_Serializable, Pre ) \
111 do_klass(System_klass, java_lang_System, Pre ) \
112 do_klass(Throwable_klass, java_lang_Throwable, Pre ) \
113 do_klass(Error_klass, java_lang_Error, Pre ) \
114 do_klass(ThreadDeath_klass, java_lang_ThreadDeath, Pre ) \
115 do_klass(Exception_klass, java_lang_Exception, Pre ) \
116 do_klass(RuntimeException_klass, java_lang_RuntimeException, Pre ) \
117 do_klass(SecurityManager_klass, java_lang_SecurityManager, Pre ) \
118 do_klass(ProtectionDomain_klass, java_security_ProtectionDomain, Pre ) \
119 do_klass(AccessControlContext_klass, java_security_AccessControlContext, Pre ) \
120 do_klass(SecureClassLoader_klass, java_security_SecureClassLoader, Pre ) \
121 do_klass(ClassNotFoundException_klass, java_lang_ClassNotFoundException, Pre ) \
400 // Needed by evolution and breakpoint code
401 static inline void notice_modification() { assert_locked_or_safepoint(Compile_lock); ++_number_of_modifications; }
402
403 // Verification
404 static void verify();
405
406 // Initialization
407 static void initialize(TRAPS);
408
409 // Checked fast access to commonly used classes - mostly preloaded
410 static InstanceKlass* check_klass(InstanceKlass* k) {
411 assert(k != NULL, "klass not loaded");
412 return k;
413 }
414
415 static InstanceKlass* check_klass_Pre(InstanceKlass* k) { return check_klass(k); }
416 static InstanceKlass* check_klass_Opt(InstanceKlass* k) { return k; }
417
418 JVMCI_ONLY(static InstanceKlass* check_klass_Jvmci(InstanceKlass* k) { return k; })
419
420 static bool resolve_wk_klass(WKID id, int init_opt, TRAPS);
421 static void resolve_wk_klasses_until(WKID limit_id, WKID &start_id, TRAPS);
422 static void resolve_wk_klasses_through(WKID end_id, WKID &start_id, TRAPS) {
423 int limit = (int)end_id + 1;
424 resolve_wk_klasses_until((WKID) limit, start_id, THREAD);
425 }
426
427 public:
428 #define WK_KLASS_DECLARE(name, symbol, option) \
429 static InstanceKlass* name() { return check_klass_##option(_well_known_klasses[WK_KLASS_ENUM_NAME(name)]); } \
430 static InstanceKlass** name##_addr() { \
431 return &SystemDictionary::_well_known_klasses[SystemDictionary::WK_KLASS_ENUM_NAME(name)]; \
432 }
433 WK_KLASSES_DO(WK_KLASS_DECLARE);
434 #undef WK_KLASS_DECLARE
435
436 static InstanceKlass* well_known_klass(WKID id) {
437 assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob");
438 return _well_known_klasses[id];
439 }
440
441 static InstanceKlass** well_known_klass_addr(WKID id) {
442 assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob");
443 return &_well_known_klasses[id];
444 }
691 static InstanceKlass* find_class(Symbol* class_name, ClassLoaderData* loader_data);
692
693 // Basic find on classes in the midst of being loaded
694 static Symbol* find_placeholder(Symbol* name, ClassLoaderData* loader_data);
695
696 // Add a placeholder for a class being loaded
697 static void add_placeholder(int index,
698 Symbol* class_name,
699 ClassLoaderData* loader_data);
700 static void remove_placeholder(int index,
701 Symbol* class_name,
702 ClassLoaderData* loader_data);
703
704 // Performs cleanups after resolve_super_or_fail. This typically needs
705 // to be called on failure.
706 // Won't throw, but can block.
707 static void resolution_cleanups(Symbol* class_name,
708 ClassLoaderData* loader_data,
709 TRAPS);
710
711 // Resolve preloaded classes so they can be used like SystemDictionary::String_klass()
712 static void resolve_preloaded_classes(TRAPS);
713
714 // Class loader constraints
715 static void check_constraints(unsigned int hash,
716 InstanceKlass* k, Handle loader,
717 bool defining, TRAPS);
718 static void update_dictionary(unsigned int d_hash,
719 int p_index, unsigned int p_hash,
720 InstanceKlass* k, Handle loader,
721 TRAPS);
722
723 // Variables holding commonly used klasses (preloaded)
724 static InstanceKlass* _well_known_klasses[];
725
726 // table of box klasses (int_klass, etc.)
727 static InstanceKlass* _box_klasses[T_VOID+1];
728
729 private:
730 static oop _java_system_loader;
731 static oop _java_platform_loader;
732
|