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,
|