Mercurial > hg > truffle
comparison src/share/vm/classfile/systemDictionary.cpp @ 7951:8b46b0196eb0
8000692: Remove old KERNEL code
Summary: Removed depreciated kernel VM source code from hotspot VM
Reviewed-by: dholmes, acorn
author | zgu |
---|---|
date | Fri, 25 Jan 2013 10:04:08 -0500 |
parents | aefb345d3f5e |
children | 5fc51c1ecdeb 1f9994892f89 |
comparison
equal
deleted
inserted
replaced
7950:6cf2530f7fd3 | 7951:8b46b0196eb0 |
---|---|
1197 true /* shared class */); | 1197 true /* shared class */); |
1198 } | 1198 } |
1199 return ik; | 1199 return ik; |
1200 } | 1200 } |
1201 | 1201 |
1202 #ifdef KERNEL | |
1203 // Some classes on the bootstrap class path haven't been installed on the | |
1204 // system yet. Call the DownloadManager method to make them appear in the | |
1205 // bootstrap class path and try again to load the named class. | |
1206 // Note that with delegation class loaders all classes in another loader will | |
1207 // first try to call this so it'd better be fast!! | |
1208 static instanceKlassHandle download_and_retry_class_load( | |
1209 Symbol* class_name, | |
1210 TRAPS) { | |
1211 | |
1212 Klass* dlm = SystemDictionary::DownloadManager_klass(); | |
1213 instanceKlassHandle nk; | |
1214 | |
1215 // If download manager class isn't loaded just return. | |
1216 if (dlm == NULL) return nk; | |
1217 | |
1218 { HandleMark hm(THREAD); | |
1219 ResourceMark rm(THREAD); | |
1220 Handle s = java_lang_String::create_from_symbol(class_name, CHECK_(nk)); | |
1221 Handle class_string = java_lang_String::externalize_classname(s, CHECK_(nk)); | |
1222 | |
1223 // return value | |
1224 JavaValue result(T_OBJECT); | |
1225 | |
1226 // Call the DownloadManager. We assume that it has a lock because | |
1227 // multiple classes could be not found and downloaded at the same time. | |
1228 // class sun.misc.DownloadManager; | |
1229 // public static String getBootClassPathEntryForClass(String className); | |
1230 JavaCalls::call_static(&result, | |
1231 KlassHandle(THREAD, dlm), | |
1232 vmSymbols::getBootClassPathEntryForClass_name(), | |
1233 vmSymbols::string_string_signature(), | |
1234 class_string, | |
1235 CHECK_(nk)); | |
1236 | |
1237 // Get result.string and add to bootclasspath | |
1238 assert(result.get_type() == T_OBJECT, "just checking"); | |
1239 oop obj = (oop) result.get_jobject(); | |
1240 if (obj == NULL) { return nk; } | |
1241 | |
1242 Handle h_obj(THREAD, obj); | |
1243 char* new_class_name = java_lang_String::as_platform_dependent_str(h_obj, | |
1244 CHECK_(nk)); | |
1245 | |
1246 // lock the loader | |
1247 // we use this lock because JVMTI does. | |
1248 Handle loader_lock(THREAD, SystemDictionary::system_loader_lock()); | |
1249 | |
1250 ObjectLocker ol(loader_lock, THREAD); | |
1251 // add the file to the bootclasspath | |
1252 ClassLoader::update_class_path_entry_list(new_class_name, true); | |
1253 } // end HandleMark | |
1254 | |
1255 if (TraceClassLoading) { | |
1256 ClassLoader::print_bootclasspath(); | |
1257 } | |
1258 return ClassLoader::load_classfile(class_name, CHECK_(nk)); | |
1259 } | |
1260 #endif // KERNEL | |
1261 | |
1262 | 1202 |
1263 instanceKlassHandle SystemDictionary::load_instance_class(Symbol* class_name, Handle class_loader, TRAPS) { | 1203 instanceKlassHandle SystemDictionary::load_instance_class(Symbol* class_name, Handle class_loader, TRAPS) { |
1264 instanceKlassHandle nh = instanceKlassHandle(); // null Handle | 1204 instanceKlassHandle nh = instanceKlassHandle(); // null Handle |
1265 if (class_loader.is_null()) { | 1205 if (class_loader.is_null()) { |
1266 | 1206 |
1275 if (k.is_null()) { | 1215 if (k.is_null()) { |
1276 // Use VM class loader | 1216 // Use VM class loader |
1277 PerfTraceTime vmtimer(ClassLoader::perf_sys_classload_time()); | 1217 PerfTraceTime vmtimer(ClassLoader::perf_sys_classload_time()); |
1278 k = ClassLoader::load_classfile(class_name, CHECK_(nh)); | 1218 k = ClassLoader::load_classfile(class_name, CHECK_(nh)); |
1279 } | 1219 } |
1280 | |
1281 #ifdef KERNEL | |
1282 // If the VM class loader has failed to load the class, call the | |
1283 // DownloadManager class to make it magically appear on the classpath | |
1284 // and try again. This is only configured with the Kernel VM. | |
1285 if (k.is_null()) { | |
1286 k = download_and_retry_class_load(class_name, CHECK_(nh)); | |
1287 } | |
1288 #endif // KERNEL | |
1289 | 1220 |
1290 // find_or_define_instance_class may return a different InstanceKlass | 1221 // find_or_define_instance_class may return a different InstanceKlass |
1291 if (!k.is_null()) { | 1222 if (!k.is_null()) { |
1292 k = find_or_define_instance_class(class_name, class_loader, k, CHECK_(nh)); | 1223 k = find_or_define_instance_class(class_name, class_loader, k, CHECK_(nh)); |
1293 } | 1224 } |
1820 int info = wk_init_info[id - FIRST_WKID]; | 1751 int info = wk_init_info[id - FIRST_WKID]; |
1821 int sid = (info >> CEIL_LG_OPTION_LIMIT); | 1752 int sid = (info >> CEIL_LG_OPTION_LIMIT); |
1822 Symbol* symbol = vmSymbols::symbol_at((vmSymbols::SID)sid); | 1753 Symbol* symbol = vmSymbols::symbol_at((vmSymbols::SID)sid); |
1823 Klass** klassp = &_well_known_klasses[id]; | 1754 Klass** klassp = &_well_known_klasses[id]; |
1824 bool must_load = (init_opt < SystemDictionary::Opt); | 1755 bool must_load = (init_opt < SystemDictionary::Opt); |
1825 bool try_load = true; | 1756 if ((*klassp) == NULL) { |
1826 if (init_opt == SystemDictionary::Opt_Kernel) { | |
1827 #ifndef KERNEL | |
1828 try_load = false; | |
1829 #endif //KERNEL | |
1830 } | |
1831 if ((*klassp) == NULL && try_load) { | |
1832 if (must_load) { | 1757 if (must_load) { |
1833 (*klassp) = resolve_or_fail(symbol, true, CHECK_0); // load required class | 1758 (*klassp) = resolve_or_fail(symbol, true, CHECK_0); // load required class |
1834 } else { | 1759 } else { |
1835 (*klassp) = resolve_or_null(symbol, CHECK_0); // load optional klass | 1760 (*klassp) = resolve_or_null(symbol, CHECK_0); // load optional klass |
1836 } | 1761 } |
1915 _box_klasses[T_SHORT] = WK_KLASS(Short_klass); | 1840 _box_klasses[T_SHORT] = WK_KLASS(Short_klass); |
1916 _box_klasses[T_INT] = WK_KLASS(Integer_klass); | 1841 _box_klasses[T_INT] = WK_KLASS(Integer_klass); |
1917 _box_klasses[T_LONG] = WK_KLASS(Long_klass); | 1842 _box_klasses[T_LONG] = WK_KLASS(Long_klass); |
1918 //_box_klasses[T_OBJECT] = WK_KLASS(object_klass); | 1843 //_box_klasses[T_OBJECT] = WK_KLASS(object_klass); |
1919 //_box_klasses[T_ARRAY] = WK_KLASS(object_klass); | 1844 //_box_klasses[T_ARRAY] = WK_KLASS(object_klass); |
1920 | |
1921 #ifdef KERNEL | |
1922 if (DownloadManager_klass() == NULL) { | |
1923 warning("Cannot find sun/jkernel/DownloadManager"); | |
1924 } | |
1925 #endif // KERNEL | |
1926 | 1845 |
1927 { // Compute whether we should use loadClass or loadClassInternal when loading classes. | 1846 { // Compute whether we should use loadClass or loadClassInternal when loading classes. |
1928 Method* method = InstanceKlass::cast(ClassLoader_klass())->find_method(vmSymbols::loadClassInternal_name(), vmSymbols::string_class_signature()); | 1847 Method* method = InstanceKlass::cast(ClassLoader_klass())->find_method(vmSymbols::loadClassInternal_name(), vmSymbols::string_class_signature()); |
1929 _has_loadClassInternal = (method != NULL); | 1848 _has_loadClassInternal = (method != NULL); |
1930 } | 1849 } |