hotspot/src/share/vm/prims/jvm.cpp
changeset 4571 80b553bddc26
parent 4429 d7eb4e2099aa
child 4573 6358f8c9ed3b
equal deleted inserted replaced
4569:f372ea9e5ed4 4571:80b553bddc26
    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