8212642: Remove SystemDictionary::InitOption enum
Reviewed-by: dholmes, kvn, redestad
This commit is contained in:
parent
cb17e450b3
commit
4abb6861ec
@ -77,7 +77,7 @@
|
||||
|
||||
ciObject* ciEnv::_null_object_instance;
|
||||
|
||||
#define WK_KLASS_DEFN(name, ignore_s, ignore_o) ciInstanceKlass* ciEnv::_##name = NULL;
|
||||
#define WK_KLASS_DEFN(name, ignore_s) ciInstanceKlass* ciEnv::_##name = NULL;
|
||||
WK_KLASSES_DO(WK_KLASS_DEFN)
|
||||
#undef WK_KLASS_DEFN
|
||||
|
||||
|
@ -82,7 +82,7 @@ private:
|
||||
// Distinguished instances of certain ciObjects..
|
||||
static ciObject* _null_object_instance;
|
||||
|
||||
#define WK_KLASS_DECL(name, ignore_s, ignore_o) static ciInstanceKlass* _##name;
|
||||
#define WK_KLASS_DECL(name, ignore_s) static ciInstanceKlass* _##name;
|
||||
WK_KLASSES_DO(WK_KLASS_DECL)
|
||||
#undef WK_KLASS_DECL
|
||||
|
||||
@ -374,7 +374,7 @@ public:
|
||||
|
||||
|
||||
// Access to certain well known ciObjects.
|
||||
#define WK_KLASS_FUNC(name, ignore_s, ignore_o) \
|
||||
#define WK_KLASS_FUNC(name, ignore_s) \
|
||||
ciInstanceKlass* name() { \
|
||||
return _##name;\
|
||||
}
|
||||
|
@ -157,8 +157,8 @@ void ciObjectFactory::init_shared_objects() {
|
||||
ciEnv::_null_object_instance = new (_arena) ciNullObject();
|
||||
init_ident_of(ciEnv::_null_object_instance);
|
||||
|
||||
#define WK_KLASS_DEFN(name, ignore_s, opt) \
|
||||
if (SystemDictionary::name() != NULL) \
|
||||
#define WK_KLASS_DEFN(name, ignore_s) \
|
||||
if (SystemDictionary::name##_is_loaded()) \
|
||||
ciEnv::_##name = get_metadata(SystemDictionary::name())->as_instance_klass();
|
||||
|
||||
WK_KLASSES_DO(WK_KLASS_DEFN)
|
||||
|
@ -1963,41 +1963,30 @@ void SystemDictionary::initialize(TRAPS) {
|
||||
|
||||
// Compact table of directions on the initialization of klasses:
|
||||
static const short wk_init_info[] = {
|
||||
#define WK_KLASS_INIT_INFO(name, symbol, option) \
|
||||
( ((int)vmSymbols::VM_SYMBOL_ENUM_NAME(symbol) \
|
||||
<< SystemDictionary::CEIL_LG_OPTION_LIMIT) \
|
||||
| (int)SystemDictionary::option ),
|
||||
#define WK_KLASS_INIT_INFO(name, symbol) \
|
||||
((short)vmSymbols::VM_SYMBOL_ENUM_NAME(symbol)),
|
||||
|
||||
WK_KLASSES_DO(WK_KLASS_INIT_INFO)
|
||||
#undef WK_KLASS_INIT_INFO
|
||||
0
|
||||
};
|
||||
|
||||
bool SystemDictionary::resolve_wk_klass(WKID id, int init_opt, TRAPS) {
|
||||
bool SystemDictionary::resolve_wk_klass(WKID id, TRAPS) {
|
||||
assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob");
|
||||
int info = wk_init_info[id - FIRST_WKID];
|
||||
int sid = (info >> CEIL_LG_OPTION_LIMIT);
|
||||
int sid = wk_init_info[id - FIRST_WKID];
|
||||
Symbol* symbol = vmSymbols::symbol_at((vmSymbols::SID)sid);
|
||||
InstanceKlass** klassp = &_well_known_klasses[id];
|
||||
|
||||
bool must_load;
|
||||
|
||||
#if INCLUDE_JVMCI
|
||||
if (EnableJVMCI) {
|
||||
// If JVMCI is enabled we require its classes to be found.
|
||||
must_load = (init_opt < SystemDictionary::Opt) || (init_opt == SystemDictionary::Jvmci);
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
must_load = (init_opt < SystemDictionary::Opt);
|
||||
if (id >= FIRST_JVMCI_WKID) {
|
||||
assert(EnableJVMCI, "resolve JVMCI classes only when EnableJVMCI is true");
|
||||
}
|
||||
#endif
|
||||
|
||||
if ((*klassp) == NULL) {
|
||||
Klass* k;
|
||||
if (must_load) {
|
||||
k = resolve_or_fail(symbol, true, CHECK_0); // load required class
|
||||
} else {
|
||||
k = resolve_or_null(symbol, CHECK_0); // load optional klass
|
||||
}
|
||||
(*klassp) = (k == NULL) ? NULL : InstanceKlass::cast(k);
|
||||
Klass* k = resolve_or_fail(symbol, true, CHECK_0);
|
||||
(*klassp) = InstanceKlass::cast(k);
|
||||
}
|
||||
return ((*klassp) != NULL);
|
||||
}
|
||||
@ -2006,11 +1995,7 @@ void SystemDictionary::resolve_wk_klasses_until(WKID limit_id, WKID &start_id, T
|
||||
assert((int)start_id <= (int)limit_id, "IDs are out of order!");
|
||||
for (int id = (int)start_id; id < (int)limit_id; id++) {
|
||||
assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob");
|
||||
int info = wk_init_info[id - FIRST_WKID];
|
||||
int sid = (info >> CEIL_LG_OPTION_LIMIT);
|
||||
int opt = (info & right_n_bits(CEIL_LG_OPTION_LIMIT));
|
||||
|
||||
resolve_wk_klass((WKID)id, opt, CHECK);
|
||||
resolve_wk_klass((WKID)id, CHECK);
|
||||
}
|
||||
|
||||
// move the starting value forward to the limit:
|
||||
|
@ -94,127 +94,125 @@ class OopStorage;
|
||||
#define WK_KLASS_ENUM_NAME(kname) kname##_knum
|
||||
|
||||
// Each well-known class has a short klass name (like object_klass),
|
||||
// a vmSymbol name (like java_lang_Object), and a flag word
|
||||
// that makes some minor distinctions, like whether the klass
|
||||
// is preloaded, optional, release-specific, etc.
|
||||
// and a vmSymbol name (like java_lang_Object).
|
||||
// The order of these definitions is significant; it is the order in which
|
||||
// preloading is actually performed by resolve_preloaded_classes.
|
||||
|
||||
#define WK_KLASSES_DO(do_klass) \
|
||||
/* well-known classes */ \
|
||||
do_klass(Object_klass, java_lang_Object, Pre ) \
|
||||
do_klass(String_klass, java_lang_String, Pre ) \
|
||||
do_klass(Class_klass, java_lang_Class, Pre ) \
|
||||
do_klass(Cloneable_klass, java_lang_Cloneable, Pre ) \
|
||||
do_klass(ClassLoader_klass, java_lang_ClassLoader, Pre ) \
|
||||
do_klass(Serializable_klass, java_io_Serializable, Pre ) \
|
||||
do_klass(System_klass, java_lang_System, Pre ) \
|
||||
do_klass(Throwable_klass, java_lang_Throwable, Pre ) \
|
||||
do_klass(Error_klass, java_lang_Error, Pre ) \
|
||||
do_klass(ThreadDeath_klass, java_lang_ThreadDeath, Pre ) \
|
||||
do_klass(Exception_klass, java_lang_Exception, Pre ) \
|
||||
do_klass(RuntimeException_klass, java_lang_RuntimeException, Pre ) \
|
||||
do_klass(SecurityManager_klass, java_lang_SecurityManager, Pre ) \
|
||||
do_klass(ProtectionDomain_klass, java_security_ProtectionDomain, Pre ) \
|
||||
do_klass(AccessControlContext_klass, java_security_AccessControlContext, Pre ) \
|
||||
do_klass(SecureClassLoader_klass, java_security_SecureClassLoader, Pre ) \
|
||||
do_klass(ClassNotFoundException_klass, java_lang_ClassNotFoundException, Pre ) \
|
||||
do_klass(NoClassDefFoundError_klass, java_lang_NoClassDefFoundError, Pre ) \
|
||||
do_klass(LinkageError_klass, java_lang_LinkageError, Pre ) \
|
||||
do_klass(ClassCastException_klass, java_lang_ClassCastException, Pre ) \
|
||||
do_klass(ArrayStoreException_klass, java_lang_ArrayStoreException, Pre ) \
|
||||
do_klass(VirtualMachineError_klass, java_lang_VirtualMachineError, Pre ) \
|
||||
do_klass(OutOfMemoryError_klass, java_lang_OutOfMemoryError, Pre ) \
|
||||
do_klass(StackOverflowError_klass, java_lang_StackOverflowError, Pre ) \
|
||||
do_klass(IllegalMonitorStateException_klass, java_lang_IllegalMonitorStateException, Pre ) \
|
||||
do_klass(Reference_klass, java_lang_ref_Reference, Pre ) \
|
||||
\
|
||||
/* Preload ref klasses and set reference types */ \
|
||||
do_klass(SoftReference_klass, java_lang_ref_SoftReference, Pre ) \
|
||||
do_klass(WeakReference_klass, java_lang_ref_WeakReference, Pre ) \
|
||||
do_klass(FinalReference_klass, java_lang_ref_FinalReference, Pre ) \
|
||||
do_klass(PhantomReference_klass, java_lang_ref_PhantomReference, Pre ) \
|
||||
do_klass(Finalizer_klass, java_lang_ref_Finalizer, Pre ) \
|
||||
\
|
||||
do_klass(Thread_klass, java_lang_Thread, Pre ) \
|
||||
do_klass(ThreadGroup_klass, java_lang_ThreadGroup, Pre ) \
|
||||
do_klass(Properties_klass, java_util_Properties, Pre ) \
|
||||
do_klass(Module_klass, java_lang_Module, Pre ) \
|
||||
do_klass(reflect_AccessibleObject_klass, java_lang_reflect_AccessibleObject, Pre ) \
|
||||
do_klass(reflect_Field_klass, java_lang_reflect_Field, Pre ) \
|
||||
do_klass(reflect_Parameter_klass, java_lang_reflect_Parameter, Opt ) \
|
||||
do_klass(reflect_Method_klass, java_lang_reflect_Method, Pre ) \
|
||||
do_klass(reflect_Constructor_klass, java_lang_reflect_Constructor, Pre ) \
|
||||
\
|
||||
/* NOTE: needed too early in bootstrapping process to have checks based on JDK version */ \
|
||||
/* It's okay if this turns out to be NULL in non-1.4 JDKs. */ \
|
||||
do_klass(reflect_MagicAccessorImpl_klass, reflect_MagicAccessorImpl, Opt ) \
|
||||
do_klass(reflect_MethodAccessorImpl_klass, reflect_MethodAccessorImpl, Pre ) \
|
||||
do_klass(reflect_ConstructorAccessorImpl_klass, reflect_ConstructorAccessorImpl, Pre ) \
|
||||
do_klass(reflect_DelegatingClassLoader_klass, reflect_DelegatingClassLoader, Opt ) \
|
||||
do_klass(reflect_ConstantPool_klass, reflect_ConstantPool, Opt ) \
|
||||
do_klass(reflect_UnsafeStaticFieldAccessorImpl_klass, reflect_UnsafeStaticFieldAccessorImpl, Opt ) \
|
||||
do_klass(reflect_CallerSensitive_klass, reflect_CallerSensitive, Opt ) \
|
||||
\
|
||||
/* support for dynamic typing; it's OK if these are NULL in earlier JDKs */ \
|
||||
do_klass(DirectMethodHandle_klass, java_lang_invoke_DirectMethodHandle, Opt ) \
|
||||
do_klass(MethodHandle_klass, java_lang_invoke_MethodHandle, Pre ) \
|
||||
do_klass(VarHandle_klass, java_lang_invoke_VarHandle, Pre ) \
|
||||
do_klass(MemberName_klass, java_lang_invoke_MemberName, Pre ) \
|
||||
do_klass(ResolvedMethodName_klass, java_lang_invoke_ResolvedMethodName, Pre ) \
|
||||
do_klass(MethodHandleNatives_klass, java_lang_invoke_MethodHandleNatives, Pre ) \
|
||||
do_klass(LambdaForm_klass, java_lang_invoke_LambdaForm, Opt ) \
|
||||
do_klass(MethodType_klass, java_lang_invoke_MethodType, Pre ) \
|
||||
do_klass(BootstrapMethodError_klass, java_lang_BootstrapMethodError, Pre ) \
|
||||
do_klass(CallSite_klass, java_lang_invoke_CallSite, Pre ) \
|
||||
do_klass(Context_klass, java_lang_invoke_MethodHandleNatives_CallSiteContext, Pre ) \
|
||||
do_klass(ConstantCallSite_klass, java_lang_invoke_ConstantCallSite, Pre ) \
|
||||
do_klass(MutableCallSite_klass, java_lang_invoke_MutableCallSite, Pre ) \
|
||||
do_klass(VolatileCallSite_klass, java_lang_invoke_VolatileCallSite, Pre ) \
|
||||
/* Note: MethodHandle must be first, and VolatileCallSite last in group */ \
|
||||
\
|
||||
do_klass(AssertionStatusDirectives_klass, java_lang_AssertionStatusDirectives, Pre ) \
|
||||
do_klass(StringBuffer_klass, java_lang_StringBuffer, Pre ) \
|
||||
do_klass(StringBuilder_klass, java_lang_StringBuilder, Pre ) \
|
||||
do_klass(internal_Unsafe_klass, jdk_internal_misc_Unsafe, Pre ) \
|
||||
do_klass(module_Modules_klass, jdk_internal_module_Modules, Pre ) \
|
||||
\
|
||||
/* support for CDS */ \
|
||||
do_klass(ByteArrayInputStream_klass, java_io_ByteArrayInputStream, Pre ) \
|
||||
do_klass(URL_klass, java_net_URL, Pre ) \
|
||||
do_klass(Jar_Manifest_klass, java_util_jar_Manifest, Pre ) \
|
||||
do_klass(jdk_internal_loader_ClassLoaders_klass, jdk_internal_loader_ClassLoaders, Pre ) \
|
||||
do_klass(jdk_internal_loader_ClassLoaders_AppClassLoader_klass, jdk_internal_loader_ClassLoaders_AppClassLoader, Pre ) \
|
||||
do_klass(jdk_internal_loader_ClassLoaders_PlatformClassLoader_klass, jdk_internal_loader_ClassLoaders_PlatformClassLoader, Pre ) \
|
||||
do_klass(CodeSource_klass, java_security_CodeSource, Pre ) \
|
||||
\
|
||||
do_klass(StackTraceElement_klass, java_lang_StackTraceElement, Opt ) \
|
||||
\
|
||||
/* It's okay if this turns out to be NULL in non-1.4 JDKs. */ \
|
||||
do_klass(nio_Buffer_klass, java_nio_Buffer, Opt ) \
|
||||
\
|
||||
/* Stack Walking */ \
|
||||
do_klass(StackWalker_klass, java_lang_StackWalker, Opt ) \
|
||||
do_klass(AbstractStackWalker_klass, java_lang_StackStreamFactory_AbstractStackWalker, Opt ) \
|
||||
do_klass(StackFrameInfo_klass, java_lang_StackFrameInfo, Opt ) \
|
||||
do_klass(LiveStackFrameInfo_klass, java_lang_LiveStackFrameInfo, Opt ) \
|
||||
\
|
||||
/* support for stack dump lock analysis */ \
|
||||
do_klass(java_util_concurrent_locks_AbstractOwnableSynchronizer_klass, java_util_concurrent_locks_AbstractOwnableSynchronizer, Pre ) \
|
||||
\
|
||||
/* Preload boxing klasses */ \
|
||||
do_klass(Boolean_klass, java_lang_Boolean, Pre ) \
|
||||
do_klass(Character_klass, java_lang_Character, Pre ) \
|
||||
do_klass(Float_klass, java_lang_Float, Pre ) \
|
||||
do_klass(Double_klass, java_lang_Double, Pre ) \
|
||||
do_klass(Byte_klass, java_lang_Byte, Pre ) \
|
||||
do_klass(Short_klass, java_lang_Short, Pre ) \
|
||||
do_klass(Integer_klass, java_lang_Integer, Pre ) \
|
||||
do_klass(Long_klass, java_lang_Long, Pre ) \
|
||||
\
|
||||
/* JVMCI classes. These are loaded on-demand. */ \
|
||||
JVMCI_WK_KLASSES_DO(do_klass) \
|
||||
\
|
||||
#define WK_KLASSES_DO(do_klass) \
|
||||
/* well-known classes */ \
|
||||
do_klass(Object_klass, java_lang_Object ) \
|
||||
do_klass(String_klass, java_lang_String ) \
|
||||
do_klass(Class_klass, java_lang_Class ) \
|
||||
do_klass(Cloneable_klass, java_lang_Cloneable ) \
|
||||
do_klass(ClassLoader_klass, java_lang_ClassLoader ) \
|
||||
do_klass(Serializable_klass, java_io_Serializable ) \
|
||||
do_klass(System_klass, java_lang_System ) \
|
||||
do_klass(Throwable_klass, java_lang_Throwable ) \
|
||||
do_klass(Error_klass, java_lang_Error ) \
|
||||
do_klass(ThreadDeath_klass, java_lang_ThreadDeath ) \
|
||||
do_klass(Exception_klass, java_lang_Exception ) \
|
||||
do_klass(RuntimeException_klass, java_lang_RuntimeException ) \
|
||||
do_klass(SecurityManager_klass, java_lang_SecurityManager ) \
|
||||
do_klass(ProtectionDomain_klass, java_security_ProtectionDomain ) \
|
||||
do_klass(AccessControlContext_klass, java_security_AccessControlContext ) \
|
||||
do_klass(SecureClassLoader_klass, java_security_SecureClassLoader ) \
|
||||
do_klass(ClassNotFoundException_klass, java_lang_ClassNotFoundException ) \
|
||||
do_klass(NoClassDefFoundError_klass, java_lang_NoClassDefFoundError ) \
|
||||
do_klass(LinkageError_klass, java_lang_LinkageError ) \
|
||||
do_klass(ClassCastException_klass, java_lang_ClassCastException ) \
|
||||
do_klass(ArrayStoreException_klass, java_lang_ArrayStoreException ) \
|
||||
do_klass(VirtualMachineError_klass, java_lang_VirtualMachineError ) \
|
||||
do_klass(OutOfMemoryError_klass, java_lang_OutOfMemoryError ) \
|
||||
do_klass(StackOverflowError_klass, java_lang_StackOverflowError ) \
|
||||
do_klass(IllegalMonitorStateException_klass, java_lang_IllegalMonitorStateException ) \
|
||||
do_klass(Reference_klass, java_lang_ref_Reference ) \
|
||||
\
|
||||
/* Preload ref klasses and set reference types */ \
|
||||
do_klass(SoftReference_klass, java_lang_ref_SoftReference ) \
|
||||
do_klass(WeakReference_klass, java_lang_ref_WeakReference ) \
|
||||
do_klass(FinalReference_klass, java_lang_ref_FinalReference ) \
|
||||
do_klass(PhantomReference_klass, java_lang_ref_PhantomReference ) \
|
||||
do_klass(Finalizer_klass, java_lang_ref_Finalizer ) \
|
||||
\
|
||||
do_klass(Thread_klass, java_lang_Thread ) \
|
||||
do_klass(ThreadGroup_klass, java_lang_ThreadGroup ) \
|
||||
do_klass(Properties_klass, java_util_Properties ) \
|
||||
do_klass(Module_klass, java_lang_Module ) \
|
||||
do_klass(reflect_AccessibleObject_klass, java_lang_reflect_AccessibleObject ) \
|
||||
do_klass(reflect_Field_klass, java_lang_reflect_Field ) \
|
||||
do_klass(reflect_Parameter_klass, java_lang_reflect_Parameter ) \
|
||||
do_klass(reflect_Method_klass, java_lang_reflect_Method ) \
|
||||
do_klass(reflect_Constructor_klass, java_lang_reflect_Constructor ) \
|
||||
\
|
||||
/* NOTE: needed too early in bootstrapping process to have checks based on JDK version */ \
|
||||
/* It's okay if this turns out to be NULL in non-1.4 JDKs. */ \
|
||||
do_klass(reflect_MagicAccessorImpl_klass, reflect_MagicAccessorImpl ) \
|
||||
do_klass(reflect_MethodAccessorImpl_klass, reflect_MethodAccessorImpl ) \
|
||||
do_klass(reflect_ConstructorAccessorImpl_klass, reflect_ConstructorAccessorImpl ) \
|
||||
do_klass(reflect_DelegatingClassLoader_klass, reflect_DelegatingClassLoader ) \
|
||||
do_klass(reflect_ConstantPool_klass, reflect_ConstantPool ) \
|
||||
do_klass(reflect_UnsafeStaticFieldAccessorImpl_klass, reflect_UnsafeStaticFieldAccessorImpl ) \
|
||||
do_klass(reflect_CallerSensitive_klass, reflect_CallerSensitive ) \
|
||||
\
|
||||
/* support for dynamic typing; it's OK if these are NULL in earlier JDKs */ \
|
||||
do_klass(DirectMethodHandle_klass, java_lang_invoke_DirectMethodHandle ) \
|
||||
do_klass(MethodHandle_klass, java_lang_invoke_MethodHandle ) \
|
||||
do_klass(VarHandle_klass, java_lang_invoke_VarHandle ) \
|
||||
do_klass(MemberName_klass, java_lang_invoke_MemberName ) \
|
||||
do_klass(ResolvedMethodName_klass, java_lang_invoke_ResolvedMethodName ) \
|
||||
do_klass(MethodHandleNatives_klass, java_lang_invoke_MethodHandleNatives ) \
|
||||
do_klass(LambdaForm_klass, java_lang_invoke_LambdaForm ) \
|
||||
do_klass(MethodType_klass, java_lang_invoke_MethodType ) \
|
||||
do_klass(BootstrapMethodError_klass, java_lang_BootstrapMethodError ) \
|
||||
do_klass(CallSite_klass, java_lang_invoke_CallSite ) \
|
||||
do_klass(Context_klass, java_lang_invoke_MethodHandleNatives_CallSiteContext ) \
|
||||
do_klass(ConstantCallSite_klass, java_lang_invoke_ConstantCallSite ) \
|
||||
do_klass(MutableCallSite_klass, java_lang_invoke_MutableCallSite ) \
|
||||
do_klass(VolatileCallSite_klass, java_lang_invoke_VolatileCallSite ) \
|
||||
/* Note: MethodHandle must be first, and VolatileCallSite last in group */ \
|
||||
\
|
||||
do_klass(AssertionStatusDirectives_klass, java_lang_AssertionStatusDirectives ) \
|
||||
do_klass(StringBuffer_klass, java_lang_StringBuffer ) \
|
||||
do_klass(StringBuilder_klass, java_lang_StringBuilder ) \
|
||||
do_klass(internal_Unsafe_klass, jdk_internal_misc_Unsafe ) \
|
||||
do_klass(module_Modules_klass, jdk_internal_module_Modules ) \
|
||||
\
|
||||
/* support for CDS */ \
|
||||
do_klass(ByteArrayInputStream_klass, java_io_ByteArrayInputStream ) \
|
||||
do_klass(URL_klass, java_net_URL ) \
|
||||
do_klass(Jar_Manifest_klass, java_util_jar_Manifest ) \
|
||||
do_klass(jdk_internal_loader_ClassLoaders_klass, jdk_internal_loader_ClassLoaders ) \
|
||||
do_klass(jdk_internal_loader_ClassLoaders_AppClassLoader_klass, jdk_internal_loader_ClassLoaders_AppClassLoader) \
|
||||
do_klass(jdk_internal_loader_ClassLoaders_PlatformClassLoader_klass, jdk_internal_loader_ClassLoaders_PlatformClassLoader) \
|
||||
do_klass(CodeSource_klass, java_security_CodeSource ) \
|
||||
\
|
||||
do_klass(StackTraceElement_klass, java_lang_StackTraceElement ) \
|
||||
\
|
||||
/* It's okay if this turns out to be NULL in non-1.4 JDKs. */ \
|
||||
do_klass(nio_Buffer_klass, java_nio_Buffer ) \
|
||||
\
|
||||
/* Stack Walking */ \
|
||||
do_klass(StackWalker_klass, java_lang_StackWalker ) \
|
||||
do_klass(AbstractStackWalker_klass, java_lang_StackStreamFactory_AbstractStackWalker ) \
|
||||
do_klass(StackFrameInfo_klass, java_lang_StackFrameInfo ) \
|
||||
do_klass(LiveStackFrameInfo_klass, java_lang_LiveStackFrameInfo ) \
|
||||
\
|
||||
/* support for stack dump lock analysis */ \
|
||||
do_klass(java_util_concurrent_locks_AbstractOwnableSynchronizer_klass, java_util_concurrent_locks_AbstractOwnableSynchronizer) \
|
||||
\
|
||||
/* Preload boxing klasses */ \
|
||||
do_klass(Boolean_klass, java_lang_Boolean ) \
|
||||
do_klass(Character_klass, java_lang_Character ) \
|
||||
do_klass(Float_klass, java_lang_Float ) \
|
||||
do_klass(Double_klass, java_lang_Double ) \
|
||||
do_klass(Byte_klass, java_lang_Byte ) \
|
||||
do_klass(Short_klass, java_lang_Short ) \
|
||||
do_klass(Integer_klass, java_lang_Integer ) \
|
||||
do_klass(Long_klass, java_lang_Long ) \
|
||||
\
|
||||
/* JVMCI classes. These are loaded on-demand. */ \
|
||||
JVMCI_WK_KLASSES_DO(do_klass) \
|
||||
\
|
||||
/*end*/
|
||||
|
||||
|
||||
@ -226,7 +224,7 @@ class SystemDictionary : AllStatic {
|
||||
enum WKID {
|
||||
NO_WKID = 0,
|
||||
|
||||
#define WK_KLASS_ENUM(name, symbol, ignore_o) WK_KLASS_ENUM_NAME(name), WK_KLASS_ENUM_NAME(symbol) = WK_KLASS_ENUM_NAME(name),
|
||||
#define WK_KLASS_ENUM(name, symbol) WK_KLASS_ENUM_NAME(name), WK_KLASS_ENUM_NAME(symbol) = WK_KLASS_ENUM_NAME(name),
|
||||
WK_KLASSES_DO(WK_KLASS_ENUM)
|
||||
#undef WK_KLASS_ENUM
|
||||
|
||||
@ -240,21 +238,6 @@ class SystemDictionary : AllStatic {
|
||||
FIRST_WKID = NO_WKID + 1
|
||||
};
|
||||
|
||||
enum InitOption {
|
||||
Pre, // preloaded; error if not present
|
||||
|
||||
// Order is significant. Options before this point require resolve_or_fail.
|
||||
// Options after this point will use resolve_or_null instead.
|
||||
|
||||
Opt, // preload tried; NULL if not present
|
||||
#if INCLUDE_JVMCI
|
||||
Jvmci, // preload tried; error if not present if JVMCI enabled
|
||||
#endif
|
||||
OPTION_LIMIT,
|
||||
CEIL_LG_OPTION_LIMIT = 2 // OPTION_LIMIT <= (1<<CEIL_LG_OPTION_LIMIT)
|
||||
};
|
||||
|
||||
|
||||
// Returns a class with a given class name and class loader. Loads the
|
||||
// class if needed. If not found a NoClassDefFoundError or a
|
||||
// ClassNotFoundException is thrown, depending on the value on the
|
||||
@ -414,12 +397,7 @@ public:
|
||||
return k;
|
||||
}
|
||||
|
||||
static InstanceKlass* check_klass_Pre(InstanceKlass* k) { return check_klass(k); }
|
||||
static InstanceKlass* check_klass_Opt(InstanceKlass* k) { return k; }
|
||||
|
||||
JVMCI_ONLY(static InstanceKlass* check_klass_Jvmci(InstanceKlass* k) { return k; })
|
||||
|
||||
static bool resolve_wk_klass(WKID id, int init_opt, TRAPS);
|
||||
static bool resolve_wk_klass(WKID id, TRAPS);
|
||||
static void resolve_wk_klasses_until(WKID limit_id, WKID &start_id, TRAPS);
|
||||
static void resolve_wk_klasses_through(WKID end_id, WKID &start_id, TRAPS) {
|
||||
int limit = (int)end_id + 1;
|
||||
@ -427,10 +405,13 @@ public:
|
||||
}
|
||||
|
||||
public:
|
||||
#define WK_KLASS_DECLARE(name, symbol, option) \
|
||||
static InstanceKlass* name() { return check_klass_##option(_well_known_klasses[WK_KLASS_ENUM_NAME(name)]); } \
|
||||
static InstanceKlass** name##_addr() { \
|
||||
return &SystemDictionary::_well_known_klasses[SystemDictionary::WK_KLASS_ENUM_NAME(name)]; \
|
||||
#define WK_KLASS_DECLARE(name, symbol) \
|
||||
static InstanceKlass* name() { return check_klass(_well_known_klasses[WK_KLASS_ENUM_NAME(name)]); } \
|
||||
static InstanceKlass** name##_addr() { \
|
||||
return &_well_known_klasses[SystemDictionary::WK_KLASS_ENUM_NAME(name)]; \
|
||||
} \
|
||||
static bool name##_is_loaded() { \
|
||||
return _well_known_klasses[SystemDictionary::WK_KLASS_ENUM_NAME(name)] != NULL; \
|
||||
}
|
||||
WK_KLASSES_DO(WK_KLASS_DECLARE);
|
||||
#undef WK_KLASS_DECLARE
|
||||
|
@ -323,7 +323,7 @@ class name : AllStatic {
|
||||
static void check(oop obj, const char* field_name, int offset); \
|
||||
static void compute_offsets(TRAPS); \
|
||||
public: \
|
||||
static InstanceKlass* klass() { return SystemDictionary::name##_klass(); }
|
||||
static InstanceKlass* klass() { return SystemDictionary::name##_klass_is_loaded() ? SystemDictionary::name##_klass() : NULL; }
|
||||
|
||||
#define END_CLASS };
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -27,68 +27,68 @@
|
||||
#if !INCLUDE_JVMCI
|
||||
#define JVMCI_WK_KLASSES_DO(do_klass)
|
||||
#else
|
||||
#define JVMCI_WK_KLASSES_DO(do_klass) \
|
||||
/* JVMCI classes. These are loaded on-demand. */ \
|
||||
do_klass(JVMCI_klass, jdk_vm_ci_runtime_JVMCI, Jvmci) \
|
||||
do_klass(HotSpotCompiledCode_klass, jdk_vm_ci_hotspot_HotSpotCompiledCode, Jvmci) \
|
||||
do_klass(HotSpotCompiledCode_Comment_klass, jdk_vm_ci_hotspot_HotSpotCompiledCode_Comment, Jvmci) \
|
||||
do_klass(HotSpotCompiledNmethod_klass, jdk_vm_ci_hotspot_HotSpotCompiledNmethod, Jvmci) \
|
||||
do_klass(HotSpotForeignCallTarget_klass, jdk_vm_ci_hotspot_HotSpotForeignCallTarget, Jvmci) \
|
||||
do_klass(HotSpotReferenceMap_klass, jdk_vm_ci_hotspot_HotSpotReferenceMap, Jvmci) \
|
||||
do_klass(HotSpotInstalledCode_klass, jdk_vm_ci_hotspot_HotSpotInstalledCode, Jvmci) \
|
||||
do_klass(HotSpotNmethod_klass, jdk_vm_ci_hotspot_HotSpotNmethod, Jvmci) \
|
||||
do_klass(HotSpotResolvedJavaMethodImpl_klass, jdk_vm_ci_hotspot_HotSpotResolvedJavaMethodImpl, Jvmci) \
|
||||
do_klass(HotSpotResolvedObjectTypeImpl_klass, jdk_vm_ci_hotspot_HotSpotResolvedObjectTypeImpl, Jvmci) \
|
||||
do_klass(HotSpotCompressedNullConstant_klass, jdk_vm_ci_hotspot_HotSpotCompressedNullConstant, Jvmci) \
|
||||
do_klass(HotSpotObjectConstantImpl_klass, jdk_vm_ci_hotspot_HotSpotObjectConstantImpl, Jvmci) \
|
||||
do_klass(HotSpotMetaspaceConstantImpl_klass, jdk_vm_ci_hotspot_HotSpotMetaspaceConstantImpl, Jvmci) \
|
||||
do_klass(HotSpotSentinelConstant_klass, jdk_vm_ci_hotspot_HotSpotSentinelConstant, Jvmci) \
|
||||
do_klass(HotSpotStackFrameReference_klass, jdk_vm_ci_hotspot_HotSpotStackFrameReference, Jvmci) \
|
||||
do_klass(HotSpotMetaData_klass, jdk_vm_ci_hotspot_HotSpotMetaData, Jvmci) \
|
||||
do_klass(HotSpotConstantPool_klass, jdk_vm_ci_hotspot_HotSpotConstantPool, Jvmci) \
|
||||
do_klass(HotSpotJVMCIMetaAccessContext_klass, jdk_vm_ci_hotspot_HotSpotJVMCIMetaAccessContext, Jvmci) \
|
||||
do_klass(HotSpotJVMCIRuntime_klass, jdk_vm_ci_hotspot_HotSpotJVMCIRuntime, Jvmci) \
|
||||
do_klass(HotSpotSpeculationLog_klass, jdk_vm_ci_hotspot_HotSpotSpeculationLog, Jvmci) \
|
||||
do_klass(HotSpotCompilationRequestResult_klass, jdk_vm_ci_hotspot_HotSpotCompilationRequestResult, Jvmci) \
|
||||
do_klass(VMField_klass, jdk_vm_ci_hotspot_VMField, Jvmci) \
|
||||
do_klass(VMFlag_klass, jdk_vm_ci_hotspot_VMFlag, Jvmci) \
|
||||
do_klass(VMIntrinsicMethod_klass, jdk_vm_ci_hotspot_VMIntrinsicMethod, Jvmci) \
|
||||
do_klass(Assumptions_ConcreteMethod_klass, jdk_vm_ci_meta_Assumptions_ConcreteMethod, Jvmci) \
|
||||
do_klass(Assumptions_NoFinalizableSubclass_klass, jdk_vm_ci_meta_Assumptions_NoFinalizableSubclass, Jvmci) \
|
||||
do_klass(Assumptions_ConcreteSubtype_klass, jdk_vm_ci_meta_Assumptions_ConcreteSubtype, Jvmci) \
|
||||
do_klass(Assumptions_LeafType_klass, jdk_vm_ci_meta_Assumptions_LeafType, Jvmci) \
|
||||
do_klass(Assumptions_CallSiteTargetValue_klass, jdk_vm_ci_meta_Assumptions_CallSiteTargetValue, Jvmci) \
|
||||
do_klass(Architecture_klass, jdk_vm_ci_code_Architecture, Jvmci) \
|
||||
do_klass(TargetDescription_klass, jdk_vm_ci_code_TargetDescription, Jvmci) \
|
||||
do_klass(BytecodePosition_klass, jdk_vm_ci_code_BytecodePosition, Jvmci) \
|
||||
do_klass(DebugInfo_klass, jdk_vm_ci_code_DebugInfo, Jvmci) \
|
||||
do_klass(RegisterSaveLayout_klass, jdk_vm_ci_code_RegisterSaveLayout, Jvmci) \
|
||||
do_klass(BytecodeFrame_klass, jdk_vm_ci_code_BytecodeFrame, Jvmci) \
|
||||
do_klass(InstalledCode_klass, jdk_vm_ci_code_InstalledCode, Jvmci) \
|
||||
do_klass(code_Location_klass, jdk_vm_ci_code_Location, Jvmci) \
|
||||
do_klass(code_Register_klass, jdk_vm_ci_code_Register, Jvmci) \
|
||||
do_klass(RegisterValue_klass, jdk_vm_ci_code_RegisterValue, Jvmci) \
|
||||
do_klass(StackSlot_klass, jdk_vm_ci_code_StackSlot, Jvmci) \
|
||||
do_klass(StackLockValue_klass, jdk_vm_ci_code_StackLockValue, Jvmci) \
|
||||
do_klass(VirtualObject_klass, jdk_vm_ci_code_VirtualObject, Jvmci) \
|
||||
do_klass(site_Call_klass, jdk_vm_ci_code_site_Call, Jvmci) \
|
||||
do_klass(site_ConstantReference_klass, jdk_vm_ci_code_site_ConstantReference, Jvmci) \
|
||||
do_klass(site_DataPatch_klass, jdk_vm_ci_code_site_DataPatch, Jvmci) \
|
||||
do_klass(site_DataSectionReference_klass, jdk_vm_ci_code_site_DataSectionReference, Jvmci) \
|
||||
do_klass(site_ExceptionHandler_klass, jdk_vm_ci_code_site_ExceptionHandler, Jvmci) \
|
||||
do_klass(site_Mark_klass, jdk_vm_ci_code_site_Mark, Jvmci) \
|
||||
do_klass(site_Infopoint_klass, jdk_vm_ci_code_site_Infopoint, Jvmci) \
|
||||
do_klass(site_Site_klass, jdk_vm_ci_code_site_Site, Jvmci) \
|
||||
do_klass(site_InfopointReason_klass, jdk_vm_ci_code_site_InfopointReason, Jvmci) \
|
||||
do_klass(InspectedFrameVisitor_klass, jdk_vm_ci_code_stack_InspectedFrameVisitor, Jvmci) \
|
||||
do_klass(JavaConstant_klass, jdk_vm_ci_meta_JavaConstant, Jvmci) \
|
||||
do_klass(PrimitiveConstant_klass, jdk_vm_ci_meta_PrimitiveConstant, Jvmci) \
|
||||
do_klass(RawConstant_klass, jdk_vm_ci_meta_RawConstant, Jvmci) \
|
||||
do_klass(NullConstant_klass, jdk_vm_ci_meta_NullConstant, Jvmci) \
|
||||
do_klass(ExceptionHandler_klass, jdk_vm_ci_meta_ExceptionHandler, Jvmci) \
|
||||
do_klass(JavaKind_klass, jdk_vm_ci_meta_JavaKind, Jvmci) \
|
||||
do_klass(ValueKind_klass, jdk_vm_ci_meta_ValueKind, Jvmci) \
|
||||
do_klass(Value_klass, jdk_vm_ci_meta_Value, Jvmci)
|
||||
#define JVMCI_WK_KLASSES_DO(do_klass) \
|
||||
/* JVMCI classes. These are loaded on-demand. */ \
|
||||
do_klass(JVMCI_klass, jdk_vm_ci_runtime_JVMCI ) \
|
||||
do_klass(HotSpotCompiledCode_klass, jdk_vm_ci_hotspot_HotSpotCompiledCode ) \
|
||||
do_klass(HotSpotCompiledCode_Comment_klass, jdk_vm_ci_hotspot_HotSpotCompiledCode_Comment ) \
|
||||
do_klass(HotSpotCompiledNmethod_klass, jdk_vm_ci_hotspot_HotSpotCompiledNmethod ) \
|
||||
do_klass(HotSpotForeignCallTarget_klass, jdk_vm_ci_hotspot_HotSpotForeignCallTarget ) \
|
||||
do_klass(HotSpotReferenceMap_klass, jdk_vm_ci_hotspot_HotSpotReferenceMap ) \
|
||||
do_klass(HotSpotInstalledCode_klass, jdk_vm_ci_hotspot_HotSpotInstalledCode ) \
|
||||
do_klass(HotSpotNmethod_klass, jdk_vm_ci_hotspot_HotSpotNmethod ) \
|
||||
do_klass(HotSpotResolvedJavaMethodImpl_klass, jdk_vm_ci_hotspot_HotSpotResolvedJavaMethodImpl ) \
|
||||
do_klass(HotSpotResolvedObjectTypeImpl_klass, jdk_vm_ci_hotspot_HotSpotResolvedObjectTypeImpl ) \
|
||||
do_klass(HotSpotCompressedNullConstant_klass, jdk_vm_ci_hotspot_HotSpotCompressedNullConstant ) \
|
||||
do_klass(HotSpotObjectConstantImpl_klass, jdk_vm_ci_hotspot_HotSpotObjectConstantImpl ) \
|
||||
do_klass(HotSpotMetaspaceConstantImpl_klass, jdk_vm_ci_hotspot_HotSpotMetaspaceConstantImpl ) \
|
||||
do_klass(HotSpotSentinelConstant_klass, jdk_vm_ci_hotspot_HotSpotSentinelConstant ) \
|
||||
do_klass(HotSpotStackFrameReference_klass, jdk_vm_ci_hotspot_HotSpotStackFrameReference ) \
|
||||
do_klass(HotSpotMetaData_klass, jdk_vm_ci_hotspot_HotSpotMetaData ) \
|
||||
do_klass(HotSpotConstantPool_klass, jdk_vm_ci_hotspot_HotSpotConstantPool ) \
|
||||
do_klass(HotSpotJVMCIMetaAccessContext_klass, jdk_vm_ci_hotspot_HotSpotJVMCIMetaAccessContext ) \
|
||||
do_klass(HotSpotJVMCIRuntime_klass, jdk_vm_ci_hotspot_HotSpotJVMCIRuntime ) \
|
||||
do_klass(HotSpotSpeculationLog_klass, jdk_vm_ci_hotspot_HotSpotSpeculationLog ) \
|
||||
do_klass(HotSpotCompilationRequestResult_klass, jdk_vm_ci_hotspot_HotSpotCompilationRequestResult) \
|
||||
do_klass(VMField_klass, jdk_vm_ci_hotspot_VMField ) \
|
||||
do_klass(VMFlag_klass, jdk_vm_ci_hotspot_VMFlag ) \
|
||||
do_klass(VMIntrinsicMethod_klass, jdk_vm_ci_hotspot_VMIntrinsicMethod ) \
|
||||
do_klass(Assumptions_ConcreteMethod_klass, jdk_vm_ci_meta_Assumptions_ConcreteMethod ) \
|
||||
do_klass(Assumptions_NoFinalizableSubclass_klass, jdk_vm_ci_meta_Assumptions_NoFinalizableSubclass ) \
|
||||
do_klass(Assumptions_ConcreteSubtype_klass, jdk_vm_ci_meta_Assumptions_ConcreteSubtype ) \
|
||||
do_klass(Assumptions_LeafType_klass, jdk_vm_ci_meta_Assumptions_LeafType ) \
|
||||
do_klass(Assumptions_CallSiteTargetValue_klass, jdk_vm_ci_meta_Assumptions_CallSiteTargetValue ) \
|
||||
do_klass(Architecture_klass, jdk_vm_ci_code_Architecture ) \
|
||||
do_klass(TargetDescription_klass, jdk_vm_ci_code_TargetDescription ) \
|
||||
do_klass(BytecodePosition_klass, jdk_vm_ci_code_BytecodePosition ) \
|
||||
do_klass(DebugInfo_klass, jdk_vm_ci_code_DebugInfo ) \
|
||||
do_klass(RegisterSaveLayout_klass, jdk_vm_ci_code_RegisterSaveLayout ) \
|
||||
do_klass(BytecodeFrame_klass, jdk_vm_ci_code_BytecodeFrame ) \
|
||||
do_klass(InstalledCode_klass, jdk_vm_ci_code_InstalledCode ) \
|
||||
do_klass(code_Location_klass, jdk_vm_ci_code_Location ) \
|
||||
do_klass(code_Register_klass, jdk_vm_ci_code_Register ) \
|
||||
do_klass(RegisterValue_klass, jdk_vm_ci_code_RegisterValue ) \
|
||||
do_klass(StackSlot_klass, jdk_vm_ci_code_StackSlot ) \
|
||||
do_klass(StackLockValue_klass, jdk_vm_ci_code_StackLockValue ) \
|
||||
do_klass(VirtualObject_klass, jdk_vm_ci_code_VirtualObject ) \
|
||||
do_klass(site_Call_klass, jdk_vm_ci_code_site_Call ) \
|
||||
do_klass(site_ConstantReference_klass, jdk_vm_ci_code_site_ConstantReference ) \
|
||||
do_klass(site_DataPatch_klass, jdk_vm_ci_code_site_DataPatch ) \
|
||||
do_klass(site_DataSectionReference_klass, jdk_vm_ci_code_site_DataSectionReference ) \
|
||||
do_klass(site_ExceptionHandler_klass, jdk_vm_ci_code_site_ExceptionHandler ) \
|
||||
do_klass(site_Mark_klass, jdk_vm_ci_code_site_Mark ) \
|
||||
do_klass(site_Infopoint_klass, jdk_vm_ci_code_site_Infopoint ) \
|
||||
do_klass(site_Site_klass, jdk_vm_ci_code_site_Site ) \
|
||||
do_klass(site_InfopointReason_klass, jdk_vm_ci_code_site_InfopointReason ) \
|
||||
do_klass(InspectedFrameVisitor_klass, jdk_vm_ci_code_stack_InspectedFrameVisitor ) \
|
||||
do_klass(JavaConstant_klass, jdk_vm_ci_meta_JavaConstant ) \
|
||||
do_klass(PrimitiveConstant_klass, jdk_vm_ci_meta_PrimitiveConstant ) \
|
||||
do_klass(RawConstant_klass, jdk_vm_ci_meta_RawConstant ) \
|
||||
do_klass(NullConstant_klass, jdk_vm_ci_meta_NullConstant ) \
|
||||
do_klass(ExceptionHandler_klass, jdk_vm_ci_meta_ExceptionHandler ) \
|
||||
do_klass(JavaKind_klass, jdk_vm_ci_meta_JavaKind ) \
|
||||
do_klass(ValueKind_klass, jdk_vm_ci_meta_ValueKind ) \
|
||||
do_klass(Value_klass, jdk_vm_ci_meta_Value )
|
||||
#endif
|
||||
|
||||
#endif // SHARE_VM_JVMCI_SYSTEMDICTIONARY_JVMCI_HPP
|
||||
|
@ -503,7 +503,8 @@ Reflection::VerifyClassAccessResults Reflection::verify_class_access(
|
||||
}
|
||||
// Allow all accesses from jdk/internal/reflect/MagicAccessorImpl subclasses to
|
||||
// succeed trivially.
|
||||
if (current_class->is_subclass_of(SystemDictionary::reflect_MagicAccessorImpl_klass())) {
|
||||
if (SystemDictionary::reflect_MagicAccessorImpl_klass_is_loaded() &&
|
||||
current_class->is_subclass_of(SystemDictionary::reflect_MagicAccessorImpl_klass())) {
|
||||
return ACCESS_OK;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user