Mercurial > hg > truffle
diff src/share/vm/classfile/systemDictionary.hpp @ 6948:e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Mon, 12 Nov 2012 23:14:12 +0100 |
parents | fd71ca8c5f88 4735d2c84362 |
children | 41938af2b3d8 |
line wrap: on
line diff
--- a/src/share/vm/classfile/systemDictionary.hpp Mon Nov 12 18:11:17 2012 +0100 +++ b/src/share/vm/classfile/systemDictionary.hpp Mon Nov 12 23:14:12 2012 +0100 @@ -36,7 +36,7 @@ // The system dictionary stores all loaded classes and maps: // -// [class name,class loader] -> class i.e. [Symbol*,oop] -> klassOop +// [class name,class loader] -> class i.e. [Symbol*,oop] -> Klass* // // Classes are loaded lazily. The default VM class loader is // represented as NULL. @@ -92,142 +92,141 @@ // The order of these definitions is significant; it is the order in which // preloading is actually performed by initialize_preloaded_classes. -#define WK_KLASSES_DO(template) \ - /* well-known classes */ \ - template(Object_klass, java_lang_Object, Pre) \ - template(String_klass, java_lang_String, Pre) \ - template(Class_klass, java_lang_Class, Pre) \ - template(Cloneable_klass, java_lang_Cloneable, Pre) \ - template(ClassLoader_klass, java_lang_ClassLoader, Pre) \ - template(Serializable_klass, java_io_Serializable, Pre) \ - template(System_klass, java_lang_System, Pre) \ - template(Throwable_klass, java_lang_Throwable, Pre) \ - template(Error_klass, java_lang_Error, Pre) \ - template(ThreadDeath_klass, java_lang_ThreadDeath, Pre) \ - template(Exception_klass, java_lang_Exception, Pre) \ - template(RuntimeException_klass, java_lang_RuntimeException, Pre) \ - template(ProtectionDomain_klass, java_security_ProtectionDomain, Pre) \ - template(AccessControlContext_klass, java_security_AccessControlContext, Pre) \ - template(ClassNotFoundException_klass, java_lang_ClassNotFoundException, Pre) \ - template(NoClassDefFoundError_klass, java_lang_NoClassDefFoundError, Pre) \ - template(LinkageError_klass, java_lang_LinkageError, Pre) \ - template(ClassCastException_klass, java_lang_ClassCastException, Pre) \ - template(ArrayStoreException_klass, java_lang_ArrayStoreException, Pre) \ - template(VirtualMachineError_klass, java_lang_VirtualMachineError, Pre) \ - template(OutOfMemoryError_klass, java_lang_OutOfMemoryError, Pre) \ - template(StackOverflowError_klass, java_lang_StackOverflowError, Pre) \ - template(IllegalMonitorStateException_klass, java_lang_IllegalMonitorStateException, Pre) \ - template(Reference_klass, java_lang_ref_Reference, Pre) \ - \ - /* Preload ref klasses and set reference types */ \ - template(SoftReference_klass, java_lang_ref_SoftReference, Pre) \ - template(WeakReference_klass, java_lang_ref_WeakReference, Pre) \ - template(FinalReference_klass, java_lang_ref_FinalReference, Pre) \ - template(PhantomReference_klass, java_lang_ref_PhantomReference, Pre) \ - template(Finalizer_klass, java_lang_ref_Finalizer, Pre) \ - \ - template(Thread_klass, java_lang_Thread, Pre) \ - template(ThreadGroup_klass, java_lang_ThreadGroup, Pre) \ - template(Properties_klass, java_util_Properties, Pre) \ - template(reflect_AccessibleObject_klass, java_lang_reflect_AccessibleObject, Pre) \ - template(reflect_Field_klass, java_lang_reflect_Field, Pre) \ - template(reflect_Method_klass, java_lang_reflect_Method, Pre) \ - template(reflect_Constructor_klass, java_lang_reflect_Constructor, Pre) \ - \ +#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(ProtectionDomain_klass, java_security_ProtectionDomain, Pre ) \ + do_klass(AccessControlContext_klass, java_security_AccessControlContext, 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(reflect_AccessibleObject_klass, java_lang_reflect_AccessibleObject, Pre ) \ + do_klass(reflect_Field_klass, java_lang_reflect_Field, Pre ) \ + 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 */ \ /* Universe::is_gte_jdk14x_version() is not set up by this point. */ \ /* It's okay if this turns out to be NULL in non-1.4 JDKs. */ \ - template(reflect_MagicAccessorImpl_klass, sun_reflect_MagicAccessorImpl, Opt) \ - template(reflect_MethodAccessorImpl_klass, sun_reflect_MethodAccessorImpl, Opt_Only_JDK14NewRef) \ - template(reflect_ConstructorAccessorImpl_klass, sun_reflect_ConstructorAccessorImpl, Opt_Only_JDK14NewRef) \ - template(reflect_DelegatingClassLoader_klass, sun_reflect_DelegatingClassLoader, Opt) \ - template(reflect_ConstantPool_klass, sun_reflect_ConstantPool, Opt_Only_JDK15) \ - template(reflect_UnsafeStaticFieldAccessorImpl_klass, sun_reflect_UnsafeStaticFieldAccessorImpl, Opt_Only_JDK15) \ - \ - /* support for dynamic typing; it's OK if these are NULL in earlier JDKs */ \ - template(MethodHandle_klass, java_lang_invoke_MethodHandle, Pre_JSR292) \ - template(MemberName_klass, java_lang_invoke_MemberName, Pre_JSR292) \ - template(MethodHandleNatives_klass, java_lang_invoke_MethodHandleNatives, Pre_JSR292) \ - template(LambdaForm_klass, java_lang_invoke_LambdaForm, Opt) \ - template(MethodType_klass, java_lang_invoke_MethodType, Pre_JSR292) \ - template(BootstrapMethodError_klass, java_lang_BootstrapMethodError, Pre_JSR292) \ - template(CallSite_klass, java_lang_invoke_CallSite, Pre_JSR292) \ - template(ConstantCallSite_klass, java_lang_invoke_ConstantCallSite, Pre_JSR292) \ - template(MutableCallSite_klass, java_lang_invoke_MutableCallSite, Pre_JSR292) \ - template(VolatileCallSite_klass, java_lang_invoke_VolatileCallSite, Pre_JSR292) \ - /* Note: MethodHandle must be first, and VolatileCallSite last in group */ \ - \ - template(StringBuffer_klass, java_lang_StringBuffer, Pre) \ - template(StringBuilder_klass, java_lang_StringBuilder, Pre) \ - \ - /* It's NULL in non-1.4 JDKs. */ \ - template(StackTraceElement_klass, java_lang_StackTraceElement, Opt) \ - /* Universe::is_gte_jdk14x_version() is not set up by this point. */ \ - /* It's okay if this turns out to be NULL in non-1.4 JDKs. */ \ - template(nio_Buffer_klass, java_nio_Buffer, Opt) \ - \ - template(DownloadManager_klass, sun_jkernel_DownloadManager, Opt_Kernel) \ - \ - template(PostVMInitHook_klass, sun_misc_PostVMInitHook, Opt) \ - \ - /* Preload boxing klasses */ \ - template(Boolean_klass, java_lang_Boolean, Pre) \ - template(Character_klass, java_lang_Character, Pre) \ - template(Float_klass, java_lang_Float, Pre) \ - template(Double_klass, java_lang_Double, Pre) \ - template(Byte_klass, java_lang_Byte, Pre) \ - template(Short_klass, java_lang_Short, Pre) \ - template(Integer_klass, java_lang_Integer, Pre) \ - template(Long_klass, java_lang_Long, Pre) \ - \ - /* Support for Graal */ \ - template(GraalBitMap_klass, java_util_BitSet, Opt) \ - /* graal.hotspot */ \ - template(HotSpotKlassOop_klass, com_oracle_graal_hotspot_HotSpotKlassOop, Opt) \ - template(HotSpotCompilationResult_klass, com_oracle_graal_hotspot_HotSpotCompilationResult, Opt) \ - template(HotSpotCodeInfo_klass, com_oracle_graal_hotspot_meta_HotSpotCodeInfo, Opt) \ - template(HotSpotCompiledMethod_klass, com_oracle_graal_hotspot_meta_HotSpotCompiledMethod, Opt) \ - template(HotSpotJavaType_klass, com_oracle_graal_hotspot_meta_HotSpotJavaType, Opt) \ - template(HotSpotMethodData_klass, com_oracle_graal_hotspot_meta_HotSpotMethodData, Opt) \ - template(HotSpotResolvedJavaField_klass, com_oracle_graal_hotspot_meta_HotSpotResolvedJavaField, Opt) \ - template(HotSpotResolvedJavaMethod_klass, com_oracle_graal_hotspot_meta_HotSpotResolvedJavaMethod, Opt) \ - template(HotSpotResolvedJavaType_klass, com_oracle_graal_hotspot_meta_HotSpotResolvedJavaType, Opt) \ - /* graal.api.code */ \ - template(Assumptions_klass, com_oracle_graal_api_code_Assumptions, Opt) \ - template(Assumptions_ConcreteMethod_klass, com_oracle_graal_api_code_Assumptions_ConcreteMethod, Opt) \ - template(Assumptions_ConcreteSubtype_klass, com_oracle_graal_api_code_Assumptions_ConcreteSubtype, Opt) \ - template(Assumptions_MethodContents_klass, com_oracle_graal_api_code_Assumptions_MethodContents, Opt) \ - template(BytecodePosition_klass, com_oracle_graal_api_code_BytecodePosition, Opt) \ - template(DebugInfo_klass, com_oracle_graal_api_code_DebugInfo, Opt) \ - template(BytecodeFrame_klass, com_oracle_graal_api_code_BytecodeFrame, Opt) \ - template(CompilationResult_klass, com_oracle_graal_api_code_CompilationResult, Opt) \ - template(CompilationResult_Call_klass, com_oracle_graal_api_code_CompilationResult_Call, Opt) \ - template(CompilationResult_DataPatch_klass, com_oracle_graal_api_code_CompilationResult_DataPatch, Opt) \ - template(CompilationResult_ExceptionHandler_klass, com_oracle_graal_api_code_CompilationResult_ExceptionHandler, Opt) \ - template(CompilationResult_Mark_klass, com_oracle_graal_api_code_CompilationResult_Mark, Opt) \ - template(CompilationResult_Safepoint_klass, com_oracle_graal_api_code_CompilationResult_Safepoint, Opt) \ - template(CompilationResult_Site_klass, com_oracle_graal_api_code_CompilationResult_Site, Opt) \ - template(code_MonitorValue_klass, com_oracle_graal_api_code_MonitorValue, Opt) \ - template(code_Register_klass, com_oracle_graal_api_code_Register, Opt) \ - template(RegisterValue_klass, com_oracle_graal_api_code_RegisterValue, Opt) \ - template(StackSlot_klass, com_oracle_graal_api_code_StackSlot, Opt) \ - template(VirtualObject_klass, com_oracle_graal_api_code_VirtualObject, Opt) \ - /* graal.api.meta */ \ - template(Constant_klass, com_oracle_graal_api_meta_Constant, Opt) \ - template(ExceptionHandler_klass, com_oracle_graal_api_meta_ExceptionHandler, Opt) \ - template(Kind_klass, com_oracle_graal_api_meta_Kind, Opt) \ - template(JavaMethod_klass, com_oracle_graal_api_meta_JavaMethod, Opt) \ - template(JavaType_klass, com_oracle_graal_api_meta_JavaType, Opt) \ - template(ResolvedJavaField_klass, com_oracle_graal_api_meta_ResolvedJavaField, Opt) \ - template(Value_klass, com_oracle_graal_api_meta_Value, Opt) \ + do_klass(lambda_MagicLambdaImpl_klass, java_lang_invoke_MagicLambdaImpl, Opt ) \ + do_klass(reflect_MagicAccessorImpl_klass, sun_reflect_MagicAccessorImpl, Opt ) \ + do_klass(reflect_MethodAccessorImpl_klass, sun_reflect_MethodAccessorImpl, Opt_Only_JDK14NewRef) \ + do_klass(reflect_ConstructorAccessorImpl_klass, sun_reflect_ConstructorAccessorImpl, Opt_Only_JDK14NewRef) \ + do_klass(reflect_DelegatingClassLoader_klass, sun_reflect_DelegatingClassLoader, Opt ) \ + do_klass(reflect_ConstantPool_klass, sun_reflect_ConstantPool, Opt_Only_JDK15 ) \ + do_klass(reflect_UnsafeStaticFieldAccessorImpl_klass, sun_reflect_UnsafeStaticFieldAccessorImpl, Opt_Only_JDK15 ) \ + \ + /* support for dynamic typing; it's OK if these are NULL in earlier JDKs */ \ + do_klass(MethodHandle_klass, java_lang_invoke_MethodHandle, Pre_JSR292 ) \ + do_klass(MemberName_klass, java_lang_invoke_MemberName, Pre_JSR292 ) \ + do_klass(MethodHandleNatives_klass, java_lang_invoke_MethodHandleNatives, Pre_JSR292 ) \ + do_klass(LambdaForm_klass, java_lang_invoke_LambdaForm, Opt ) \ + do_klass(MethodType_klass, java_lang_invoke_MethodType, Pre_JSR292 ) \ + do_klass(BootstrapMethodError_klass, java_lang_BootstrapMethodError, Pre_JSR292 ) \ + do_klass(CallSite_klass, java_lang_invoke_CallSite, Pre_JSR292 ) \ + do_klass(ConstantCallSite_klass, java_lang_invoke_ConstantCallSite, Pre_JSR292 ) \ + do_klass(MutableCallSite_klass, java_lang_invoke_MutableCallSite, Pre_JSR292 ) \ + do_klass(VolatileCallSite_klass, java_lang_invoke_VolatileCallSite, Pre_JSR292 ) \ + /* Note: MethodHandle must be first, and VolatileCallSite last in group */ \ + \ + do_klass(StringBuffer_klass, java_lang_StringBuffer, Pre ) \ + do_klass(StringBuilder_klass, java_lang_StringBuilder, Pre ) \ + \ + /* It's NULL in non-1.4 JDKs. */ \ + do_klass(StackTraceElement_klass, java_lang_StackTraceElement, Opt ) \ + /* Universe::is_gte_jdk14x_version() is not set up by this point. */ \ + /* It's okay if this turns out to be NULL in non-1.4 JDKs. */ \ + do_klass(nio_Buffer_klass, java_nio_Buffer, Opt ) \ + \ + do_klass(DownloadManager_klass, sun_jkernel_DownloadManager, Opt_Kernel ) \ + \ + do_klass(PostVMInitHook_klass, sun_misc_PostVMInitHook, Opt ) \ + \ + /* 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 ) \ + \ + /* Support for Graal */ \ + do_klass(GraalBitMap_klass, java_util_BitSet, Opt) \ + /* graal.hotspot */ \ + do_klass(HotSpotKlassOop_klass, com_oracle_graal_hotspot_HotSpotKlassOop, Opt) \ + do_klass(HotSpotCompilationResult_klass, com_oracle_graal_hotspot_HotSpotCompilationResult, Opt) \ + do_klass(HotSpotCodeInfo_klass, com_oracle_graal_hotspot_meta_HotSpotCodeInfo, Opt) \ + do_klass(HotSpotInstalledCode_klass, com_oracle_graal_hotspot_meta_HotSpotInstalledCode, Opt) \ + do_klass(HotSpotJavaType_klass, com_oracle_graal_hotspot_meta_HotSpotJavaType, Opt) \ + do_klass(HotSpotMethodData_klass, com_oracle_graal_hotspot_meta_HotSpotMethodData, Opt) \ + do_klass(HotSpotResolvedJavaField_klass, com_oracle_graal_hotspot_meta_HotSpotResolvedJavaField, Opt) \ + do_klass(HotSpotResolvedJavaMethod_klass, com_oracle_graal_hotspot_meta_HotSpotResolvedJavaMethod, Opt) \ + do_klass(HotSpotResolvedJavaType_klass, com_oracle_graal_hotspot_meta_HotSpotResolvedJavaType, Opt) \ + /* graal.api.code */ \ + do_klass(Assumptions_klass, com_oracle_graal_api_code_Assumptions, Opt) \ + do_klass(Assumptions_ConcreteMethod_klass, com_oracle_graal_api_code_Assumptions_ConcreteMethod, Opt) \ + do_klass(Assumptions_ConcreteSubtype_klass, com_oracle_graal_api_code_Assumptions_ConcreteSubtype, Opt) \ + do_klass(Assumptions_MethodContents_klass, com_oracle_graal_api_code_Assumptions_MethodContents, Opt) \ + do_klass(BytecodePosition_klass, com_oracle_graal_api_code_BytecodePosition, Opt) \ + do_klass(DebugInfo_klass, com_oracle_graal_api_code_DebugInfo, Opt) \ + do_klass(BytecodeFrame_klass, com_oracle_graal_api_code_BytecodeFrame, Opt) \ + do_klass(CompilationResult_klass, com_oracle_graal_api_code_CompilationResult, Opt) \ + do_klass(CompilationResult_Call_klass, com_oracle_graal_api_code_CompilationResult_Call, Opt) \ + do_klass(CompilationResult_DataPatch_klass, com_oracle_graal_api_code_CompilationResult_DataPatch, Opt) \ + do_klass(CompilationResult_ExceptionHandler_klass, com_oracle_graal_api_code_CompilationResult_ExceptionHandler, Opt) \ + do_klass(CompilationResult_Mark_klass, com_oracle_graal_api_code_CompilationResult_Mark, Opt) \ + do_klass(CompilationResult_Safepoint_klass, com_oracle_graal_api_code_CompilationResult_Safepoint, Opt) \ + do_klass(CompilationResult_Site_klass, com_oracle_graal_api_code_CompilationResult_Site, Opt) \ + do_klass(code_MonitorValue_klass, com_oracle_graal_api_code_MonitorValue, Opt) \ + do_klass(code_Register_klass, com_oracle_graal_api_code_Register, Opt) \ + do_klass(RegisterValue_klass, com_oracle_graal_api_code_RegisterValue, Opt) \ + do_klass(StackSlot_klass, com_oracle_graal_api_code_StackSlot, Opt) \ + do_klass(VirtualObject_klass, com_oracle_graal_api_code_VirtualObject, Opt) \ + /* graal.api.meta */ \ + do_klass(Constant_klass, com_oracle_graal_api_meta_Constant, Opt) \ + do_klass(ExceptionHandler_klass, com_oracle_graal_api_meta_ExceptionHandler, Opt) \ + do_klass(Kind_klass, com_oracle_graal_api_meta_Kind, Opt) \ + do_klass(JavaMethod_klass, com_oracle_graal_api_meta_JavaMethod, Opt) \ + do_klass(JavaType_klass, com_oracle_graal_api_meta_JavaType, Opt) \ + do_klass(Value_klass, com_oracle_graal_api_meta_Value, Opt) \ + /*end*/ class SystemDictionary : AllStatic { friend class VMStructs; - friend class CompactingPermGenGen; friend class SystemDictionaryHandles; - NOT_PRODUCT(friend class instanceKlassKlass;) public: enum WKID { @@ -264,25 +263,25 @@ // throw_error flag. For most uses the throw_error argument should be set // to true. - static klassOop resolve_or_fail(Symbol* class_name, Handle class_loader, Handle protection_domain, bool throw_error, TRAPS); + static Klass* resolve_or_fail(Symbol* class_name, Handle class_loader, Handle protection_domain, bool throw_error, TRAPS); // Convenient call for null loader and protection domain. - static klassOop resolve_or_fail(Symbol* class_name, bool throw_error, TRAPS); + static Klass* resolve_or_fail(Symbol* class_name, bool throw_error, TRAPS); private: // handle error translation for resolve_or_null results - static klassOop handle_resolution_exception(Symbol* class_name, Handle class_loader, Handle protection_domain, bool throw_error, KlassHandle klass_h, TRAPS); + static Klass* handle_resolution_exception(Symbol* class_name, Handle class_loader, Handle protection_domain, bool throw_error, KlassHandle klass_h, TRAPS); public: // Returns a class with a given class name and class loader. // Loads the class if needed. If not found NULL is returned. - static klassOop resolve_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS); + static Klass* resolve_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS); // Version with null loader and protection domain - static klassOop resolve_or_null(Symbol* class_name, TRAPS); + static Klass* resolve_or_null(Symbol* class_name, TRAPS); // Resolve a superclass or superinterface. Called from ClassFileParser, // parse_interfaces, resolve_instance_class_or_null, load_shared_class // "child_name" is the class whose super class or interface is being resolved. - static klassOop resolve_super_or_fail(Symbol* child_name, + static Klass* resolve_super_or_fail(Symbol* child_name, Symbol* class_name, Handle class_loader, Handle protection_domain, @@ -291,7 +290,7 @@ // Parse new stream. This won't update the system dictionary or // class hierarchy, simply parse the stream. Used by JVMTI RedefineClasses. - static klassOop parse_stream(Symbol* class_name, + static Klass* parse_stream(Symbol* class_name, Handle class_loader, Handle protection_domain, ClassFileStream* st, @@ -299,7 +298,7 @@ KlassHandle nullHandle; return parse_stream(class_name, class_loader, protection_domain, st, nullHandle, NULL, THREAD); } - static klassOop parse_stream(Symbol* class_name, + static Klass* parse_stream(Symbol* class_name, Handle class_loader, Handle protection_domain, ClassFileStream* st, @@ -308,24 +307,21 @@ TRAPS); // Resolve from stream (called by jni_DefineClass and JVM_DefineClass) - static klassOop resolve_from_stream(Symbol* class_name, Handle class_loader, + static Klass* resolve_from_stream(Symbol* class_name, Handle class_loader, Handle protection_domain, ClassFileStream* st, bool verify, TRAPS); // Lookup an already loaded class. If not found NULL is returned. - static klassOop find(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS); + static Klass* find(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS); // Lookup an already loaded instance or array class. // Do not make any queries to class loaders; consult only the cache. // If not found NULL is returned. - static klassOop find_instance_or_array_klass(Symbol* class_name, + static Klass* find_instance_or_array_klass(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS); - // If the given name is known to vmSymbols, return the well-know klass: - static klassOop find_well_known_klass(Symbol* class_name); - // Lookup an instance or array class that has already been loaded // either into the given class loader, or else into another class // loader that is constrained (via loader constraints) to produce @@ -347,34 +343,32 @@ // satisfied, and it is safe for classes in the given class loader // to manipulate strongly-typed values of the found class, subject // to local linkage and access checks. - static klassOop find_constrained_instance_or_array_klass(Symbol* class_name, + static Klass* find_constrained_instance_or_array_klass(Symbol* class_name, Handle class_loader, TRAPS); // Iterate over all klasses in dictionary // Just the classes from defining class loaders - static void classes_do(void f(klassOop)); + static void classes_do(void f(Klass*)); // Added for initialize_itable_for_klass to handle exceptions - static void classes_do(void f(klassOop, TRAPS), TRAPS); + static void classes_do(void f(Klass*, TRAPS), TRAPS); // All classes, and their class loaders - static void classes_do(void f(klassOop, oop)); + static void classes_do(void f(Klass*, ClassLoaderData*)); // All classes, and their class loaders // (added for helpers that use HandleMarks and ResourceMarks) - static void classes_do(void f(klassOop, oop, TRAPS), TRAPS); + static void classes_do(void f(Klass*, ClassLoaderData*, TRAPS), TRAPS); // All entries in the placeholder table and their class loaders - static void placeholders_do(void f(Symbol*, oop)); + static void placeholders_do(void f(Symbol*)); // Iterate over all methods in all klasses in dictionary - static void methods_do(void f(methodOop)); + static void methods_do(void f(Method*)); // Garbage collection support // This method applies "blk->do_oop" to all the pointers to "system" // classes and loaders. static void always_strong_oops_do(OopClosure* blk); - static void always_strong_classes_do(OopClosure* blk); - // This method applies "blk->do_oop" to all the placeholders. - static void placeholders_do(OopClosure* blk); + static void always_strong_classes_do(KlassClosure* closure); // Unload (that is, break root links to) all unmarked classes and // loaders. Returns "true" iff something was unloaded. @@ -389,11 +383,9 @@ static oop system_loader_lock() { return _system_loader_lock_obj; } private: - // Traverses preloaded oops: various system classes. These are - // guaranteed to be in the perm gen. - static void preloaded_oops_do(OopClosure* f); - static void lazily_loaded_oops_do(OopClosure* f); - + // Extended Redefine classes support (tbi) + static void preloaded_classes_do(KlassClosure* f); + static void lazily_loaded_classes_do(KlassClosure* f); public: // Sharing support. static void reorder_dictionary(); @@ -427,28 +419,27 @@ #endif // Verify class is in dictionary - static void verify_obj_klass_present(Handle obj, - Symbol* class_name, - Handle class_loader); + static void verify_obj_klass_present(Symbol* class_name, + ClassLoaderData* loader_data); // Initialization static void initialize(TRAPS); // Fast access to commonly used classes (preloaded) - static klassOop check_klass(klassOop k) { + static Klass* check_klass(Klass* k) { assert(k != NULL, "preloaded klass not initialized"); return k; } - static klassOop check_klass_Pre(klassOop k) { return check_klass(k); } - static klassOop check_klass_Pre_JSR292(klassOop k) { return EnableInvokeDynamic ? check_klass(k) : k; } - static klassOop check_klass_Opt(klassOop k) { return k; } - static klassOop check_klass_Opt_Kernel(klassOop k) { return k; } //== Opt - static klassOop check_klass_Opt_Only_JDK15(klassOop k) { + static Klass* check_klass_Pre( Klass* k) { return check_klass(k); } + static Klass* check_klass_Pre_JSR292(Klass* k) { return EnableInvokeDynamic ? check_klass(k) : k; } + static Klass* check_klass_Opt( Klass* k) { return k; } + static Klass* check_klass_Opt_Kernel(Klass* k) { return k; } //== Opt + static Klass* check_klass_Opt_Only_JDK15(Klass* k) { assert(JDK_Version::is_gte_jdk15x_version(), "JDK 1.5 only"); return k; } - static klassOop check_klass_Opt_Only_JDK14NewRef(klassOop k) { + static Klass* check_klass_Opt_Only_JDK14NewRef(Klass* k) { assert(JDK_Version::is_gte_jdk14x_version() && UseNewReflection, "JDK 1.4 only"); // despite the optional loading, if you use this it must be present: return check_klass(k); @@ -463,27 +454,35 @@ public: #define WK_KLASS_DECLARE(name, symbol, option) \ - static klassOop name() { return check_klass_##option(_well_known_klasses[WK_KLASS_ENUM_NAME(name)]); } + static Klass* name() { return check_klass_##option(_well_known_klasses[WK_KLASS_ENUM_NAME(name)]); } \ + static Klass** name##_addr() { \ + return &SystemDictionary::_well_known_klasses[SystemDictionary::WK_KLASS_ENUM_NAME(name)]; \ + } WK_KLASSES_DO(WK_KLASS_DECLARE); #undef WK_KLASS_DECLARE - static klassOop well_known_klass(WKID id) { + static Klass* well_known_klass(WKID id) { assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob"); return _well_known_klasses[id]; } + static Klass** well_known_klass_addr(WKID id) { + assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob"); + return &_well_known_klasses[id]; + } + // Local definition for direct access to the private array: #define WK_KLASS(name) _well_known_klasses[SystemDictionary::WK_KLASS_ENUM_NAME(name)] - static klassOop box_klass(BasicType t) { + static Klass* box_klass(BasicType t) { assert((uint)t < T_VOID+1, "range check"); return check_klass(_box_klasses[t]); } - static BasicType box_klass_type(klassOop k); // inverse of box_klass + static BasicType box_klass_type(Klass* k); // inverse of box_klass // methods returning lazily loaded klasses // The corresponding method to load the class must be called before calling them. - static klassOop abstract_ownable_synchronizer_klass() { return check_klass(_abstract_ownable_synchronizer_klass); } + static Klass* abstract_ownable_synchronizer_klass() { return check_klass(_abstract_ownable_synchronizer_klass); } static void load_abstract_ownable_synchronizer_klass(TRAPS); @@ -491,12 +490,20 @@ // Tells whether ClassLoader.loadClassInternal is present static bool has_loadClassInternal() { return _has_loadClassInternal; } + // Returns the class loader data to be used when looking up/updating the + // system dictionary. + static ClassLoaderData *class_loader_data(Handle class_loader) { + return ClassLoaderData::class_loader_data(class_loader()); + } + public: // Tells whether ClassLoader.checkPackageAccess is present static bool has_checkPackageAccess() { return _has_checkPackageAccess; } static bool Class_klass_loaded() { return WK_KLASS(Class_klass) != NULL; } static bool Cloneable_klass_loaded() { return WK_KLASS(Cloneable_klass) != NULL; } + static bool Object_klass_loaded() { return WK_KLASS(Object_klass) != NULL; } + static bool ClassLoader_klass_loaded() { return WK_KLASS(ClassLoader_klass) != NULL; } // Returns default system loader static oop java_system_loader(); @@ -504,6 +511,8 @@ // Compute the default system loader static void compute_java_system_loader(TRAPS); + // Register a new class loader + static ClassLoaderData* register_loader(Handle class_loader); private: // Mirrors for primitive classes (created eagerly) static oop check_mirror(oop m) { @@ -527,6 +536,7 @@ Symbol* signature, KlassHandle accessing_klass, Handle *appendix_result, + Handle *method_type_result, TRAPS); // for a given signature, find the internal MethodHandle method (linkTo* or invokeBasic) // (does not ask Java, since this is a low-level intrinsic defined by the JVM) @@ -553,17 +563,23 @@ Symbol* name, Symbol* type, Handle *appendix_result, + Handle *method_type_result, TRAPS); // Utility for printing loader "name" as part of tracing constraints static const char* loader_name(oop loader) { return ((loader) == NULL ? "<bootloader>" : - instanceKlass::cast((loader)->klass())->name()->as_C_string() ); + InstanceKlass::cast((loader)->klass())->name()->as_C_string() ); + } + static const char* loader_name(ClassLoaderData* loader_data) { + return (loader_data->is_the_null_class_loader_data() ? "<bootloader>" : + InstanceKlass::cast((loader_data->class_loader())->klass())->name()->as_C_string() ); } // Record the error when the first attempt to resolve a reference from a constant // pool entry to a class fails. static void add_resolution_error(constantPoolHandle pool, int which, Symbol* error); + static void delete_resolution_error(ConstantPool* pool); static Symbol* find_resolution_error(constantPoolHandle pool, int which); private: @@ -615,7 +631,7 @@ public: // for VM_CounterDecay iteration support friend class CounterDecay; - static klassOop try_get_next_class(); + static Klass* try_get_next_class(); private: static void validate_protection_domain(instanceKlassHandle klass, @@ -632,8 +648,8 @@ static SymbolPropertyTable* invoke_method_table() { return _invoke_method_table; } // Basic loading operations - static klassOop resolve_instance_class_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS); - static klassOop resolve_array_class_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS); + static Klass* resolve_instance_class_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS); + static Klass* resolve_array_class_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS); static instanceKlassHandle handle_parallel_super_load(Symbol* class_name, Symbol* supername, Handle class_loader, Handle protection_domain, Handle lockObject, TRAPS); // Wait on SystemDictionary_lock; unlocks lockObject before // waiting; relocks lockObject with correct recursion count @@ -654,7 +670,7 @@ static bool is_parallelCapable(Handle class_loader); static bool is_parallelDefine(Handle class_loader); - static klassOop find_shared_class(Symbol* class_name); + static Klass* find_shared_class(Symbol* class_name); // Setup link to hierarchy static void add_to_hierarchy(instanceKlassHandle k, TRAPS); @@ -664,31 +680,31 @@ // the SystemDictionary_lock. // Basic find on loaded classes - static klassOop find_class(int index, unsigned int hash, - Symbol* name, Handle loader); - static klassOop find_class(Symbol* class_name, Handle class_loader); + static Klass* find_class(int index, unsigned int hash, + Symbol* name, ClassLoaderData* loader_data); + static Klass* find_class(Symbol* class_name, ClassLoaderData* loader_data); // Basic find on classes in the midst of being loaded - static Symbol* find_placeholder(Symbol* name, Handle loader); + static Symbol* find_placeholder(Symbol* name, ClassLoaderData* loader_data); // Updating entry in dictionary // Add a completely loaded class static void add_klass(int index, Symbol* class_name, - Handle class_loader, KlassHandle obj); + ClassLoaderData* loader_data, KlassHandle obj); // Add a placeholder for a class being loaded static void add_placeholder(int index, Symbol* class_name, - Handle class_loader); + ClassLoaderData* loader_data); static void remove_placeholder(int index, Symbol* class_name, - Handle class_loader); + ClassLoaderData* loader_data); // Performs cleanups after resolve_super_or_fail. This typically needs // to be called on failure. // Won't throw, but can block. static void resolution_cleanups(Symbol* class_name, - Handle class_loader, + ClassLoaderData* loader_data, TRAPS); // Initialization @@ -700,16 +716,17 @@ bool defining, TRAPS); static void update_dictionary(int d_index, unsigned int d_hash, int p_index, unsigned int p_hash, - instanceKlassHandle k, Handle loader, TRAPS); + instanceKlassHandle k, Handle loader, + TRAPS); // Variables holding commonly used klasses (preloaded) - static klassOop _well_known_klasses[]; + static Klass* _well_known_klasses[]; // Lazily loaded klasses - static volatile klassOop _abstract_ownable_synchronizer_klass; + static Klass* volatile _abstract_ownable_synchronizer_klass; // table of box klasses (int_klass, etc.) - static klassOop _box_klasses[T_VOID+1]; + static Klass* _box_klasses[T_VOID+1]; static oop _java_system_loader; @@ -717,18 +734,4 @@ static bool _has_checkPackageAccess; }; -class SystemDictionaryHandles : AllStatic { -public: - #define WK_KLASS_HANDLE_DECLARE(name, ignore_symbol, option) \ - static KlassHandle name() { \ - SystemDictionary::name(); \ - klassOop* loc = &SystemDictionary::_well_known_klasses[SystemDictionary::WK_KLASS_ENUM_NAME(name)]; \ - return KlassHandle(loc, true); \ - } - WK_KLASSES_DO(WK_KLASS_HANDLE_DECLARE); - #undef WK_KLASS_HANDLE_DECLARE - - static KlassHandle box_klass(BasicType t); -}; - #endif // SHARE_VM_CLASSFILE_SYSTEMDICTIONARY_HPP