< prev index next >

src/share/vm/classfile/javaClasses.cpp

Print this page




1413     case IN_OBJECT_WAIT           : return "WAITING (on object monitor)";
1414     case IN_OBJECT_WAIT_TIMED     : return "TIMED_WAITING (on object monitor)";
1415     case PARKED                   : return "WAITING (parking)";
1416     case PARKED_TIMED             : return "TIMED_WAITING (parking)";
1417     case BLOCKED_ON_MONITOR_ENTER : return "BLOCKED (on object monitor)";
1418     case TERMINATED               : return "TERMINATED";
1419     default                       : return "UNKNOWN";
1420   };
1421 }
1422 int java_lang_ThreadGroup::_parent_offset = 0;
1423 int java_lang_ThreadGroup::_name_offset = 0;
1424 int java_lang_ThreadGroup::_threads_offset = 0;
1425 int java_lang_ThreadGroup::_groups_offset = 0;
1426 int java_lang_ThreadGroup::_maxPriority_offset = 0;
1427 int java_lang_ThreadGroup::_destroyed_offset = 0;
1428 int java_lang_ThreadGroup::_daemon_offset = 0;
1429 int java_lang_ThreadGroup::_nthreads_offset = 0;
1430 int java_lang_ThreadGroup::_ngroups_offset = 0;
1431 
1432 oop  java_lang_ThreadGroup::parent(oop java_thread_group) {
1433   assert(java_thread_group->is_oop(), "thread group must be oop");
1434   return java_thread_group->obj_field(_parent_offset);
1435 }
1436 
1437 // ("name as oop" accessor is not necessary)
1438 
1439 const char* java_lang_ThreadGroup::name(oop java_thread_group) {
1440   oop name = java_thread_group->obj_field(_name_offset);
1441   // ThreadGroup.name can be null
1442   if (name != NULL) {
1443     return java_lang_String::as_utf8_string(name);
1444   }
1445   return NULL;
1446 }
1447 
1448 int java_lang_ThreadGroup::nthreads(oop java_thread_group) {
1449   assert(java_thread_group->is_oop(), "thread group must be oop");
1450   return java_thread_group->int_field(_nthreads_offset);
1451 }
1452 
1453 objArrayOop java_lang_ThreadGroup::threads(oop java_thread_group) {
1454   oop threads = java_thread_group->obj_field(_threads_offset);
1455   assert(threads != NULL, "threadgroups should have threads");
1456   assert(threads->is_objArray(), "just checking"); // Todo: Add better type checking code
1457   return objArrayOop(threads);
1458 }
1459 
1460 int java_lang_ThreadGroup::ngroups(oop java_thread_group) {
1461   assert(java_thread_group->is_oop(), "thread group must be oop");
1462   return java_thread_group->int_field(_ngroups_offset);
1463 }
1464 
1465 objArrayOop java_lang_ThreadGroup::groups(oop java_thread_group) {
1466   oop groups = java_thread_group->obj_field(_groups_offset);
1467   assert(groups == NULL || groups->is_objArray(), "just checking"); // Todo: Add better type checking code
1468   return objArrayOop(groups);
1469 }
1470 
1471 ThreadPriority java_lang_ThreadGroup::maxPriority(oop java_thread_group) {
1472   assert(java_thread_group->is_oop(), "thread group must be oop");
1473   return (ThreadPriority) java_thread_group->int_field(_maxPriority_offset);
1474 }
1475 
1476 bool java_lang_ThreadGroup::is_destroyed(oop java_thread_group) {
1477   assert(java_thread_group->is_oop(), "thread group must be oop");
1478   return java_thread_group->bool_field(_destroyed_offset) != 0;
1479 }
1480 
1481 bool java_lang_ThreadGroup::is_daemon(oop java_thread_group) {
1482   assert(java_thread_group->is_oop(), "thread group must be oop");
1483   return java_thread_group->bool_field(_daemon_offset) != 0;
1484 }
1485 
1486 void java_lang_ThreadGroup::compute_offsets() {
1487   assert(_parent_offset == 0, "offsets should be initialized only once");
1488 
1489   Klass* k = SystemDictionary::ThreadGroup_klass();
1490 
1491   compute_offset(_parent_offset,      k, vmSymbols::parent_name(),      vmSymbols::threadgroup_signature());
1492   compute_offset(_name_offset,        k, vmSymbols::name_name(),        vmSymbols::string_signature());
1493   compute_offset(_threads_offset,     k, vmSymbols::threads_name(),     vmSymbols::thread_array_signature());
1494   compute_offset(_groups_offset,      k, vmSymbols::groups_name(),      vmSymbols::threadgroup_array_signature());
1495   compute_offset(_maxPriority_offset, k, vmSymbols::maxPriority_name(), vmSymbols::int_signature());
1496   compute_offset(_destroyed_offset,   k, vmSymbols::destroyed_name(),   vmSymbols::bool_signature());
1497   compute_offset(_daemon_offset,      k, vmSymbols::daemon_name(),      vmSymbols::bool_signature());
1498   compute_offset(_nthreads_offset,    k, vmSymbols::nthreads_name(),    vmSymbols::int_signature());
1499   compute_offset(_ngroups_offset,     k, vmSymbols::ngroups_name(),     vmSymbols::int_signature());
1500 }
1501 
1502 


