comparison src/share/vm/classfile/systemDictionary.hpp @ 16395:ad431bf0de07

added support to load classes from graal.jar with a separate class loader
author Doug Simon <doug.simon@oracle.com>
date Thu, 03 Jul 2014 16:30:28 +0200
parents 66a9286203a2
children a7d9b88ecd68
comparison
equal deleted inserted replaced
16394:0dd27c6472d7 16395:ad431bf0de07
182 do_klass(Short_klass, java_lang_Short, Pre ) \ 182 do_klass(Short_klass, java_lang_Short, Pre ) \
183 do_klass(Integer_klass, java_lang_Integer, Pre ) \ 183 do_klass(Integer_klass, java_lang_Integer, Pre ) \
184 do_klass(Long_klass, java_lang_Long, Pre ) \ 184 do_klass(Long_klass, java_lang_Long, Pre ) \
185 \ 185 \
186 /* Support for Graal */ \ 186 /* Support for Graal */ \
187 do_klass(CompilerThread_klass, com_oracle_graal_compiler_CompilerThread, Opt) \ 187 do_klass(BitSet_klass, java_util_BitSet, Opt ) \
188 do_klass(BitSet_klass, java_util_BitSet, Opt) \ 188 /* Graal classes */ \
189 /* graal.graph */ \ 189 GRAAL_ONLY(do_klass(CompilerThread_klass, com_oracle_graal_compiler_CompilerThread, Graal)) \
190 do_klass(Node_klass, com_oracle_graal_graph_Node, Opt) \ 190 GRAAL_ONLY(do_klass(Node_klass, com_oracle_graal_graph_Node, Graal)) \
191 do_klass(NodeClass_klass, com_oracle_graal_graph_NodeClass, Opt) \ 191 GRAAL_ONLY(do_klass(NodeClass_klass, com_oracle_graal_graph_NodeClass, Graal)) \
192 /* graal.hotspot */ \ 192 GRAAL_ONLY(do_klass(HotSpotCompiledCode_klass, com_oracle_graal_hotspot_HotSpotCompiledCode, Graal)) \
193 do_klass(HotSpotCompiledCode_klass, com_oracle_graal_hotspot_HotSpotCompiledCode, Opt) \ 193 GRAAL_ONLY(do_klass(HotSpotCompiledCode_Comment_klass, com_oracle_graal_hotspot_HotSpotCompiledCode_Comment, Graal)) \
194 do_klass(HotSpotCompiledCode_Comment_klass, com_oracle_graal_hotspot_HotSpotCompiledCode_Comment, Opt) \ 194 GRAAL_ONLY(do_klass(HotSpotCompiledNmethod_klass, com_oracle_graal_hotspot_HotSpotCompiledNmethod, Graal)) \
195 do_klass(HotSpotCompiledNmethod_klass, com_oracle_graal_hotspot_HotSpotCompiledNmethod, Opt) \ 195 GRAAL_ONLY(do_klass(HotSpotCompiledRuntimeStub_klass, com_oracle_graal_hotspot_HotSpotCompiledRuntimeStub, Graal)) \
196 do_klass(HotSpotCompiledRuntimeStub_klass, com_oracle_graal_hotspot_HotSpotCompiledRuntimeStub, Opt) \ 196 GRAAL_ONLY(do_klass(HotSpotForeignCallLinkage_klass, com_oracle_graal_hotspot_HotSpotForeignCallLinkage, Graal)) \
197 do_klass(HotSpotForeignCallLinkage_klass, com_oracle_graal_hotspot_HotSpotForeignCallLinkage, Opt) \ 197 GRAAL_ONLY(do_klass(HotSpotReferenceMap_klass, com_oracle_graal_hotspot_HotSpotReferenceMap, Graal)) \
198 do_klass(HotSpotReferenceMap_klass, com_oracle_graal_hotspot_HotSpotReferenceMap, Opt) \ 198 GRAAL_ONLY(do_klass(DataSection_klass, com_oracle_graal_hotspot_data_DataSection, Graal)) \
199 do_klass(DataSection_klass, com_oracle_graal_hotspot_data_DataSection, Opt) \ 199 GRAAL_ONLY(do_klass(DataSectionReference_klass, com_oracle_graal_hotspot_data_DataSectionReference, Graal)) \
200 do_klass(DataSectionReference_klass, com_oracle_graal_hotspot_data_DataSectionReference, Opt) \ 200 GRAAL_ONLY(do_klass(MetaspaceData_klass, com_oracle_graal_hotspot_data_MetaspaceData, Graal)) \
201 do_klass(MetaspaceData_klass, com_oracle_graal_hotspot_data_MetaspaceData, Opt) \ 201 GRAAL_ONLY(do_klass(OopData_klass, com_oracle_graal_hotspot_data_OopData, Graal)) \
202 do_klass(OopData_klass, com_oracle_graal_hotspot_data_OopData, Opt) \ 202 GRAAL_ONLY(do_klass(HotSpotInstalledCode_klass, com_oracle_graal_hotspot_meta_HotSpotInstalledCode, Graal)) \
203 do_klass(HotSpotCodeInfo_klass, com_oracle_graal_hotspot_meta_HotSpotCodeInfo, Opt) \ 203 GRAAL_ONLY(do_klass(HotSpotNmethod_klass, com_oracle_graal_hotspot_meta_HotSpotNmethod, Graal)) \
204 do_klass(HotSpotInstalledCode_klass, com_oracle_graal_hotspot_meta_HotSpotInstalledCode, Opt) \ 204 GRAAL_ONLY(do_klass(HotSpotResolvedJavaMethod_klass, com_oracle_graal_hotspot_meta_HotSpotResolvedJavaMethod, Graal)) \
205 do_klass(HotSpotNmethod_klass, com_oracle_graal_hotspot_meta_HotSpotNmethod, Opt) \ 205 GRAAL_ONLY(do_klass(HotSpotResolvedObjectType_klass, com_oracle_graal_hotspot_meta_HotSpotResolvedObjectType, Graal)) \
206 do_klass(HotSpotResolvedJavaMethod_klass, com_oracle_graal_hotspot_meta_HotSpotResolvedJavaMethod, Opt) \ 206 GRAAL_ONLY(do_klass(HotSpotMonitorValue_klass, com_oracle_graal_hotspot_meta_HotSpotMonitorValue, Graal)) \
207 do_klass(HotSpotResolvedObjectType_klass, com_oracle_graal_hotspot_meta_HotSpotResolvedObjectType, Opt) \ 207 GRAAL_ONLY(do_klass(HotSpotObjectConstant_klass, com_oracle_graal_hotspot_meta_HotSpotObjectConstant, Graal)) \
208 do_klass(HotSpotMonitorValue_klass, com_oracle_graal_hotspot_meta_HotSpotMonitorValue, Opt) \ 208 GRAAL_ONLY(do_klass(HotSpotMetaspaceConstant_klass, com_oracle_graal_hotspot_meta_HotSpotMetaspaceConstant, Graal)) \
209 do_klass(HotSpotObjectConstant_klass, com_oracle_graal_hotspot_meta_HotSpotObjectConstant, Opt) \ 209 GRAAL_ONLY(do_klass(HotSpotStackFrameReference_klass, com_oracle_graal_hotspot_HotSpotStackFrameReference, Graal)) \
210 do_klass(HotSpotMetaspaceConstant_klass, com_oracle_graal_hotspot_meta_HotSpotMetaspaceConstant, Opt) \ 210 GRAAL_ONLY(do_klass(CompilationTask_klass, com_oracle_graal_hotspot_CompilationTask, Graal)) \
211 do_klass(HotSpotStackFrameReference_klass, com_oracle_graal_hotspot_HotSpotStackFrameReference, Opt) \ 211 GRAAL_ONLY(do_klass(Assumptions_klass, com_oracle_graal_api_code_Assumptions, Graal)) \
212 do_klass(CompilationTask_klass, com_oracle_graal_hotspot_CompilationTask, Opt) \ 212 GRAAL_ONLY(do_klass(Assumptions_ConcreteMethod_klass, com_oracle_graal_api_code_Assumptions_ConcreteMethod, Graal)) \
213 /* graal.api.code */ \ 213 GRAAL_ONLY(do_klass(Assumptions_NoFinalizableSubclass_klass, com_oracle_graal_api_code_Assumptions_NoFinalizableSubclass, Graal))\
214 do_klass(Assumptions_klass, com_oracle_graal_api_code_Assumptions, Opt) \ 214 GRAAL_ONLY(do_klass(Assumptions_ConcreteSubtype_klass, com_oracle_graal_api_code_Assumptions_ConcreteSubtype, Graal)) \
215 do_klass(Assumptions_ConcreteMethod_klass, com_oracle_graal_api_code_Assumptions_ConcreteMethod, Opt) \ 215 GRAAL_ONLY(do_klass(Assumptions_MethodContents_klass, com_oracle_graal_api_code_Assumptions_MethodContents, Graal)) \
216 do_klass(Assumptions_NoFinalizableSubclass_klass, com_oracle_graal_api_code_Assumptions_NoFinalizableSubclass, Opt) \ 216 GRAAL_ONLY(do_klass(Assumptions_CallSiteTargetValue_klass, com_oracle_graal_api_code_Assumptions_CallSiteTargetValue, Graal)) \
217 do_klass(Assumptions_ConcreteSubtype_klass, com_oracle_graal_api_code_Assumptions_ConcreteSubtype, Opt) \ 217 GRAAL_ONLY(do_klass(BytecodePosition_klass, com_oracle_graal_api_code_BytecodePosition, Graal)) \
218 do_klass(Assumptions_MethodContents_klass, com_oracle_graal_api_code_Assumptions_MethodContents, Opt) \ 218 GRAAL_ONLY(do_klass(DebugInfo_klass, com_oracle_graal_api_code_DebugInfo, Graal)) \
219 do_klass(Assumptions_CallSiteTargetValue_klass, com_oracle_graal_api_code_Assumptions_CallSiteTargetValue, Opt) \ 219 GRAAL_ONLY(do_klass(RegisterSaveLayout_klass, com_oracle_graal_api_code_RegisterSaveLayout, Graal)) \
220 do_klass(BytecodePosition_klass, com_oracle_graal_api_code_BytecodePosition, Opt) \ 220 GRAAL_ONLY(do_klass(BytecodeFrame_klass, com_oracle_graal_api_code_BytecodeFrame, Graal)) \
221 do_klass(DebugInfo_klass, com_oracle_graal_api_code_DebugInfo, Opt) \ 221 GRAAL_ONLY(do_klass(CompilationResult_klass, com_oracle_graal_api_code_CompilationResult, Graal)) \
222 do_klass(RegisterSaveLayout_klass, com_oracle_graal_api_code_RegisterSaveLayout, Opt) \ 222 GRAAL_ONLY(do_klass(CompilationResult_Call_klass, com_oracle_graal_api_code_CompilationResult_Call, Graal)) \
223 do_klass(BytecodeFrame_klass, com_oracle_graal_api_code_BytecodeFrame, Opt) \ 223 GRAAL_ONLY(do_klass(CompilationResult_DataPatch_klass, com_oracle_graal_api_code_CompilationResult_DataPatch, Graal)) \
224 do_klass(CompilationResult_klass, com_oracle_graal_api_code_CompilationResult, Opt) \ 224 GRAAL_ONLY(do_klass(CompilationResult_ExceptionHandler_klass, com_oracle_graal_api_code_CompilationResult_ExceptionHandler, Graal))\
225 do_klass(CompilationResult_Call_klass, com_oracle_graal_api_code_CompilationResult_Call, Opt) \ 225 GRAAL_ONLY(do_klass(CompilationResult_Mark_klass, com_oracle_graal_api_code_CompilationResult_Mark, Graal)) \
226 do_klass(CompilationResult_DataPatch_klass, com_oracle_graal_api_code_CompilationResult_DataPatch, Opt) \ 226 GRAAL_ONLY(do_klass(CompilationResult_Infopoint_klass, com_oracle_graal_api_code_CompilationResult_Infopoint, Graal)) \
227 do_klass(CompilationResult_ExceptionHandler_klass, com_oracle_graal_api_code_CompilationResult_ExceptionHandler, Opt) \ 227 GRAAL_ONLY(do_klass(CompilationResult_Site_klass, com_oracle_graal_api_code_CompilationResult_Site, Graal)) \
228 do_klass(CompilationResult_Mark_klass, com_oracle_graal_api_code_CompilationResult_Mark, Opt) \ 228 GRAAL_ONLY(do_klass(ExternalCompilationResult_klass, com_oracle_graal_gpu_ExternalCompilationResult, Graal)) \
229 do_klass(CompilationResult_Infopoint_klass, com_oracle_graal_api_code_CompilationResult_Infopoint, Opt) \ 229 GRAAL_ONLY(do_klass(InfopointReason_klass, com_oracle_graal_api_code_InfopointReason, Graal)) \
230 do_klass(CompilationResult_Site_klass, com_oracle_graal_api_code_CompilationResult_Site, Opt) \ 230 GRAAL_ONLY(do_klass(InstalledCode_klass, com_oracle_graal_api_code_InstalledCode, Graal)) \
231 do_klass(ExternalCompilationResult_klass, com_oracle_graal_gpu_ExternalCompilationResult, Opt) \ 231 GRAAL_ONLY(do_klass(code_Register_klass, com_oracle_graal_api_code_Register, Graal)) \
232 do_klass(InfopointReason_klass, com_oracle_graal_api_code_InfopointReason, Opt) \ 232 GRAAL_ONLY(do_klass(RegisterValue_klass, com_oracle_graal_api_code_RegisterValue, Graal)) \
233 do_klass(InstalledCode_klass, com_oracle_graal_api_code_InstalledCode, Opt) \ 233 GRAAL_ONLY(do_klass(StackSlot_klass, com_oracle_graal_api_code_StackSlot, Graal)) \
234 do_klass(code_Register_klass, com_oracle_graal_api_code_Register, Opt) \ 234 GRAAL_ONLY(do_klass(VirtualObject_klass, com_oracle_graal_api_code_VirtualObject, Graal)) \
235 do_klass(RegisterValue_klass, com_oracle_graal_api_code_RegisterValue, Opt) \ 235 GRAAL_ONLY(do_klass(SpeculationLog_klass, com_oracle_graal_api_code_SpeculationLog, Graal)) \
236 do_klass(StackSlot_klass, com_oracle_graal_api_code_StackSlot, Opt) \ 236 GRAAL_ONLY(do_klass(Constant_klass, com_oracle_graal_api_meta_Constant, Graal)) \
237 do_klass(VirtualObject_klass, com_oracle_graal_api_code_VirtualObject, Opt) \ 237 GRAAL_ONLY(do_klass(PrimitiveConstant_klass, com_oracle_graal_api_meta_PrimitiveConstant, Graal)) \
238 do_klass(SpeculationLog_klass, com_oracle_graal_api_code_SpeculationLog, Opt) \ 238 GRAAL_ONLY(do_klass(NullConstant_klass, com_oracle_graal_api_meta_NullConstant, Graal)) \
239 /* graal.api.meta */ \ 239 GRAAL_ONLY(do_klass(ExceptionHandler_klass, com_oracle_graal_api_meta_ExceptionHandler, Graal)) \
240 do_klass(Constant_klass, com_oracle_graal_api_meta_Constant, Opt) \ 240 GRAAL_ONLY(do_klass(Kind_klass, com_oracle_graal_api_meta_Kind, Graal)) \
241 do_klass(PrimitiveConstant_klass, com_oracle_graal_api_meta_PrimitiveConstant, Opt) \ 241 GRAAL_ONLY(do_klass(JavaMethod_klass, com_oracle_graal_api_meta_JavaMethod, Graal)) \
242 do_klass(NullConstant_klass, com_oracle_graal_api_meta_NullConstant, Opt) \ 242 GRAAL_ONLY(do_klass(JavaType_klass, com_oracle_graal_api_meta_JavaType, Graal)) \
243 do_klass(ExceptionHandler_klass, com_oracle_graal_api_meta_ExceptionHandler, Opt) \ 243 GRAAL_ONLY(do_klass(Value_klass, com_oracle_graal_api_meta_Value, Graal)) \
244 do_klass(Kind_klass, com_oracle_graal_api_meta_Kind, Opt) \
245 do_klass(JavaMethod_klass, com_oracle_graal_api_meta_JavaMethod, Opt) \
246 do_klass(JavaType_klass, com_oracle_graal_api_meta_JavaType, Opt) \
247 do_klass(Value_klass, com_oracle_graal_api_meta_Value, Opt) \
248 244
249 /*end*/ 245 /*end*/
250 246
251 247
252 class SystemDictionary : AllStatic { 248 class SystemDictionary : AllStatic {
261 WK_KLASSES_DO(WK_KLASS_ENUM) 257 WK_KLASSES_DO(WK_KLASS_ENUM)
262 #undef WK_KLASS_ENUM 258 #undef WK_KLASS_ENUM
263 259
264 WKID_LIMIT, 260 WKID_LIMIT,
265 261
262 #ifdef GRAAL
263 FIRST_GRAAL_WKID = WK_KLASS_ENUM_NAME(CompilerThread_klass),
264 LAST_GRAAL_WKID = WK_KLASS_ENUM_NAME(Value_klass),
265 #endif
266
266 FIRST_WKID = NO_WKID + 1 267 FIRST_WKID = NO_WKID + 1
267 }; 268 };
268 269
269 enum InitOption { 270 enum InitOption {
270 Pre, // preloaded; error if not present 271 Pre, // preloaded; error if not present
274 // Options after this point will use resolve_or_null instead. 275 // Options after this point will use resolve_or_null instead.
275 276
276 Opt, // preload tried; NULL if not present 277 Opt, // preload tried; NULL if not present
277 Opt_Only_JDK14NewRef, // preload tried; use only with NewReflection 278 Opt_Only_JDK14NewRef, // preload tried; use only with NewReflection
278 Opt_Only_JDK15, // preload tried; use only with JDK1.5+ 279 Opt_Only_JDK15, // preload tried; use only with JDK1.5+
280 #ifdef GRAAL
281 Graal, // preload tried; error if not present, use only with GRAAL
282 #endif
279 OPTION_LIMIT, 283 OPTION_LIMIT,
280 CEIL_LG_OPTION_LIMIT = 4 // OPTION_LIMIT <= (1<<CEIL_LG_OPTION_LIMIT) 284 CEIL_LG_OPTION_LIMIT = 4 // OPTION_LIMIT <= (1<<CEIL_LG_OPTION_LIMIT)
281 }; 285 };
282 286
283 287
462 static Klass* check_klass_Opt_Only_JDK14NewRef(Klass* k) { 466 static Klass* check_klass_Opt_Only_JDK14NewRef(Klass* k) {
463 assert(JDK_Version::is_gte_jdk14x_version() && UseNewReflection, "JDK 1.4 only"); 467 assert(JDK_Version::is_gte_jdk14x_version() && UseNewReflection, "JDK 1.4 only");
464 // despite the optional loading, if you use this it must be present: 468 // despite the optional loading, if you use this it must be present:
465 return check_klass(k); 469 return check_klass(k);
466 } 470 }
471 #ifdef GRAAL
472 static Klass* check_klass_Graal(Klass* k) { return k; }
473 #endif
467 474
468 static bool initialize_wk_klass(WKID id, int init_opt, TRAPS); 475 static bool initialize_wk_klass(WKID id, int init_opt, TRAPS);
469 static void initialize_wk_klasses_until(WKID limit_id, WKID &start_id, TRAPS); 476 static void initialize_wk_klasses_until(WKID limit_id, WKID &start_id, TRAPS);
470 static void initialize_wk_klasses_through(WKID end_id, WKID &start_id, TRAPS) { 477 static void initialize_wk_klasses_through(WKID end_id, WKID &start_id, TRAPS) {
471 int limit = (int)end_id + 1; 478 int limit = (int)end_id + 1;
526 static bool Object_klass_loaded() { return WK_KLASS(Object_klass) != NULL; } 533 static bool Object_klass_loaded() { return WK_KLASS(Object_klass) != NULL; }
527 static bool ClassLoader_klass_loaded() { return WK_KLASS(ClassLoader_klass) != NULL; } 534 static bool ClassLoader_klass_loaded() { return WK_KLASS(ClassLoader_klass) != NULL; }
528 535
529 // Returns default system loader 536 // Returns default system loader
530 static oop java_system_loader(); 537 static oop java_system_loader();
538
539 #ifdef GRAAL
540 // Returns the Graal loader. This will be NULL if !UseGraalClassLoader
541 // in which case it's equivalent to the boot loader
542 static oop graal_loader();
543 #endif
531 544
532 // Compute the default system loader 545 // Compute the default system loader
533 static void compute_java_system_loader(TRAPS); 546 static void compute_java_system_loader(TRAPS);
534 547
535 // Register a new class loader 548 // Register a new class loader
693 static bool is_parallelDefine(Handle class_loader); 706 static bool is_parallelDefine(Handle class_loader);
694 707
695 public: 708 public:
696 static bool is_ext_class_loader(Handle class_loader); 709 static bool is_ext_class_loader(Handle class_loader);
697 710
711 #ifdef GRAAL
712 static void initialize_preloaded_graal_classes(TRAPS);
713 #endif
714
698 private: 715 private:
699 static Klass* find_shared_class(Symbol* class_name); 716 static Klass* find_shared_class(Symbol* class_name);
700 717
701 // Setup link to hierarchy 718 // Setup link to hierarchy
702 static void add_to_hierarchy(instanceKlassHandle k, TRAPS); 719 static void add_to_hierarchy(instanceKlassHandle k, TRAPS);
755 772
756 // table of box klasses (int_klass, etc.) 773 // table of box klasses (int_klass, etc.)
757 static Klass* _box_klasses[T_VOID+1]; 774 static Klass* _box_klasses[T_VOID+1];
758 775
759 static oop _java_system_loader; 776 static oop _java_system_loader;
777 #ifdef GRAAL
778 static oop _graal_loader;
779 #endif
760 780
761 static bool _has_loadClassInternal; 781 static bool _has_loadClassInternal;
762 static bool _has_checkPackageAccess; 782 static bool _has_checkPackageAccess;
763 }; 783 };
764 784