1428 int java_lang_ThreadGroup::_daemon_offset = 0; |
1428 int java_lang_ThreadGroup::_daemon_offset = 0; |
1429 int java_lang_ThreadGroup::_nthreads_offset = 0; |
1429 int java_lang_ThreadGroup::_nthreads_offset = 0; |
1430 int java_lang_ThreadGroup::_ngroups_offset = 0; |
1430 int java_lang_ThreadGroup::_ngroups_offset = 0; |
1431 |
1431 |
1432 oop java_lang_ThreadGroup::parent(oop java_thread_group) { |
1432 oop java_lang_ThreadGroup::parent(oop java_thread_group) { |
1433 assert(java_thread_group->is_oop(), "thread group must be oop"); |
1433 assert(oopDesc::is_oop(java_thread_group), "thread group must be oop"); |
1434 return java_thread_group->obj_field(_parent_offset); |
1434 return java_thread_group->obj_field(_parent_offset); |
1435 } |
1435 } |
1436 |
1436 |
1437 // ("name as oop" accessor is not necessary) |
1437 // ("name as oop" accessor is not necessary) |
1438 |
1438 |
1444 } |
1444 } |
1445 return NULL; |
1445 return NULL; |
1446 } |
1446 } |
1447 |
1447 |
1448 int java_lang_ThreadGroup::nthreads(oop java_thread_group) { |
1448 int java_lang_ThreadGroup::nthreads(oop java_thread_group) { |
1449 assert(java_thread_group->is_oop(), "thread group must be oop"); |
1449 assert(oopDesc::is_oop(java_thread_group), "thread group must be oop"); |
1450 return java_thread_group->int_field(_nthreads_offset); |
1450 return java_thread_group->int_field(_nthreads_offset); |
1451 } |
1451 } |
1452 |
1452 |
1453 objArrayOop java_lang_ThreadGroup::threads(oop java_thread_group) { |
1453 objArrayOop java_lang_ThreadGroup::threads(oop java_thread_group) { |
1454 oop threads = java_thread_group->obj_field(_threads_offset); |
1454 oop threads = java_thread_group->obj_field(_threads_offset); |
1456 assert(threads->is_objArray(), "just checking"); // Todo: Add better type checking code |
1456 assert(threads->is_objArray(), "just checking"); // Todo: Add better type checking code |
1457 return objArrayOop(threads); |
1457 return objArrayOop(threads); |
1458 } |
1458 } |
1459 |
1459 |
1460 int java_lang_ThreadGroup::ngroups(oop java_thread_group) { |
1460 int java_lang_ThreadGroup::ngroups(oop java_thread_group) { |
1461 assert(java_thread_group->is_oop(), "thread group must be oop"); |
1461 assert(oopDesc::is_oop(java_thread_group), "thread group must be oop"); |
1462 return java_thread_group->int_field(_ngroups_offset); |
1462 return java_thread_group->int_field(_ngroups_offset); |
1463 } |
1463 } |
1464 |
1464 |
1465 objArrayOop java_lang_ThreadGroup::groups(oop java_thread_group) { |
1465 objArrayOop java_lang_ThreadGroup::groups(oop java_thread_group) { |
1466 oop groups = java_thread_group->obj_field(_groups_offset); |
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 |
1467 assert(groups == NULL || groups->is_objArray(), "just checking"); // Todo: Add better type checking code |
1468 return objArrayOop(groups); |
1468 return objArrayOop(groups); |
1469 } |
1469 } |
1470 |
1470 |
1471 ThreadPriority java_lang_ThreadGroup::maxPriority(oop java_thread_group) { |
1471 ThreadPriority java_lang_ThreadGroup::maxPriority(oop java_thread_group) { |
1472 assert(java_thread_group->is_oop(), "thread group must be oop"); |
1472 assert(oopDesc::is_oop(java_thread_group), "thread group must be oop"); |
1473 return (ThreadPriority) java_thread_group->int_field(_maxPriority_offset); |
1473 return (ThreadPriority) java_thread_group->int_field(_maxPriority_offset); |
1474 } |
1474 } |
1475 |
1475 |
1476 bool java_lang_ThreadGroup::is_destroyed(oop java_thread_group) { |
1476 bool java_lang_ThreadGroup::is_destroyed(oop java_thread_group) { |
1477 assert(java_thread_group->is_oop(), "thread group must be oop"); |
1477 assert(oopDesc::is_oop(java_thread_group), "thread group must be oop"); |
1478 return java_thread_group->bool_field(_destroyed_offset) != 0; |
1478 return java_thread_group->bool_field(_destroyed_offset) != 0; |
1479 } |
1479 } |
1480 |
1480 |
1481 bool java_lang_ThreadGroup::is_daemon(oop java_thread_group) { |
1481 bool java_lang_ThreadGroup::is_daemon(oop java_thread_group) { |
1482 assert(java_thread_group->is_oop(), "thread group must be oop"); |
1482 assert(oopDesc::is_oop(java_thread_group), "thread group must be oop"); |
1483 return java_thread_group->bool_field(_daemon_offset) != 0; |
1483 return java_thread_group->bool_field(_daemon_offset) != 0; |
1484 } |
1484 } |
1485 |
1485 |
1486 void java_lang_ThreadGroup::compute_offsets() { |
1486 void java_lang_ThreadGroup::compute_offsets() { |
1487 assert(_parent_offset == 0, "offsets should be initialized only once"); |
1487 assert(_parent_offset == 0, "offsets should be initialized only once"); |
2866 } |
2866 } |
2867 |
2867 |
2868 ModuleEntry* java_lang_Module::module_entry(oop module, TRAPS) { |
2868 ModuleEntry* java_lang_Module::module_entry(oop module, TRAPS) { |
2869 assert(_module_entry_offset != -1, "Uninitialized module_entry_offset"); |
2869 assert(_module_entry_offset != -1, "Uninitialized module_entry_offset"); |
2870 assert(module != NULL, "module can't be null"); |
2870 assert(module != NULL, "module can't be null"); |
2871 assert(module->is_oop(), "module must be oop"); |
2871 assert(oopDesc::is_oop(module), "module must be oop"); |
2872 |
2872 |
2873 ModuleEntry* module_entry = (ModuleEntry*)module->address_field(_module_entry_offset); |
2873 ModuleEntry* module_entry = (ModuleEntry*)module->address_field(_module_entry_offset); |
2874 if (module_entry == NULL) { |
2874 if (module_entry == NULL) { |
2875 // If the inject field containing the ModuleEntry* is null then return the |
2875 // If the inject field containing the ModuleEntry* is null then return the |
2876 // class loader's unnamed module. |
2876 // class loader's unnamed module. |
2883 } |
2883 } |
2884 |
2884 |
2885 void java_lang_Module::set_module_entry(oop module, ModuleEntry* module_entry) { |
2885 void java_lang_Module::set_module_entry(oop module, ModuleEntry* module_entry) { |
2886 assert(_module_entry_offset != -1, "Uninitialized module_entry_offset"); |
2886 assert(_module_entry_offset != -1, "Uninitialized module_entry_offset"); |
2887 assert(module != NULL, "module can't be null"); |
2887 assert(module != NULL, "module can't be null"); |
2888 assert(module->is_oop(), "module must be oop"); |
2888 assert(oopDesc::is_oop(module), "module must be oop"); |
2889 module->address_field_put(_module_entry_offset, (address)module_entry); |
2889 module->address_field_put(_module_entry_offset, (address)module_entry); |
2890 } |
2890 } |
2891 |
2891 |
2892 Handle reflect_ConstantPool::create(TRAPS) { |
2892 Handle reflect_ConstantPool::create(TRAPS) { |
2893 assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); |
2893 assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); |
3086 |
3086 |
3087 int java_lang_invoke_DirectMethodHandle::_member_offset; |
3087 int java_lang_invoke_DirectMethodHandle::_member_offset; |
3088 |
3088 |
3089 oop java_lang_invoke_DirectMethodHandle::member(oop dmh) { |
3089 oop java_lang_invoke_DirectMethodHandle::member(oop dmh) { |
3090 oop member_name = NULL; |
3090 oop member_name = NULL; |
3091 bool is_dmh = dmh->is_oop() && java_lang_invoke_DirectMethodHandle::is_instance(dmh); |
3091 assert(oopDesc::is_oop(dmh) && java_lang_invoke_DirectMethodHandle::is_instance(dmh), |
3092 assert(is_dmh, "a DirectMethodHandle oop is expected"); |
3092 "a DirectMethodHandle oop is expected"); |
3093 if (is_dmh) { |
3093 return dmh->obj_field(member_offset_in_bytes()); |
3094 member_name = dmh->obj_field(member_offset_in_bytes()); |
|
3095 } |
|
3096 return member_name; |
|
3097 } |
3094 } |
3098 |
3095 |
3099 void java_lang_invoke_DirectMethodHandle::compute_offsets() { |
3096 void java_lang_invoke_DirectMethodHandle::compute_offsets() { |
3100 Klass* k = SystemDictionary::DirectMethodHandle_klass(); |
3097 Klass* k = SystemDictionary::DirectMethodHandle_klass(); |
3101 if (k != NULL) { |
3098 if (k != NULL) { |
3474 int java_lang_ClassLoader::parallelCapable_offset = -1; |
3471 int java_lang_ClassLoader::parallelCapable_offset = -1; |
3475 int java_lang_ClassLoader::name_offset = -1; |
3472 int java_lang_ClassLoader::name_offset = -1; |
3476 int java_lang_ClassLoader::unnamedModule_offset = -1; |
3473 int java_lang_ClassLoader::unnamedModule_offset = -1; |
3477 |
3474 |
3478 ClassLoaderData** java_lang_ClassLoader::loader_data_addr(oop loader) { |
3475 ClassLoaderData** java_lang_ClassLoader::loader_data_addr(oop loader) { |
3479 assert(loader != NULL && loader->is_oop(), "loader must be oop"); |
3476 assert(loader != NULL && oopDesc::is_oop(loader), "loader must be oop"); |
3480 return (ClassLoaderData**) loader->address_field_addr(_loader_data_offset); |
3477 return (ClassLoaderData**) loader->address_field_addr(_loader_data_offset); |
3481 } |
3478 } |
3482 |
3479 |
3483 ClassLoaderData* java_lang_ClassLoader::loader_data(oop loader) { |
3480 ClassLoaderData* java_lang_ClassLoader::loader_data(oop loader) { |
3484 return *java_lang_ClassLoader::loader_data_addr(loader); |
3481 return *java_lang_ClassLoader::loader_data_addr(loader); |