2851 }
2852 
2853 void java_lang_Module::set_loader(oop module, oop value) {
2854   assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
2855   module->obj_field_put(loader_offset, value);
2856 }
2857 
2858 oop java_lang_Module::name(oop module) {
2859   assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
2860   return module->obj_field(name_offset);
2861 }
2862 
2863 void java_lang_Module::set_name(oop module, oop value) {
2864   assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
2865   module->obj_field_put(name_offset, value);
2866 }
2867 
2868 ModuleEntry* java_lang_Module::module_entry(oop module, TRAPS) {
2869   assert(_module_entry_offset != -1, "Uninitialized module_entry_offset");
2870   assert(module != NULL, "module can't be null");
2871   assert(module->is_oop(), "module must be oop");
2872 
2873   ModuleEntry* module_entry = (ModuleEntry*)module->address_field(_module_entry_offset);
2874   if (module_entry == NULL) {
2875     // If the inject field containing the ModuleEntry* is null then return the
2876     // class loader's unnamed module.
2877     oop loader = java_lang_Module::loader(module);
2878     Handle h_loader = Handle(THREAD, loader);
2879     ClassLoaderData* loader_cld = SystemDictionary::register_loader(h_loader, CHECK_NULL);
2880     return loader_cld->unnamed_module();
2881   }
2882   return module_entry;
2883 }
2884 
2885 void java_lang_Module::set_module_entry(oop module, ModuleEntry* module_entry) {
2886   assert(_module_entry_offset != -1, "Uninitialized module_entry_offset");
2887   assert(module != NULL, "module can't be null");
2888   assert(module->is_oop(), "module must be oop");
2889   module->address_field_put(_module_entry_offset, (address)module_entry);
2890 }
2891 
2892 Handle reflect_ConstantPool::create(TRAPS) {
2893   assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
2894   InstanceKlass* k = SystemDictionary::reflect_ConstantPool_klass();
2895   // Ensure it is initialized
2896   k->initialize(CHECK_NH);
2897   return k->allocate_instance_handle(THREAD);
2898 }
2899 
2900 
2901 void reflect_ConstantPool::set_cp(oop reflect, ConstantPool* value) {
2902   assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
2903   oop mirror = value->pool_holder()->java_mirror();
2904   // Save the mirror to get back the constant pool.
2905   reflect->obj_field_put(_oop_offset, mirror);
2906 }
2907 
2908 ConstantPool* reflect_ConstantPool::get_cp(oop reflect) {


3071 }
3072 
3073 jlong java_lang_ref_SoftReference::clock() {
3074   InstanceKlass* ik = SystemDictionary::SoftReference_klass();
3075   jlong* offset = (jlong*)ik->static_field_addr(static_clock_offset);
3076   return *offset;
3077 }
3078 
3079 void java_lang_ref_SoftReference::set_clock(jlong value) {
3080   InstanceKlass* ik = SystemDictionary::SoftReference_klass();
3081   jlong* offset = (jlong*)ik->static_field_addr(static_clock_offset);
3082   *offset = value;
3083 }
3084 
3085 // Support for java_lang_invoke_DirectMethodHandle
3086 
3087 int java_lang_invoke_DirectMethodHandle::_member_offset;
3088 
3089 oop java_lang_invoke_DirectMethodHandle::member(oop dmh) {
3090   oop member_name = NULL;
3091   bool is_dmh = dmh->is_oop() && java_lang_invoke_DirectMethodHandle::is_instance(dmh);
3092   assert(is_dmh, "a DirectMethodHandle oop is expected");
3093   if (is_dmh) {
3094     member_name = dmh->obj_field(member_offset_in_bytes());
3095   }
3096   return member_name;
3097 }
3098 
3099 void java_lang_invoke_DirectMethodHandle::compute_offsets() {
3100   Klass* k = SystemDictionary::DirectMethodHandle_klass();
3101   if (k != NULL) {
3102     compute_offset(_member_offset, k, vmSymbols::member_name(), vmSymbols::java_lang_invoke_MemberName_signature());
3103   }
3104 }
3105 
3106 // Support for java_lang_invoke_MethodHandle
3107 
3108 int java_lang_invoke_MethodHandle::_type_offset;
3109 int java_lang_invoke_MethodHandle::_form_offset;
3110 
3111 int java_lang_invoke_MemberName::_clazz_offset;
3112 int java_lang_invoke_MemberName::_name_offset;
3113 int java_lang_invoke_MemberName::_type_offset;
3114 int java_lang_invoke_MemberName::_flags_offset;
3115 int java_lang_invoke_MemberName::_method_offset;
3116 int java_lang_invoke_MemberName::_vmindex_offset;


