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()); |