Mercurial > hg > graal-jvmci-8
comparison src/share/vm/prims/jvm.cpp @ 1142:4ce7240d622c
6914300: ciEnv should export all well known classes
Reviewed-by: kvn, twisti
author | never |
---|---|
date | Wed, 06 Jan 2010 14:22:39 -0800 |
parents | 389049f3f393 |
children | 9b9c1ee9b3f6 |
comparison
equal
deleted
inserted
replaced
1140:1f6d42899c3a | 1142:4ce7240d622c |
---|---|
78 | 78 |
79 methodOop last_caller = NULL; | 79 methodOop last_caller = NULL; |
80 | 80 |
81 while (!vfst.at_end()) { | 81 while (!vfst.at_end()) { |
82 methodOop m = vfst.method(); | 82 methodOop m = vfst.method(); |
83 if (!vfst.method()->method_holder()->klass_part()->is_subclass_of(SystemDictionary::classloader_klass())&& | 83 if (!vfst.method()->method_holder()->klass_part()->is_subclass_of(SystemDictionary::ClassLoader_klass())&& |
84 !vfst.method()->method_holder()->klass_part()->is_subclass_of(access_controller_klass) && | 84 !vfst.method()->method_holder()->klass_part()->is_subclass_of(access_controller_klass) && |
85 !vfst.method()->method_holder()->klass_part()->is_subclass_of(privileged_action_klass)) { | 85 !vfst.method()->method_holder()->klass_part()->is_subclass_of(privileged_action_klass)) { |
86 break; | 86 break; |
87 } | 87 } |
88 last_caller = m; | 88 last_caller = m; |
255 HandleMark hm(THREAD); | 255 HandleMark hm(THREAD); |
256 Handle key_str = java_lang_String::create_from_platform_dependent_str(key, CHECK); | 256 Handle key_str = java_lang_String::create_from_platform_dependent_str(key, CHECK); |
257 Handle value_str = java_lang_String::create_from_platform_dependent_str((value != NULL ? value : ""), CHECK); | 257 Handle value_str = java_lang_String::create_from_platform_dependent_str((value != NULL ? value : ""), CHECK); |
258 JavaCalls::call_virtual(&r, | 258 JavaCalls::call_virtual(&r, |
259 props, | 259 props, |
260 KlassHandle(THREAD, SystemDictionary::properties_klass()), | 260 KlassHandle(THREAD, SystemDictionary::Properties_klass()), |
261 vmSymbolHandles::put_name(), | 261 vmSymbolHandles::put_name(), |
262 vmSymbolHandles::object_object_object_signature(), | 262 vmSymbolHandles::object_object_object_signature(), |
263 key_str, | 263 key_str, |
264 value_str, | 264 value_str, |
265 THREAD); | 265 THREAD); |
493 // Just checking that the cloneable flag is set correct | 493 // Just checking that the cloneable flag is set correct |
494 if (obj->is_javaArray()) { | 494 if (obj->is_javaArray()) { |
495 guarantee(klass->is_cloneable(), "all arrays are cloneable"); | 495 guarantee(klass->is_cloneable(), "all arrays are cloneable"); |
496 } else { | 496 } else { |
497 guarantee(obj->is_instance(), "should be instanceOop"); | 497 guarantee(obj->is_instance(), "should be instanceOop"); |
498 bool cloneable = klass->is_subtype_of(SystemDictionary::cloneable_klass()); | 498 bool cloneable = klass->is_subtype_of(SystemDictionary::Cloneable_klass()); |
499 guarantee(cloneable == klass->is_cloneable(), "incorrect cloneable flag"); | 499 guarantee(cloneable == klass->is_cloneable(), "incorrect cloneable flag"); |
500 } | 500 } |
501 #endif | 501 #endif |
502 | 502 |
503 // Check if class of obj supports the Cloneable interface. | 503 // Check if class of obj supports the Cloneable interface. |
906 oop mirror = JNIHandles::resolve_non_null(cls); | 906 oop mirror = JNIHandles::resolve_non_null(cls); |
907 | 907 |
908 // Special handling for primitive objects | 908 // Special handling for primitive objects |
909 if (java_lang_Class::is_primitive(mirror)) { | 909 if (java_lang_Class::is_primitive(mirror)) { |
910 // Primitive objects does not have any interfaces | 910 // Primitive objects does not have any interfaces |
911 objArrayOop r = oopFactory::new_objArray(SystemDictionary::class_klass(), 0, CHECK_NULL); | 911 objArrayOop r = oopFactory::new_objArray(SystemDictionary::Class_klass(), 0, CHECK_NULL); |
912 return (jobjectArray) JNIHandles::make_local(env, r); | 912 return (jobjectArray) JNIHandles::make_local(env, r); |
913 } | 913 } |
914 | 914 |
915 KlassHandle klass(thread, java_lang_Class::as_klassOop(mirror)); | 915 KlassHandle klass(thread, java_lang_Class::as_klassOop(mirror)); |
916 // Figure size of result array | 916 // Figure size of result array |
921 assert(klass->oop_is_objArray() || klass->oop_is_typeArray(), "Illegal mirror klass"); | 921 assert(klass->oop_is_objArray() || klass->oop_is_typeArray(), "Illegal mirror klass"); |
922 size = 2; | 922 size = 2; |
923 } | 923 } |
924 | 924 |
925 // Allocate result array | 925 // Allocate result array |
926 objArrayOop r = oopFactory::new_objArray(SystemDictionary::class_klass(), size, CHECK_NULL); | 926 objArrayOop r = oopFactory::new_objArray(SystemDictionary::Class_klass(), size, CHECK_NULL); |
927 objArrayHandle result (THREAD, r); | 927 objArrayHandle result (THREAD, r); |
928 // Fill in result | 928 // Fill in result |
929 if (klass->oop_is_instance()) { | 929 if (klass->oop_is_instance()) { |
930 // Regular instance klass, fill in all local interfaces | 930 // Regular instance klass, fill in all local interfaces |
931 for (int index = 0; index < size; index++) { | 931 for (int index = 0; index < size; index++) { |
932 klassOop k = klassOop(instanceKlass::cast(klass())->local_interfaces()->obj_at(index)); | 932 klassOop k = klassOop(instanceKlass::cast(klass())->local_interfaces()->obj_at(index)); |
933 result->obj_at_put(index, Klass::cast(k)->java_mirror()); | 933 result->obj_at_put(index, Klass::cast(k)->java_mirror()); |
934 } | 934 } |
935 } else { | 935 } else { |
936 // All arrays implement java.lang.Cloneable and java.io.Serializable | 936 // All arrays implement java.lang.Cloneable and java.io.Serializable |
937 result->obj_at_put(0, Klass::cast(SystemDictionary::cloneable_klass())->java_mirror()); | 937 result->obj_at_put(0, Klass::cast(SystemDictionary::Cloneable_klass())->java_mirror()); |
938 result->obj_at_put(1, Klass::cast(SystemDictionary::serializable_klass())->java_mirror()); | 938 result->obj_at_put(1, Klass::cast(SystemDictionary::Serializable_klass())->java_mirror()); |
939 } | 939 } |
940 return (jobjectArray) JNIHandles::make_local(env, result()); | 940 return (jobjectArray) JNIHandles::make_local(env, result()); |
941 JVM_END | 941 JVM_END |
942 | 942 |
943 | 943 |
1096 | 1096 |
1097 if (HAS_PENDING_EXCEPTION) { | 1097 if (HAS_PENDING_EXCEPTION) { |
1098 pending_exception = Handle(THREAD, PENDING_EXCEPTION); | 1098 pending_exception = Handle(THREAD, PENDING_EXCEPTION); |
1099 CLEAR_PENDING_EXCEPTION; | 1099 CLEAR_PENDING_EXCEPTION; |
1100 | 1100 |
1101 if ( pending_exception->is_a(SystemDictionary::exception_klass()) && | 1101 if ( pending_exception->is_a(SystemDictionary::Exception_klass()) && |
1102 !pending_exception->is_a(SystemDictionary::runtime_exception_klass())) { | 1102 !pending_exception->is_a(SystemDictionary::RuntimeException_klass())) { |
1103 // Throw a java.security.PrivilegedActionException(Exception e) exception | 1103 // Throw a java.security.PrivilegedActionException(Exception e) exception |
1104 JavaCallArguments args(pending_exception); | 1104 JavaCallArguments args(pending_exception); |
1105 THROW_ARG_0(vmSymbolHandles::java_security_PrivilegedActionException(), | 1105 THROW_ARG_0(vmSymbolHandles::java_security_PrivilegedActionException(), |
1106 vmSymbolHandles::exception_void_signature(), | 1106 vmSymbolHandles::exception_void_signature(), |
1107 &args); | 1107 &args); |
1188 return JNIHandles::make_local(env, result); | 1188 return JNIHandles::make_local(env, result); |
1189 } | 1189 } |
1190 | 1190 |
1191 // the resource area must be registered in case of a gc | 1191 // the resource area must be registered in case of a gc |
1192 RegisterArrayForGC ragc(thread, local_array); | 1192 RegisterArrayForGC ragc(thread, local_array); |
1193 objArrayOop context = oopFactory::new_objArray(SystemDictionary::protectionDomain_klass(), | 1193 objArrayOop context = oopFactory::new_objArray(SystemDictionary::ProtectionDomain_klass(), |
1194 local_array->length(), CHECK_NULL); | 1194 local_array->length(), CHECK_NULL); |
1195 objArrayHandle h_context(thread, context); | 1195 objArrayHandle h_context(thread, context); |
1196 for (int index = 0; index < local_array->length(); index++) { | 1196 for (int index = 0; index < local_array->length(); index++) { |
1197 h_context->obj_at_put(index, local_array->at(index)); | 1197 h_context->obj_at_put(index, local_array->at(index)); |
1198 } | 1198 } |
1249 // ofClass is a reference to a java_lang_Class object. The mirror object | 1249 // ofClass is a reference to a java_lang_Class object. The mirror object |
1250 // of an instanceKlass | 1250 // of an instanceKlass |
1251 | 1251 |
1252 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) || | 1252 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) || |
1253 ! Klass::cast(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass)))->oop_is_instance()) { | 1253 ! Klass::cast(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass)))->oop_is_instance()) { |
1254 oop result = oopFactory::new_objArray(SystemDictionary::class_klass(), 0, CHECK_NULL); | 1254 oop result = oopFactory::new_objArray(SystemDictionary::Class_klass(), 0, CHECK_NULL); |
1255 return (jobjectArray)JNIHandles::make_local(env, result); | 1255 return (jobjectArray)JNIHandles::make_local(env, result); |
1256 } | 1256 } |
1257 | 1257 |
1258 instanceKlassHandle k(thread, java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass))); | 1258 instanceKlassHandle k(thread, java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass))); |
1259 | 1259 |
1260 if (k->inner_classes()->length() == 0) { | 1260 if (k->inner_classes()->length() == 0) { |
1261 // Neither an inner nor outer class | 1261 // Neither an inner nor outer class |
1262 oop result = oopFactory::new_objArray(SystemDictionary::class_klass(), 0, CHECK_NULL); | 1262 oop result = oopFactory::new_objArray(SystemDictionary::Class_klass(), 0, CHECK_NULL); |
1263 return (jobjectArray)JNIHandles::make_local(env, result); | 1263 return (jobjectArray)JNIHandles::make_local(env, result); |
1264 } | 1264 } |
1265 | 1265 |
1266 // find inner class info | 1266 // find inner class info |
1267 typeArrayHandle icls(thread, k->inner_classes()); | 1267 typeArrayHandle icls(thread, k->inner_classes()); |
1268 constantPoolHandle cp(thread, k->constants()); | 1268 constantPoolHandle cp(thread, k->constants()); |
1269 int length = icls->length(); | 1269 int length = icls->length(); |
1270 | 1270 |
1271 // Allocate temp. result array | 1271 // Allocate temp. result array |
1272 objArrayOop r = oopFactory::new_objArray(SystemDictionary::class_klass(), length/4, CHECK_NULL); | 1272 objArrayOop r = oopFactory::new_objArray(SystemDictionary::Class_klass(), length/4, CHECK_NULL); |
1273 objArrayHandle result (THREAD, r); | 1273 objArrayHandle result (THREAD, r); |
1274 int members = 0; | 1274 int members = 0; |
1275 | 1275 |
1276 for(int i = 0; i < length; i += 4) { | 1276 for(int i = 0; i < length; i += 4) { |
1277 int ioff = icls->ushort_at(i + inner_class_info_index); | 1277 int ioff = icls->ushort_at(i + inner_class_info_index); |
1297 } | 1297 } |
1298 } | 1298 } |
1299 | 1299 |
1300 if (members != length) { | 1300 if (members != length) { |
1301 // Return array of right length | 1301 // Return array of right length |
1302 objArrayOop res = oopFactory::new_objArray(SystemDictionary::class_klass(), members, CHECK_NULL); | 1302 objArrayOop res = oopFactory::new_objArray(SystemDictionary::Class_klass(), members, CHECK_NULL); |
1303 for(int i = 0; i < members; i++) { | 1303 for(int i = 0; i < members; i++) { |
1304 res->obj_at_put(i, result->obj_at(i)); | 1304 res->obj_at_put(i, result->obj_at(i)); |
1305 } | 1305 } |
1306 return (jobjectArray)JNIHandles::make_local(env, res); | 1306 return (jobjectArray)JNIHandles::make_local(env, res); |
1307 } | 1307 } |
1471 | 1471 |
1472 oop reflected = JNIHandles::resolve_non_null(method); | 1472 oop reflected = JNIHandles::resolve_non_null(method); |
1473 oop mirror = NULL; | 1473 oop mirror = NULL; |
1474 int slot = 0; | 1474 int slot = 0; |
1475 | 1475 |
1476 if (reflected->klass() == SystemDictionary::reflect_constructor_klass()) { | 1476 if (reflected->klass() == SystemDictionary::reflect_Constructor_klass()) { |
1477 mirror = java_lang_reflect_Constructor::clazz(reflected); | 1477 mirror = java_lang_reflect_Constructor::clazz(reflected); |
1478 slot = java_lang_reflect_Constructor::slot(reflected); | 1478 slot = java_lang_reflect_Constructor::slot(reflected); |
1479 } else { | 1479 } else { |
1480 assert(reflected->klass() == SystemDictionary::reflect_method_klass(), | 1480 assert(reflected->klass() == SystemDictionary::reflect_Method_klass(), |
1481 "wrong type"); | 1481 "wrong type"); |
1482 mirror = java_lang_reflect_Method::clazz(reflected); | 1482 mirror = java_lang_reflect_Method::clazz(reflected); |
1483 slot = java_lang_reflect_Method::slot(reflected); | 1483 slot = java_lang_reflect_Method::slot(reflected); |
1484 } | 1484 } |
1485 klassOop k = java_lang_Class::as_klassOop(mirror); | 1485 klassOop k = java_lang_Class::as_klassOop(mirror); |
1531 | 1531 |
1532 // Exclude primitive types and array types | 1532 // Exclude primitive types and array types |
1533 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) || | 1533 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) || |
1534 Klass::cast(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass)))->oop_is_javaArray()) { | 1534 Klass::cast(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass)))->oop_is_javaArray()) { |
1535 // Return empty array | 1535 // Return empty array |
1536 oop res = oopFactory::new_objArray(SystemDictionary::reflect_field_klass(), 0, CHECK_NULL); | 1536 oop res = oopFactory::new_objArray(SystemDictionary::reflect_Field_klass(), 0, CHECK_NULL); |
1537 return (jobjectArray) JNIHandles::make_local(env, res); | 1537 return (jobjectArray) JNIHandles::make_local(env, res); |
1538 } | 1538 } |
1539 | 1539 |
1540 instanceKlassHandle k(THREAD, java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass))); | 1540 instanceKlassHandle k(THREAD, java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass))); |
1541 constantPoolHandle cp(THREAD, k->constants()); | 1541 constantPoolHandle cp(THREAD, k->constants()); |
1559 if (mods & JVM_ACC_PUBLIC) ++num_fields; | 1559 if (mods & JVM_ACC_PUBLIC) ++num_fields; |
1560 } | 1560 } |
1561 } else { | 1561 } else { |
1562 num_fields = fields_len / instanceKlass::next_offset; | 1562 num_fields = fields_len / instanceKlass::next_offset; |
1563 | 1563 |
1564 if (k() == SystemDictionary::throwable_klass()) { | 1564 if (k() == SystemDictionary::Throwable_klass()) { |
1565 num_fields--; | 1565 num_fields--; |
1566 skip_backtrace = true; | 1566 skip_backtrace = true; |
1567 } | 1567 } |
1568 } | 1568 } |
1569 | 1569 |
1570 objArrayOop r = oopFactory::new_objArray(SystemDictionary::reflect_field_klass(), num_fields, CHECK_NULL); | 1570 objArrayOop r = oopFactory::new_objArray(SystemDictionary::reflect_Field_klass(), num_fields, CHECK_NULL); |
1571 objArrayHandle result (THREAD, r); | 1571 objArrayHandle result (THREAD, r); |
1572 | 1572 |
1573 int out_idx = 0; | 1573 int out_idx = 0; |
1574 fieldDescriptor fd; | 1574 fieldDescriptor fd; |
1575 for (int i = 0; i < fields_len; i += instanceKlass::next_offset) { | 1575 for (int i = 0; i < fields_len; i += instanceKlass::next_offset) { |
1599 | 1599 |
1600 // Exclude primitive types and array types | 1600 // Exclude primitive types and array types |
1601 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) | 1601 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) |
1602 || Klass::cast(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass)))->oop_is_javaArray()) { | 1602 || Klass::cast(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass)))->oop_is_javaArray()) { |
1603 // Return empty array | 1603 // Return empty array |
1604 oop res = oopFactory::new_objArray(SystemDictionary::reflect_method_klass(), 0, CHECK_NULL); | 1604 oop res = oopFactory::new_objArray(SystemDictionary::reflect_Method_klass(), 0, CHECK_NULL); |
1605 return (jobjectArray) JNIHandles::make_local(env, res); | 1605 return (jobjectArray) JNIHandles::make_local(env, res); |
1606 } | 1606 } |
1607 | 1607 |
1608 instanceKlassHandle k(THREAD, java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass))); | 1608 instanceKlassHandle k(THREAD, java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass))); |
1609 | 1609 |
1623 } | 1623 } |
1624 } | 1624 } |
1625 } | 1625 } |
1626 | 1626 |
1627 // Allocate result | 1627 // Allocate result |
1628 objArrayOop r = oopFactory::new_objArray(SystemDictionary::reflect_method_klass(), num_methods, CHECK_NULL); | 1628 objArrayOop r = oopFactory::new_objArray(SystemDictionary::reflect_Method_klass(), num_methods, CHECK_NULL); |
1629 objArrayHandle result (THREAD, r); | 1629 objArrayHandle result (THREAD, r); |
1630 | 1630 |
1631 int out_idx = 0; | 1631 int out_idx = 0; |
1632 for (i = 0; i < methods_length; i++) { | 1632 for (i = 0; i < methods_length; i++) { |
1633 methodHandle method(THREAD, (methodOop) methods->obj_at(i)); | 1633 methodHandle method(THREAD, (methodOop) methods->obj_at(i)); |
1651 | 1651 |
1652 // Exclude primitive types and array types | 1652 // Exclude primitive types and array types |
1653 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) | 1653 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) |
1654 || Klass::cast(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass)))->oop_is_javaArray()) { | 1654 || Klass::cast(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass)))->oop_is_javaArray()) { |
1655 // Return empty array | 1655 // Return empty array |
1656 oop res = oopFactory::new_objArray(SystemDictionary::reflect_constructor_klass(), 0 , CHECK_NULL); | 1656 oop res = oopFactory::new_objArray(SystemDictionary::reflect_Constructor_klass(), 0 , CHECK_NULL); |
1657 return (jobjectArray) JNIHandles::make_local(env, res); | 1657 return (jobjectArray) JNIHandles::make_local(env, res); |
1658 } | 1658 } |
1659 | 1659 |
1660 instanceKlassHandle k(THREAD, java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass))); | 1660 instanceKlassHandle k(THREAD, java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass))); |
1661 | 1661 |
1675 } | 1675 } |
1676 } | 1676 } |
1677 } | 1677 } |
1678 | 1678 |
1679 // Allocate result | 1679 // Allocate result |
1680 objArrayOop r = oopFactory::new_objArray(SystemDictionary::reflect_constructor_klass(), num_constructors, CHECK_NULL); | 1680 objArrayOop r = oopFactory::new_objArray(SystemDictionary::reflect_Constructor_klass(), num_constructors, CHECK_NULL); |
1681 objArrayHandle result(THREAD, r); | 1681 objArrayHandle result(THREAD, r); |
1682 | 1682 |
1683 int out_idx = 0; | 1683 int out_idx = 0; |
1684 for (i = 0; i < methods_length; i++) { | 1684 for (i = 0; i < methods_length; i++) { |
1685 methodHandle method(THREAD, (methodOop) methods->obj_at(i)); | 1685 methodHandle method(THREAD, (methodOop) methods->obj_at(i)); |
1888 } | 1888 } |
1889 int klass_ref = cp->uncached_klass_ref_index_at(index); | 1889 int klass_ref = cp->uncached_klass_ref_index_at(index); |
1890 symbolHandle klass_name (THREAD, cp->klass_name_at(klass_ref)); | 1890 symbolHandle klass_name (THREAD, cp->klass_name_at(klass_ref)); |
1891 symbolHandle member_name(THREAD, cp->uncached_name_ref_at(index)); | 1891 symbolHandle member_name(THREAD, cp->uncached_name_ref_at(index)); |
1892 symbolHandle member_sig (THREAD, cp->uncached_signature_ref_at(index)); | 1892 symbolHandle member_sig (THREAD, cp->uncached_signature_ref_at(index)); |
1893 objArrayOop dest_o = oopFactory::new_objArray(SystemDictionary::string_klass(), 3, CHECK_NULL); | 1893 objArrayOop dest_o = oopFactory::new_objArray(SystemDictionary::String_klass(), 3, CHECK_NULL); |
1894 objArrayHandle dest(THREAD, dest_o); | 1894 objArrayHandle dest(THREAD, dest_o); |
1895 Handle str = java_lang_String::create_from_symbol(klass_name, CHECK_NULL); | 1895 Handle str = java_lang_String::create_from_symbol(klass_name, CHECK_NULL); |
1896 dest->obj_at_put(0, str()); | 1896 dest->obj_at_put(0, str()); |
1897 str = java_lang_String::create_from_symbol(member_name, CHECK_NULL); | 1897 str = java_lang_String::create_from_symbol(member_name, CHECK_NULL); |
1898 dest->obj_at_put(1, str()); | 1898 dest->obj_at_put(1, str()); |
2576 HandleMark hm(THREAD); | 2576 HandleMark hm(THREAD); |
2577 Handle obj(THREAD, thread->threadObj()); | 2577 Handle obj(THREAD, thread->threadObj()); |
2578 JavaValue result(T_VOID); | 2578 JavaValue result(T_VOID); |
2579 JavaCalls::call_virtual(&result, | 2579 JavaCalls::call_virtual(&result, |
2580 obj, | 2580 obj, |
2581 KlassHandle(THREAD, SystemDictionary::thread_klass()), | 2581 KlassHandle(THREAD, SystemDictionary::Thread_klass()), |
2582 vmSymbolHandles::run_method_name(), | 2582 vmSymbolHandles::run_method_name(), |
2583 vmSymbolHandles::void_method_signature(), | 2583 vmSymbolHandles::void_method_signature(), |
2584 THREAD); | 2584 THREAD); |
2585 } | 2585 } |
2586 | 2586 |
2674 // NOTE (from JDK 1.2): this is done solely to prevent stopped | 2674 // NOTE (from JDK 1.2): this is done solely to prevent stopped |
2675 // threads from being restarted. | 2675 // threads from being restarted. |
2676 // Fix for 4314342, 4145910, perhaps others: it now doesn't have | 2676 // Fix for 4314342, 4145910, perhaps others: it now doesn't have |
2677 // any effect on the "liveness" of a thread; see | 2677 // any effect on the "liveness" of a thread; see |
2678 // JVM_IsThreadAlive, below. | 2678 // JVM_IsThreadAlive, below. |
2679 if (java_throwable->is_a(SystemDictionary::threaddeath_klass())) { | 2679 if (java_throwable->is_a(SystemDictionary::ThreadDeath_klass())) { |
2680 java_lang_Thread::set_stillborn(java_thread); | 2680 java_lang_Thread::set_stillborn(java_thread); |
2681 } | 2681 } |
2682 THROW_OOP(java_throwable); | 2682 THROW_OOP(java_throwable); |
2683 } else { | 2683 } else { |
2684 // Enques a VM_Operation to stop all threads and then deliver the exception... | 2684 // Enques a VM_Operation to stop all threads and then deliver the exception... |
3029 } | 3029 } |
3030 } | 3030 } |
3031 } | 3031 } |
3032 | 3032 |
3033 // Create result array of type [Ljava/lang/Class; | 3033 // Create result array of type [Ljava/lang/Class; |
3034 objArrayOop result = oopFactory::new_objArray(SystemDictionary::class_klass(), depth, CHECK_NULL); | 3034 objArrayOop result = oopFactory::new_objArray(SystemDictionary::Class_klass(), depth, CHECK_NULL); |
3035 // Fill in mirrors corresponding to method holders | 3035 // Fill in mirrors corresponding to method holders |
3036 int index = 0; | 3036 int index = 0; |
3037 while (first != NULL) { | 3037 while (first != NULL) { |
3038 result->obj_at_put(index++, Klass::cast(first->klass())->java_mirror()); | 3038 result->obj_at_put(index++, Klass::cast(first->klass())->java_mirror()); |
3039 first = first->next; | 3039 first = first->next; |
4325 ResourceMark rm(THREAD); | 4325 ResourceMark rm(THREAD); |
4326 ThreadsListEnumerator tle(THREAD, false, false); | 4326 ThreadsListEnumerator tle(THREAD, false, false); |
4327 JvmtiVMObjectAllocEventCollector oam; | 4327 JvmtiVMObjectAllocEventCollector oam; |
4328 | 4328 |
4329 int num_threads = tle.num_threads(); | 4329 int num_threads = tle.num_threads(); |
4330 objArrayOop r = oopFactory::new_objArray(SystemDictionary::thread_klass(), num_threads, CHECK_NULL); | 4330 objArrayOop r = oopFactory::new_objArray(SystemDictionary::Thread_klass(), num_threads, CHECK_NULL); |
4331 objArrayHandle threads_ah(THREAD, r); | 4331 objArrayHandle threads_ah(THREAD, r); |
4332 | 4332 |
4333 for (int i = 0; i < num_threads; i++) { | 4333 for (int i = 0; i < num_threads; i++) { |
4334 Handle h = tle.get_threadObj(i); | 4334 Handle h = tle.get_threadObj(i); |
4335 threads_ah->obj_at_put(i, h()); | 4335 threads_ah->obj_at_put(i, h()); |
4359 THROW_(vmSymbols::java_lang_IllegalArgumentException(), 0); | 4359 THROW_(vmSymbols::java_lang_IllegalArgumentException(), 0); |
4360 } | 4360 } |
4361 | 4361 |
4362 // check if threads is not an array of objects of Thread class | 4362 // check if threads is not an array of objects of Thread class |
4363 klassOop k = objArrayKlass::cast(ah->klass())->element_klass(); | 4363 klassOop k = objArrayKlass::cast(ah->klass())->element_klass(); |
4364 if (k != SystemDictionary::thread_klass()) { | 4364 if (k != SystemDictionary::Thread_klass()) { |
4365 THROW_(vmSymbols::java_lang_IllegalArgumentException(), 0); | 4365 THROW_(vmSymbols::java_lang_IllegalArgumentException(), 0); |
4366 } | 4366 } |
4367 | 4367 |
4368 ResourceMark rm(THREAD); | 4368 ResourceMark rm(THREAD); |
4369 | 4369 |
4419 instanceKlassHandle ik_h(THREAD, k); | 4419 instanceKlassHandle ik_h(THREAD, k); |
4420 int encl_method_class_idx = ik_h->enclosing_method_class_index(); | 4420 int encl_method_class_idx = ik_h->enclosing_method_class_index(); |
4421 if (encl_method_class_idx == 0) { | 4421 if (encl_method_class_idx == 0) { |
4422 return NULL; | 4422 return NULL; |
4423 } | 4423 } |
4424 objArrayOop dest_o = oopFactory::new_objArray(SystemDictionary::object_klass(), 3, CHECK_NULL); | 4424 objArrayOop dest_o = oopFactory::new_objArray(SystemDictionary::Object_klass(), 3, CHECK_NULL); |
4425 objArrayHandle dest(THREAD, dest_o); | 4425 objArrayHandle dest(THREAD, dest_o); |
4426 klassOop enc_k = ik_h->constants()->klass_at(encl_method_class_idx, CHECK_NULL); | 4426 klassOop enc_k = ik_h->constants()->klass_at(encl_method_class_idx, CHECK_NULL); |
4427 dest->obj_at_put(0, Klass::cast(enc_k)->java_mirror()); | 4427 dest->obj_at_put(0, Klass::cast(enc_k)->java_mirror()); |
4428 int encl_method_method_idx = ik_h->enclosing_method_method_index(); | 4428 int encl_method_method_idx = ik_h->enclosing_method_method_index(); |
4429 if (encl_method_method_idx != 0) { | 4429 if (encl_method_method_idx != 0) { |
4533 case JAVA_THREAD_STATE_NEW : { | 4533 case JAVA_THREAD_STATE_NEW : { |
4534 assert(values_h->length() == 1 && | 4534 assert(values_h->length() == 1 && |
4535 values_h->int_at(0) == java_lang_Thread::NEW, | 4535 values_h->int_at(0) == java_lang_Thread::NEW, |
4536 "Invalid threadStatus value"); | 4536 "Invalid threadStatus value"); |
4537 | 4537 |
4538 objArrayOop r = oopFactory::new_objArray(SystemDictionary::string_klass(), | 4538 objArrayOop r = oopFactory::new_objArray(SystemDictionary::String_klass(), |
4539 1, /* only 1 substate */ | 4539 1, /* only 1 substate */ |
4540 CHECK_NULL); | 4540 CHECK_NULL); |
4541 names_h = objArrayHandle(THREAD, r); | 4541 names_h = objArrayHandle(THREAD, r); |
4542 Handle name = java_lang_String::create_from_str("NEW", CHECK_NULL); | 4542 Handle name = java_lang_String::create_from_str("NEW", CHECK_NULL); |
4543 names_h->obj_at_put(0, name()); | 4543 names_h->obj_at_put(0, name()); |
4546 case JAVA_THREAD_STATE_RUNNABLE : { | 4546 case JAVA_THREAD_STATE_RUNNABLE : { |
4547 assert(values_h->length() == 1 && | 4547 assert(values_h->length() == 1 && |
4548 values_h->int_at(0) == java_lang_Thread::RUNNABLE, | 4548 values_h->int_at(0) == java_lang_Thread::RUNNABLE, |
4549 "Invalid threadStatus value"); | 4549 "Invalid threadStatus value"); |
4550 | 4550 |
4551 objArrayOop r = oopFactory::new_objArray(SystemDictionary::string_klass(), | 4551 objArrayOop r = oopFactory::new_objArray(SystemDictionary::String_klass(), |
4552 1, /* only 1 substate */ | 4552 1, /* only 1 substate */ |
4553 CHECK_NULL); | 4553 CHECK_NULL); |
4554 names_h = objArrayHandle(THREAD, r); | 4554 names_h = objArrayHandle(THREAD, r); |
4555 Handle name = java_lang_String::create_from_str("RUNNABLE", CHECK_NULL); | 4555 Handle name = java_lang_String::create_from_str("RUNNABLE", CHECK_NULL); |
4556 names_h->obj_at_put(0, name()); | 4556 names_h->obj_at_put(0, name()); |
4559 case JAVA_THREAD_STATE_BLOCKED : { | 4559 case JAVA_THREAD_STATE_BLOCKED : { |
4560 assert(values_h->length() == 1 && | 4560 assert(values_h->length() == 1 && |
4561 values_h->int_at(0) == java_lang_Thread::BLOCKED_ON_MONITOR_ENTER, | 4561 values_h->int_at(0) == java_lang_Thread::BLOCKED_ON_MONITOR_ENTER, |
4562 "Invalid threadStatus value"); | 4562 "Invalid threadStatus value"); |
4563 | 4563 |
4564 objArrayOop r = oopFactory::new_objArray(SystemDictionary::string_klass(), | 4564 objArrayOop r = oopFactory::new_objArray(SystemDictionary::String_klass(), |
4565 1, /* only 1 substate */ | 4565 1, /* only 1 substate */ |
4566 CHECK_NULL); | 4566 CHECK_NULL); |
4567 names_h = objArrayHandle(THREAD, r); | 4567 names_h = objArrayHandle(THREAD, r); |
4568 Handle name = java_lang_String::create_from_str("BLOCKED", CHECK_NULL); | 4568 Handle name = java_lang_String::create_from_str("BLOCKED", CHECK_NULL); |
4569 names_h->obj_at_put(0, name()); | 4569 names_h->obj_at_put(0, name()); |
4572 case JAVA_THREAD_STATE_WAITING : { | 4572 case JAVA_THREAD_STATE_WAITING : { |
4573 assert(values_h->length() == 2 && | 4573 assert(values_h->length() == 2 && |
4574 values_h->int_at(0) == java_lang_Thread::IN_OBJECT_WAIT && | 4574 values_h->int_at(0) == java_lang_Thread::IN_OBJECT_WAIT && |
4575 values_h->int_at(1) == java_lang_Thread::PARKED, | 4575 values_h->int_at(1) == java_lang_Thread::PARKED, |
4576 "Invalid threadStatus value"); | 4576 "Invalid threadStatus value"); |
4577 objArrayOop r = oopFactory::new_objArray(SystemDictionary::string_klass(), | 4577 objArrayOop r = oopFactory::new_objArray(SystemDictionary::String_klass(), |
4578 2, /* number of substates */ | 4578 2, /* number of substates */ |
4579 CHECK_NULL); | 4579 CHECK_NULL); |
4580 names_h = objArrayHandle(THREAD, r); | 4580 names_h = objArrayHandle(THREAD, r); |
4581 Handle name0 = java_lang_String::create_from_str("WAITING.OBJECT_WAIT", | 4581 Handle name0 = java_lang_String::create_from_str("WAITING.OBJECT_WAIT", |
4582 CHECK_NULL); | 4582 CHECK_NULL); |
4590 assert(values_h->length() == 3 && | 4590 assert(values_h->length() == 3 && |
4591 values_h->int_at(0) == java_lang_Thread::SLEEPING && | 4591 values_h->int_at(0) == java_lang_Thread::SLEEPING && |
4592 values_h->int_at(1) == java_lang_Thread::IN_OBJECT_WAIT_TIMED && | 4592 values_h->int_at(1) == java_lang_Thread::IN_OBJECT_WAIT_TIMED && |
4593 values_h->int_at(2) == java_lang_Thread::PARKED_TIMED, | 4593 values_h->int_at(2) == java_lang_Thread::PARKED_TIMED, |
4594 "Invalid threadStatus value"); | 4594 "Invalid threadStatus value"); |
4595 objArrayOop r = oopFactory::new_objArray(SystemDictionary::string_klass(), | 4595 objArrayOop r = oopFactory::new_objArray(SystemDictionary::String_klass(), |
4596 3, /* number of substates */ | 4596 3, /* number of substates */ |
4597 CHECK_NULL); | 4597 CHECK_NULL); |
4598 names_h = objArrayHandle(THREAD, r); | 4598 names_h = objArrayHandle(THREAD, r); |
4599 Handle name0 = java_lang_String::create_from_str("TIMED_WAITING.SLEEPING", | 4599 Handle name0 = java_lang_String::create_from_str("TIMED_WAITING.SLEEPING", |
4600 CHECK_NULL); | 4600 CHECK_NULL); |
4609 } | 4609 } |
4610 case JAVA_THREAD_STATE_TERMINATED : { | 4610 case JAVA_THREAD_STATE_TERMINATED : { |
4611 assert(values_h->length() == 1 && | 4611 assert(values_h->length() == 1 && |
4612 values_h->int_at(0) == java_lang_Thread::TERMINATED, | 4612 values_h->int_at(0) == java_lang_Thread::TERMINATED, |
4613 "Invalid threadStatus value"); | 4613 "Invalid threadStatus value"); |
4614 objArrayOop r = oopFactory::new_objArray(SystemDictionary::string_klass(), | 4614 objArrayOop r = oopFactory::new_objArray(SystemDictionary::String_klass(), |
4615 1, /* only 1 substate */ | 4615 1, /* only 1 substate */ |
4616 CHECK_NULL); | 4616 CHECK_NULL); |
4617 names_h = objArrayHandle(THREAD, r); | 4617 names_h = objArrayHandle(THREAD, r); |
4618 Handle name = java_lang_String::create_from_str("TERMINATED", CHECK_NULL); | 4618 Handle name = java_lang_String::create_from_str("TERMINATED", CHECK_NULL); |
4619 names_h->obj_at_put(0, name()); | 4619 names_h->obj_at_put(0, name()); |
4644 #else // KERNEL | 4644 #else // KERNEL |
4645 info->is_kernel_jvm = 0; // false; | 4645 info->is_kernel_jvm = 0; // false; |
4646 #endif // KERNEL | 4646 #endif // KERNEL |
4647 } | 4647 } |
4648 JVM_END | 4648 JVM_END |
4649 |