3459   result->obj_field_put(_context_offset, context());
3460   result->obj_field_put(_privilegedContext_offset, privileged_context());
3461   result->bool_field_put(_isPrivileged_offset, isPrivileged);
3462   // whitelist AccessControlContexts created by the JVM if present
3463   if (_isAuthorized_offset != -1) {
3464     result->bool_field_put(_isAuthorized_offset, true);
3465   }
3466   return result;
3467 }
3468 
3469 
3470 // Support for java_lang_ClassLoader
3471 
3472 bool java_lang_ClassLoader::offsets_computed = false;
3473 int  java_lang_ClassLoader::_loader_data_offset = -1;
3474 int  java_lang_ClassLoader::parallelCapable_offset = -1;
3475 int  java_lang_ClassLoader::name_offset = -1;
3476 int  java_lang_ClassLoader::unnamedModule_offset = -1;
3477 
3478 ClassLoaderData** java_lang_ClassLoader::loader_data_addr(oop loader) {
3479     assert(loader != NULL && loader->is_oop(), "loader must be oop");
3480     return (ClassLoaderData**) loader->address_field_addr(_loader_data_offset);
3481 }
3482 
3483 ClassLoaderData* java_lang_ClassLoader::loader_data(oop loader) {
3484   return *java_lang_ClassLoader::loader_data_addr(loader);
3485 }
3486 
3487 void java_lang_ClassLoader::compute_offsets() {
3488   assert(!offsets_computed, "offsets should be initialized only once");
3489   offsets_computed = true;
3490 
3491   // The field indicating parallelCapable (parallelLockMap) is only present starting in 7,
3492   Klass* k1 = SystemDictionary::ClassLoader_klass();
3493   compute_optional_offset(parallelCapable_offset,
3494     k1, vmSymbols::parallelCapable_name(), vmSymbols::concurrenthashmap_signature());
3495 
3496   compute_offset(name_offset,
3497     k1, vmSymbols::name_name(), vmSymbols::string_signature());
3498 
3499   compute_offset(unnamedModule_offset,




1413     case IN_OBJECT_WAIT           : return "WAITING (on object monitor)";
1414     case IN_OBJECT_WAIT_TIMED     : return "TIMED_WAITING (on object monitor)";
1415     case PARKED                   : return "WAITING (parking)";
1416     case PARKED_TIMED             : return "TIMED_WAITING (parking)";
1417     case BLOCKED_ON_MONITOR_ENTER : return "BLOCKED (on object monitor)";
1418     case TERMINATED               : return "TERMINATED";
1419     default                       : return "UNKNOWN";
1420   };
1421 }
1422 int java_lang_ThreadGroup::_parent_offset = 0;
1423 int java_lang_ThreadGroup::_name_offset = 0;
1424 int java_lang_ThreadGroup::_threads_offset = 0;
1425 int java_lang_ThreadGroup::_groups_offset = 0;
1426 int java_lang_ThreadGroup::_maxPriority_offset = 0;
1427 int java_lang_ThreadGroup::_destroyed_offset = 0;
1428 int java_lang_ThreadGroup::_daemon_offset = 0;
1429 int java_lang_ThreadGroup::_nthreads_offset = 0;
1430 int java_lang_ThreadGroup::_ngroups_offset = 0;
1431 
1432 oop  java_lang_ThreadGroup::parent(oop java_thread_group) {
1433   assert(oopDesc::is_oop(java_thread_group), "thread group must be oop");
1434   return java_thread_group->obj_field(_parent_offset);
1435 }
1436 
1437 // ("name as oop" accessor is not necessary)
1438 
1439 const char* java_lang_ThreadGroup::name(oop java_thread_group) {
1440   oop name = java_thread_group->obj_field(_name_offset);
1441   // ThreadGroup.name can be null
1442   if (name != NULL) {
1443     return java_lang_String::as_utf8_string(name);
1444   }
1445   return NULL;
1446 }
1447 
1448 int java_lang_ThreadGroup::nthreads(oop java_thread_group) {
1449   assert(oopDesc::is_oop(java_thread_group), "thread group must be oop");
1450   return java_thread_group->int_field(_nthreads_offset);
1451 }
1452 
1453 objArrayOop java_lang_ThreadGroup::threads(oop java_thread_group) {
1454   oop threads = java_thread_group->obj_field(_threads_offset);
1455   assert(threads != NULL, "threadgroups should have threads");
1456   assert(threads->is_objArray(), "just checking"); // Todo: Add better type checking code
1457   return objArrayOop(threads);
1458 }
1459 
1460 int java_lang_ThreadGroup::ngroups(oop java_thread_group) {
1461   assert(oopDesc::is_oop(java_thread_group), "thread group must be oop");
1462   return java_thread_group->int_field(_ngroups_offset);
1463 }
1464 
1465 objArrayOop java_lang_ThreadGroup::groups(oop java_thread_group) {
1466   oop groups = java_thread_group->obj_field(_groups_offset);
1467   assert(groups == NULL || groups->is_objArray(), "just checking"); // Todo: Add better type checking code
1468   return objArrayOop(groups);
1469 }
1470 
1471 ThreadPriority java_lang_ThreadGroup::maxPriority(oop java_thread_group) {
1472   assert(oopDesc::is_oop(java_thread_group), "thread group must be oop");
1473   return (ThreadPriority) java_thread_group->int_field(_maxPriority_offset);
1474 }
1475 
1476 bool java_lang_ThreadGroup::is_destroyed(oop java_thread_group) {
1477   assert(oopDesc::is_oop(java_thread_group), "thread group must be oop");
1478   return java_thread_group->bool_field(_destroyed_offset) != 0;
1479 }
1480 
1481 bool java_lang_ThreadGroup::is_daemon(oop java_thread_group) {
1482   assert(oopDesc::is_oop(java_thread_group), "thread group must be oop");
1483   return java_thread_group->bool_field(_daemon_offset) != 0;
1484 }
1485 
1486 void java_lang_ThreadGroup::compute_offsets() {
1487   assert(_parent_offset == 0, "offsets should be initialized only once");
1488 
1489   Klass* k = SystemDictionary::ThreadGroup_klass();
1490 
1491   compute_offset(_parent_offset,      k, vmSymbols::parent_name(),      vmSymbols::threadgroup_signature());
1492   compute_offset(_name_offset,        k, vmSymbols::name_name(),        vmSymbols::string_signature());
1493   compute_offset(_threads_offset,     k, vmSymbols::threads_name(),     vmSymbols::thread_array_signature());
1494   compute_offset(_groups_offset,      k, vmSymbols::groups_name(),      vmSymbols::threadgroup_array_signature());
1495   compute_offset(_maxPriority_offset, k, vmSymbols::maxPriority_name(), vmSymbols::int_signature());
1496   compute_offset(_destroyed_offset,   k, vmSymbols::destroyed_name(),   vmSymbols::bool_signature());
1497   compute_offset(_daemon_offset,      k, vmSymbols::daemon_name(),      vmSymbols::bool_signature());
1498   compute_offset(_nthreads_offset,    k, vmSymbols::nthreads_name(),    vmSymbols::int_signature());
1499   compute_offset(_ngroups_offset,     k, vmSymbols::ngroups_name(),     vmSymbols::int_signature());
1500 }
1501 
1502 


