comparison src/share/vm/prims/jvm.cpp @ 1144:9b9c1ee9b3f6

Merge
author iveresov
date Wed, 06 Jan 2010 22:21:39 -0800
parents 933a3e806ce6 4ce7240d622c
children e392695de029
comparison
equal deleted inserted replaced
1129:a5a6adfca6ec 1144:9b9c1ee9b3f6
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 }
1468 1468
1469 oop reflected = JNIHandles::resolve_non_null(method); 1469 oop reflected = JNIHandles::resolve_non_null(method);
1470 oop mirror = NULL; 1470 oop mirror = NULL;
1471 int slot = 0; 1471 int slot = 0;
1472 1472
1473 if (reflected->klass() == SystemDictionary::reflect_constructor_klass()) { 1473 if (reflected->klass() == SystemDictionary::reflect_Constructor_klass()) {
1474 mirror = java_lang_reflect_Constructor::clazz(reflected); 1474 mirror = java_lang_reflect_Constructor::clazz(reflected);
1475 slot = java_lang_reflect_Constructor::slot(reflected); 1475 slot = java_lang_reflect_Constructor::slot(reflected);
1476 } else { 1476 } else {
1477 assert(reflected->klass() == SystemDictionary::reflect_method_klass(), 1477 assert(reflected->klass() == SystemDictionary::reflect_Method_klass(),
1478 "wrong type"); 1478 "wrong type");
1479 mirror = java_lang_reflect_Method::clazz(reflected); 1479 mirror = java_lang_reflect_Method::clazz(reflected);
1480 slot = java_lang_reflect_Method::slot(reflected); 1480 slot = java_lang_reflect_Method::slot(reflected);
1481 } 1481 }
1482 klassOop k = java_lang_Class::as_klassOop(mirror); 1482 klassOop k = java_lang_Class::as_klassOop(mirror);
1528 1528
1529 // Exclude primitive types and array types 1529 // Exclude primitive types and array types
1530 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) || 1530 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) ||
1531 Klass::cast(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass)))->oop_is_javaArray()) { 1531 Klass::cast(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass)))->oop_is_javaArray()) {
1532 // Return empty array 1532 // Return empty array
1533 oop res = oopFactory::new_objArray(SystemDictionary::reflect_field_klass(), 0, CHECK_NULL); 1533 oop res = oopFactory::new_objArray(SystemDictionary::reflect_Field_klass(), 0, CHECK_NULL);
1534 return (jobjectArray) JNIHandles::make_local(env, res); 1534 return (jobjectArray) JNIHandles::make_local(env, res);
1535 } 1535 }
1536 1536
1537 instanceKlassHandle k(THREAD, java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass))); 1537 instanceKlassHandle k(THREAD, java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass)));
1538 constantPoolHandle cp(THREAD, k->constants()); 1538 constantPoolHandle cp(THREAD, k->constants());
1556 if (mods & JVM_ACC_PUBLIC) ++num_fields; 1556 if (mods & JVM_ACC_PUBLIC) ++num_fields;
1557 } 1557 }
1558 } else { 1558 } else {
1559 num_fields = fields_len / instanceKlass::next_offset; 1559 num_fields = fields_len / instanceKlass::next_offset;
1560 1560
1561 if (k() == SystemDictionary::throwable_klass()) { 1561 if (k() == SystemDictionary::Throwable_klass()) {
1562 num_fields--; 1562 num_fields--;
1563 skip_backtrace = true; 1563 skip_backtrace = true;
1564 } 1564 }
1565 } 1565 }
1566 1566
1567 objArrayOop r = oopFactory::new_objArray(SystemDictionary::reflect_field_klass(), num_fields, CHECK_NULL); 1567 objArrayOop r = oopFactory::new_objArray(SystemDictionary::reflect_Field_klass(), num_fields, CHECK_NULL);
1568 objArrayHandle result (THREAD, r); 1568 objArrayHandle result (THREAD, r);
1569 1569
1570 int out_idx = 0; 1570 int out_idx = 0;
1571 fieldDescriptor fd; 1571 fieldDescriptor fd;
1572 for (int i = 0; i < fields_len; i += instanceKlass::next_offset) { 1572 for (int i = 0; i < fields_len; i += instanceKlass::next_offset) {
1596 1596
1597 // Exclude primitive types and array types 1597 // Exclude primitive types and array types
1598 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) 1598 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass))
1599 || Klass::cast(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass)))->oop_is_javaArray()) { 1599 || Klass::cast(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass)))->oop_is_javaArray()) {
1600 // Return empty array 1600 // Return empty array
1601 oop res = oopFactory::new_objArray(SystemDictionary::reflect_method_klass(), 0, CHECK_NULL); 1601 oop res = oopFactory::new_objArray(SystemDictionary::reflect_Method_klass(), 0, CHECK_NULL);
1602 return (jobjectArray) JNIHandles::make_local(env, res); 1602 return (jobjectArray) JNIHandles::make_local(env, res);
1603 } 1603 }
1604 1604
1605 instanceKlassHandle k(THREAD, java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass))); 1605 instanceKlassHandle k(THREAD, java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass)));
1606 1606
1620 } 1620 }
1621 } 1621 }
1622 } 1622 }
1623 1623
1624 // Allocate result 1624 // Allocate result
1625 objArrayOop r = oopFactory::new_objArray(SystemDictionary::reflect_method_klass(), num_methods, CHECK_NULL); 1625 objArrayOop r = oopFactory::new_objArray(SystemDictionary::reflect_Method_klass(), num_methods, CHECK_NULL);
1626 objArrayHandle result (THREAD, r); 1626 objArrayHandle result (THREAD, r);
1627 1627
1628 int out_idx = 0; 1628 int out_idx = 0;
1629 for (i = 0; i < methods_length; i++) { 1629 for (i = 0; i < methods_length; i++) {
1630 methodHandle method(THREAD, (methodOop) methods->obj_at(i)); 1630 methodHandle method(THREAD, (methodOop) methods->obj_at(i));
1648 1648
1649 // Exclude primitive types and array types 1649 // Exclude primitive types and array types
1650 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) 1650 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass))
1651 || Klass::cast(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass)))->oop_is_javaArray()) { 1651 || Klass::cast(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass)))->oop_is_javaArray()) {
1652 // Return empty array 1652 // Return empty array
1653 oop res = oopFactory::new_objArray(SystemDictionary::reflect_constructor_klass(), 0 , CHECK_NULL); 1653 oop res = oopFactory::new_objArray(SystemDictionary::reflect_Constructor_klass(), 0 , CHECK_NULL);
1654 return (jobjectArray) JNIHandles::make_local(env, res); 1654 return (jobjectArray) JNIHandles::make_local(env, res);
1655 } 1655 }
1656 1656
1657 instanceKlassHandle k(THREAD, java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass))); 1657 instanceKlassHandle k(THREAD, java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass)));
1658 1658
1672 } 1672 }
1673 } 1673 }
1674 } 1674 }
1675 1675
1676 // Allocate result 1676 // Allocate result
1677 objArrayOop r = oopFactory::new_objArray(SystemDictionary::reflect_constructor_klass(), num_constructors, CHECK_NULL); 1677 objArrayOop r = oopFactory::new_objArray(SystemDictionary::reflect_Constructor_klass(), num_constructors, CHECK_NULL);
1678 objArrayHandle result(THREAD, r); 1678 objArrayHandle result(THREAD, r);
1679 1679
1680 int out_idx = 0; 1680 int out_idx = 0;
1681 for (i = 0; i < methods_length; i++) { 1681 for (i = 0; i < methods_length; i++) {
1682 methodHandle method(THREAD, (methodOop) methods->obj_at(i)); 1682 methodHandle method(THREAD, (methodOop) methods->obj_at(i));
1885 } 1885 }
1886 int klass_ref = cp->uncached_klass_ref_index_at(index); 1886 int klass_ref = cp->uncached_klass_ref_index_at(index);
1887 symbolHandle klass_name (THREAD, cp->klass_name_at(klass_ref)); 1887 symbolHandle klass_name (THREAD, cp->klass_name_at(klass_ref));
1888 symbolHandle member_name(THREAD, cp->uncached_name_ref_at(index)); 1888 symbolHandle member_name(THREAD, cp->uncached_name_ref_at(index));
1889 symbolHandle member_sig (THREAD, cp->uncached_signature_ref_at(index)); 1889 symbolHandle member_sig (THREAD, cp->uncached_signature_ref_at(index));
1890 objArrayOop dest_o = oopFactory::new_objArray(SystemDictionary::string_klass(), 3, CHECK_NULL); 1890 objArrayOop dest_o = oopFactory::new_objArray(SystemDictionary::String_klass(), 3, CHECK_NULL);
1891 objArrayHandle dest(THREAD, dest_o); 1891 objArrayHandle dest(THREAD, dest_o);
1892 Handle str = java_lang_String::create_from_symbol(klass_name, CHECK_NULL); 1892 Handle str = java_lang_String::create_from_symbol(klass_name, CHECK_NULL);
1893 dest->obj_at_put(0, str()); 1893 dest->obj_at_put(0, str());
1894 str = java_lang_String::create_from_symbol(member_name, CHECK_NULL); 1894 str = java_lang_String::create_from_symbol(member_name, CHECK_NULL);
1895 dest->obj_at_put(1, str()); 1895 dest->obj_at_put(1, str());
2573 HandleMark hm(THREAD); 2573 HandleMark hm(THREAD);
2574 Handle obj(THREAD, thread->threadObj()); 2574 Handle obj(THREAD, thread->threadObj());
2575 JavaValue result(T_VOID); 2575 JavaValue result(T_VOID);
2576 JavaCalls::call_virtual(&result, 2576 JavaCalls::call_virtual(&result,
2577 obj, 2577 obj,
2578 KlassHandle(THREAD, SystemDictionary::thread_klass()), 2578 KlassHandle(THREAD, SystemDictionary::Thread_klass()),
2579 vmSymbolHandles::run_method_name(), 2579 vmSymbolHandles::run_method_name(),
2580 vmSymbolHandles::void_method_signature(), 2580 vmSymbolHandles::void_method_signature(),
2581 THREAD); 2581 THREAD);
2582 } 2582 }
2583 2583
2671 // NOTE (from JDK 1.2): this is done solely to prevent stopped 2671 // NOTE (from JDK 1.2): this is done solely to prevent stopped
2672 // threads from being restarted. 2672 // threads from being restarted.
2673 // Fix for 4314342, 4145910, perhaps others: it now doesn't have 2673 // Fix for 4314342, 4145910, perhaps others: it now doesn't have
2674 // any effect on the "liveness" of a thread; see 2674 // any effect on the "liveness" of a thread; see
2675 // JVM_IsThreadAlive, below. 2675 // JVM_IsThreadAlive, below.
2676 if (java_throwable->is_a(SystemDictionary::threaddeath_klass())) { 2676 if (java_throwable->is_a(SystemDictionary::ThreadDeath_klass())) {
2677 java_lang_Thread::set_stillborn(java_thread); 2677 java_lang_Thread::set_stillborn(java_thread);
2678 } 2678 }
2679 THROW_OOP(java_throwable); 2679 THROW_OOP(java_throwable);
2680 } else { 2680 } else {
2681 // Enques a VM_Operation to stop all threads and then deliver the exception... 2681 // Enques a VM_Operation to stop all threads and then deliver the exception...
3026 } 3026 }
3027 } 3027 }
3028 } 3028 }
3029 3029
3030 // Create result array of type [Ljava/lang/Class; 3030 // Create result array of type [Ljava/lang/Class;
3031 objArrayOop result = oopFactory::new_objArray(SystemDictionary::class_klass(), depth, CHECK_NULL); 3031 objArrayOop result = oopFactory::new_objArray(SystemDictionary::Class_klass(), depth, CHECK_NULL);
3032 // Fill in mirrors corresponding to method holders 3032 // Fill in mirrors corresponding to method holders
3033 int index = 0; 3033 int index = 0;
3034 while (first != NULL) { 3034 while (first != NULL) {
3035 result->obj_at_put(index++, Klass::cast(first->klass())->java_mirror()); 3035 result->obj_at_put(index++, Klass::cast(first->klass())->java_mirror());
3036 first = first->next; 3036 first = first->next;
4322 ResourceMark rm(THREAD); 4322 ResourceMark rm(THREAD);
4323 ThreadsListEnumerator tle(THREAD, false, false); 4323 ThreadsListEnumerator tle(THREAD, false, false);
4324 JvmtiVMObjectAllocEventCollector oam; 4324 JvmtiVMObjectAllocEventCollector oam;
4325 4325
4326 int num_threads = tle.num_threads(); 4326 int num_threads = tle.num_threads();
4327 objArrayOop r = oopFactory::new_objArray(SystemDictionary::thread_klass(), num_threads, CHECK_NULL); 4327 objArrayOop r = oopFactory::new_objArray(SystemDictionary::Thread_klass(), num_threads, CHECK_NULL);
4328 objArrayHandle threads_ah(THREAD, r); 4328 objArrayHandle threads_ah(THREAD, r);
4329 4329
4330 for (int i = 0; i < num_threads; i++) { 4330 for (int i = 0; i < num_threads; i++) {
4331 Handle h = tle.get_threadObj(i); 4331 Handle h = tle.get_threadObj(i);
4332 threads_ah->obj_at_put(i, h()); 4332 threads_ah->obj_at_put(i, h());
4356 THROW_(vmSymbols::java_lang_IllegalArgumentException(), 0); 4356 THROW_(vmSymbols::java_lang_IllegalArgumentException(), 0);
4357 } 4357 }
4358 4358
4359 // check if threads is not an array of objects of Thread class 4359 // check if threads is not an array of objects of Thread class
4360 klassOop k = objArrayKlass::cast(ah->klass())->element_klass(); 4360 klassOop k = objArrayKlass::cast(ah->klass())->element_klass();
4361 if (k != SystemDictionary::thread_klass()) { 4361 if (k != SystemDictionary::Thread_klass()) {
4362 THROW_(vmSymbols::java_lang_IllegalArgumentException(), 0); 4362 THROW_(vmSymbols::java_lang_IllegalArgumentException(), 0);
4363 } 4363 }
4364 4364
4365 ResourceMark rm(THREAD); 4365 ResourceMark rm(THREAD);
4366 4366
4416 instanceKlassHandle ik_h(THREAD, k); 4416 instanceKlassHandle ik_h(THREAD, k);
4417 int encl_method_class_idx = ik_h->enclosing_method_class_index(); 4417 int encl_method_class_idx = ik_h->enclosing_method_class_index();
4418 if (encl_method_class_idx == 0) { 4418 if (encl_method_class_idx == 0) {
4419 return NULL; 4419 return NULL;
4420 } 4420 }
4421 objArrayOop dest_o = oopFactory::new_objArray(SystemDictionary::object_klass(), 3, CHECK_NULL); 4421 objArrayOop dest_o = oopFactory::new_objArray(SystemDictionary::Object_klass(), 3, CHECK_NULL);
4422 objArrayHandle dest(THREAD, dest_o); 4422 objArrayHandle dest(THREAD, dest_o);
4423 klassOop enc_k = ik_h->constants()->klass_at(encl_method_class_idx, CHECK_NULL); 4423 klassOop enc_k = ik_h->constants()->klass_at(encl_method_class_idx, CHECK_NULL);
4424 dest->obj_at_put(0, Klass::cast(enc_k)->java_mirror()); 4424 dest->obj_at_put(0, Klass::cast(enc_k)->java_mirror());
4425 int encl_method_method_idx = ik_h->enclosing_method_method_index(); 4425 int encl_method_method_idx = ik_h->enclosing_method_method_index();
4426 if (encl_method_method_idx != 0) { 4426 if (encl_method_method_idx != 0) {
4530 case JAVA_THREAD_STATE_NEW : { 4530 case JAVA_THREAD_STATE_NEW : {
4531 assert(values_h->length() == 1 && 4531 assert(values_h->length() == 1 &&
4532 values_h->int_at(0) == java_lang_Thread::NEW, 4532 values_h->int_at(0) == java_lang_Thread::NEW,
4533 "Invalid threadStatus value"); 4533 "Invalid threadStatus value");
4534 4534
4535 objArrayOop r = oopFactory::new_objArray(SystemDictionary::string_klass(), 4535 objArrayOop r = oopFactory::new_objArray(SystemDictionary::String_klass(),
4536 1, /* only 1 substate */ 4536 1, /* only 1 substate */
4537 CHECK_NULL); 4537 CHECK_NULL);
4538 names_h = objArrayHandle(THREAD, r); 4538 names_h = objArrayHandle(THREAD, r);
4539 Handle name = java_lang_String::create_from_str("NEW", CHECK_NULL); 4539 Handle name = java_lang_String::create_from_str("NEW", CHECK_NULL);
4540 names_h->obj_at_put(0, name()); 4540 names_h->obj_at_put(0, name());
4543 case JAVA_THREAD_STATE_RUNNABLE : { 4543 case JAVA_THREAD_STATE_RUNNABLE : {
4544 assert(values_h->length() == 1 && 4544 assert(values_h->length() == 1 &&
4545 values_h->int_at(0) == java_lang_Thread::RUNNABLE, 4545 values_h->int_at(0) == java_lang_Thread::RUNNABLE,
4546 "Invalid threadStatus value"); 4546 "Invalid threadStatus value");
4547 4547
4548 objArrayOop r = oopFactory::new_objArray(SystemDictionary::string_klass(), 4548 objArrayOop r = oopFactory::new_objArray(SystemDictionary::String_klass(),
4549 1, /* only 1 substate */ 4549 1, /* only 1 substate */
4550 CHECK_NULL); 4550 CHECK_NULL);
4551 names_h = objArrayHandle(THREAD, r); 4551 names_h = objArrayHandle(THREAD, r);
4552 Handle name = java_lang_String::create_from_str("RUNNABLE", CHECK_NULL); 4552 Handle name = java_lang_String::create_from_str("RUNNABLE", CHECK_NULL);
4553 names_h->obj_at_put(0, name()); 4553 names_h->obj_at_put(0, name());
4556 case JAVA_THREAD_STATE_BLOCKED : { 4556 case JAVA_THREAD_STATE_BLOCKED : {
4557 assert(values_h->length() == 1 && 4557 assert(values_h->length() == 1 &&
4558 values_h->int_at(0) == java_lang_Thread::BLOCKED_ON_MONITOR_ENTER, 4558 values_h->int_at(0) == java_lang_Thread::BLOCKED_ON_MONITOR_ENTER,
4559 "Invalid threadStatus value"); 4559 "Invalid threadStatus value");
4560 4560
4561 objArrayOop r = oopFactory::new_objArray(SystemDictionary::string_klass(), 4561 objArrayOop r = oopFactory::new_objArray(SystemDictionary::String_klass(),
4562 1, /* only 1 substate */ 4562 1, /* only 1 substate */
4563 CHECK_NULL); 4563 CHECK_NULL);
4564 names_h = objArrayHandle(THREAD, r); 4564 names_h = objArrayHandle(THREAD, r);
4565 Handle name = java_lang_String::create_from_str("BLOCKED", CHECK_NULL); 4565 Handle name = java_lang_String::create_from_str("BLOCKED", CHECK_NULL);
4566 names_h->obj_at_put(0, name()); 4566 names_h->obj_at_put(0, name());
4569 case JAVA_THREAD_STATE_WAITING : { 4569 case JAVA_THREAD_STATE_WAITING : {
4570 assert(values_h->length() == 2 && 4570 assert(values_h->length() == 2 &&
4571 values_h->int_at(0) == java_lang_Thread::IN_OBJECT_WAIT && 4571 values_h->int_at(0) == java_lang_Thread::IN_OBJECT_WAIT &&
4572 values_h->int_at(1) == java_lang_Thread::PARKED, 4572 values_h->int_at(1) == java_lang_Thread::PARKED,
4573 "Invalid threadStatus value"); 4573 "Invalid threadStatus value");
4574 objArrayOop r = oopFactory::new_objArray(SystemDictionary::string_klass(), 4574 objArrayOop r = oopFactory::new_objArray(SystemDictionary::String_klass(),
4575 2, /* number of substates */ 4575 2, /* number of substates */
4576 CHECK_NULL); 4576 CHECK_NULL);
4577 names_h = objArrayHandle(THREAD, r); 4577 names_h = objArrayHandle(THREAD, r);
4578 Handle name0 = java_lang_String::create_from_str("WAITING.OBJECT_WAIT", 4578 Handle name0 = java_lang_String::create_from_str("WAITING.OBJECT_WAIT",
4579 CHECK_NULL); 4579 CHECK_NULL);
4587 assert(values_h->length() == 3 && 4587 assert(values_h->length() == 3 &&
4588 values_h->int_at(0) == java_lang_Thread::SLEEPING && 4588 values_h->int_at(0) == java_lang_Thread::SLEEPING &&
4589 values_h->int_at(1) == java_lang_Thread::IN_OBJECT_WAIT_TIMED && 4589 values_h->int_at(1) == java_lang_Thread::IN_OBJECT_WAIT_TIMED &&
4590 values_h->int_at(2) == java_lang_Thread::PARKED_TIMED, 4590 values_h->int_at(2) == java_lang_Thread::PARKED_TIMED,
4591 "Invalid threadStatus value"); 4591 "Invalid threadStatus value");
4592 objArrayOop r = oopFactory::new_objArray(SystemDictionary::string_klass(), 4592 objArrayOop r = oopFactory::new_objArray(SystemDictionary::String_klass(),
4593 3, /* number of substates */ 4593 3, /* number of substates */
4594 CHECK_NULL); 4594 CHECK_NULL);
4595 names_h = objArrayHandle(THREAD, r); 4595 names_h = objArrayHandle(THREAD, r);
4596 Handle name0 = java_lang_String::create_from_str("TIMED_WAITING.SLEEPING", 4596 Handle name0 = java_lang_String::create_from_str("TIMED_WAITING.SLEEPING",
4597 CHECK_NULL); 4597 CHECK_NULL);
4606 } 4606 }
4607 case JAVA_THREAD_STATE_TERMINATED : { 4607 case JAVA_THREAD_STATE_TERMINATED : {
4608 assert(values_h->length() == 1 && 4608 assert(values_h->length() == 1 &&
4609 values_h->int_at(0) == java_lang_Thread::TERMINATED, 4609 values_h->int_at(0) == java_lang_Thread::TERMINATED,
4610 "Invalid threadStatus value"); 4610 "Invalid threadStatus value");
4611 objArrayOop r = oopFactory::new_objArray(SystemDictionary::string_klass(), 4611 objArrayOop r = oopFactory::new_objArray(SystemDictionary::String_klass(),
4612 1, /* only 1 substate */ 4612 1, /* only 1 substate */
4613 CHECK_NULL); 4613 CHECK_NULL);
4614 names_h = objArrayHandle(THREAD, r); 4614 names_h = objArrayHandle(THREAD, r);
4615 Handle name = java_lang_String::create_from_str("TERMINATED", CHECK_NULL); 4615 Handle name = java_lang_String::create_from_str("TERMINATED", CHECK_NULL);
4616 names_h->obj_at_put(0, name()); 4616 names_h->obj_at_put(0, name());
4641 #else // KERNEL 4641 #else // KERNEL
4642 info->is_kernel_jvm = 0; // false; 4642 info->is_kernel_jvm = 0; // false;
4643 #endif // KERNEL 4643 #endif // KERNEL
4644 } 4644 }
4645 JVM_END 4645 JVM_END
4646