2851 }
2852 
2853 void java_lang_Module::set_loader(oop module, oop value) {
2854   assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
2855   module->obj_field_put(loader_offset, value);
2856 }
2857 
2858 oop java_lang_Module::name(oop module) {
2859   assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
2860   return module->obj_field(name_offset);
2861 }
2862 
2863 void java_lang_Module::set_name(oop module, oop value) {
2864   assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
2865   module->obj_field_put(name_offset, value);
2866 }
2867 
2868 ModuleEntry* java_lang_Module::module_entry(oop module, TRAPS) {
2869   assert(_module_entry_offset != -1, "Uninitialized module_entry_offset");
2870   assert(module != NULL, "module can't be null");
2871   assert(oopDesc::is_oop(module), "module must be oop");
2872 
2873   ModuleEntry* module_entry = (ModuleEntry*)module->address_field(_module_entry_offset);
2874   if (module_entry == NULL) {
2875     // If the inject field containing the ModuleEntry* is null then return the
2876     // class loader's unnamed module.
2877     oop loader = java_lang_Module::loader(module);
2878     Handle h_loader = Handle(THREAD, loader);
2879     ClassLoaderData* loader_cld = SystemDictionary::register_loader(h_loader, CHECK_NULL);
2880     return loader_cld->unnamed_module();
2881   }
2882   return module_entry;
2883 }
2884 
2885 void java_lang_Module::set_module_entry(oop module, ModuleEntry* module_entry) {
2886   assert(_module_entry_offset != -1, "Uninitialized module_entry_offset");
2887   assert(module != NULL, "module can't be null");
2888   assert(oopDesc::is_oop(module), "module must be oop");
2889   module->address_field_put(_module_entry_offset, (address)module_entry);
2890 }
2891 
2892 Handle reflect_ConstantPool::create(TRAPS) {
2893   assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
2894   InstanceKlass* k = SystemDictionary::reflect_ConstantPool_klass();
2895   // Ensure it is initialized
2896   k->initialize(CHECK_NH);
2897   return k->allocate_instance_handle(THREAD);
2898 }
2899 
2900 
2901 void reflect_ConstantPool::set_cp(oop reflect, ConstantPool* value) {
2902   assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem");
2903   oop mirror = value->pool_holder()->java_mirror();
2904   // Save the mirror to get back the constant pool.
2905   reflect->obj_field_put(_oop_offset, mirror);
2906 }
2907 
2908 ConstantPool* reflect_ConstantPool::get_cp(oop reflect) {


3071 }
3072 
3073 jlong java_lang_ref_SoftReference::clock() {
3074   InstanceKlass* ik = SystemDictionary::SoftReference_klass();
3075   jlong* offset = (jlong*)ik->static_field_addr(static_clock_offset);
3076   return *offset;
3077 }
3078 
3079 void java_lang_ref_SoftReference::set_clock(jlong value) {
3080   InstanceKlass* ik = SystemDictionary::SoftReference_klass();
3081   jlong* offset = (jlong*)ik->static_field_addr(static_clock_offset);
3082   *offset = value;
3083 }
3084 
3085 // Support for java_lang_invoke_DirectMethodHandle
3086 
3087 int java_lang_invoke_DirectMethodHandle::_member_offset;
3088 
3089 oop java_lang_invoke_DirectMethodHandle::member(oop dmh) {
3090   oop member_name = NULL;
3091   assert(oopDesc::is_oop(dmh) && java_lang_invoke_DirectMethodHandle::is_instance(dmh),
3092          "a DirectMethodHandle oop is expected");
3093   return dmh->obj_field(member_offset_in_bytes());



3094 }
3095 
3096 void java_lang_invoke_DirectMethodHandle::compute_offsets() {
3097   Klass* k = SystemDictionary::DirectMethodHandle_klass();
3098   if (k != NULL) {
3099     compute_offset(_member_offset, k, vmSymbols::member_name(), vmSymbols::java_lang_invoke_MemberName_signature());
3100   }
3101 }
3102 
3103 // Support for java_lang_invoke_MethodHandle
3104 
3105 int java_lang_invoke_MethodHandle::_type_offset;
3106 int java_lang_invoke_MethodHandle::_form_offset;
3107 
3108 int java_lang_invoke_MemberName::_clazz_offset;
3109 int java_lang_invoke_MemberName::_name_offset;
3110 int java_lang_invoke_MemberName::_type_offset;
3111 int java_lang_invoke_MemberName::_flags_offset;
3112 int java_lang_invoke_MemberName::_method_offset;
3113 int java_lang_invoke_MemberName::_vmindex_offset;


3456   result->obj_field_put(_context_offset, context());
3457   result->obj_field_put(_privilegedContext_offset, privileged_context());
3458   result->bool_field_put(_isPrivileged_offset, isPrivileged);
3459   // whitelist AccessControlContexts created by the JVM if present
3460   if (_isAuthorized_offset != -1) {
3461     result->bool_field_put(_isAuthorized_offset, true);
3462   }
3463   return result;
3464 }
3465 
3466 
3467 // Support for java_lang_ClassLoader
3468 
3469 bool java_lang_ClassLoader::offsets_computed = false;
3470 int  java_lang_ClassLoader::_loader_data_offset = -1;
3471 int  java_lang_ClassLoader::parallelCapable_offset = -1;
3472 int  java_lang_ClassLoader::name_offset = -1;
3473 int  java_lang_ClassLoader::unnamedModule_offset = -1;
3474 
3475 ClassLoaderData** java_lang_ClassLoader::loader_data_addr(oop loader) {
3476     assert(loader != NULL && oopDesc::is_oop(loader), "loader must be oop");
3477     return (ClassLoaderData**) loader->address_field_addr(_loader_data_offset);
3478 }
3479 
3480 ClassLoaderData* java_lang_ClassLoader::loader_data(oop loader) {
3481   return *java_lang_ClassLoader::loader_data_addr(loader);
3482 }
3483 
3484 void java_lang_ClassLoader::compute_offsets() {
3485   assert(!offsets_computed, "offsets should be initialized only once");
3486   offsets_computed = true;
3487 
3488   // The field indicating parallelCapable (parallelLockMap) is only present starting in 7,
3489   Klass* k1 = SystemDictionary::ClassLoader_klass();
3490   compute_optional_offset(parallelCapable_offset,
3491     k1, vmSymbols::parallelCapable_name(), vmSymbols::concurrenthashmap_signature());
3492 
3493   compute_offset(name_offset,
3494     k1, vmSymbols::name_name(), vmSymbols::string_signature());
3495 
3496   compute_offset(unnamedModule_offset,


< prev index next >