927 928 int java_lang_Thread::_name_offset = 0; 929 int java_lang_Thread::_group_offset = 0; 930 int java_lang_Thread::_contextClassLoader_offset = 0; 931 int java_lang_Thread::_inheritedAccessControlContext_offset = 0; 932 int java_lang_Thread::_priority_offset = 0; 933 int java_lang_Thread::_eetop_offset = 0; 934 int java_lang_Thread::_daemon_offset = 0; 935 int java_lang_Thread::_stillborn_offset = 0; 936 int java_lang_Thread::_stackSize_offset = 0; 937 int java_lang_Thread::_tid_offset = 0; 938 int java_lang_Thread::_thread_status_offset = 0; 939 int java_lang_Thread::_park_blocker_offset = 0; 940 int java_lang_Thread::_park_event_offset = 0 ; 941 942 943 void java_lang_Thread::compute_offsets() { 944 assert(_group_offset == 0, "offsets should be initialized only once"); 945 946 Klass* k = SystemDictionary::Thread_klass(); 947 compute_offset(_name_offset, k, vmSymbols::name_name(), vmSymbols::char_array_signature()); 948 compute_offset(_group_offset, k, vmSymbols::group_name(), vmSymbols::threadgroup_signature()); 949 compute_offset(_contextClassLoader_offset, k, vmSymbols::contextClassLoader_name(), vmSymbols::classloader_signature()); 950 compute_offset(_inheritedAccessControlContext_offset, k, vmSymbols::inheritedAccessControlContext_name(), vmSymbols::accesscontrolcontext_signature()); 951 compute_offset(_priority_offset, k, vmSymbols::priority_name(), vmSymbols::int_signature()); 952 compute_offset(_daemon_offset, k, vmSymbols::daemon_name(), vmSymbols::bool_signature()); 953 compute_offset(_eetop_offset, k, vmSymbols::eetop_name(), vmSymbols::long_signature()); 954 compute_offset(_stillborn_offset, k, vmSymbols::stillborn_name(), vmSymbols::bool_signature()); 955 // The stackSize field is only present starting in 1.4, so don't go fatal. 956 compute_optional_offset(_stackSize_offset, k, vmSymbols::stackSize_name(), vmSymbols::long_signature()); 957 // The tid and thread_status fields are only present starting in 1.5, so don't go fatal. 958 compute_optional_offset(_tid_offset, k, vmSymbols::thread_id_name(), vmSymbols::long_signature()); 959 compute_optional_offset(_thread_status_offset, k, vmSymbols::thread_status_name(), vmSymbols::int_signature()); 960 // The parkBlocker field is only present starting in 1.6, so don't go fatal. 961 compute_optional_offset(_park_blocker_offset, k, vmSymbols::park_blocker_name(), vmSymbols::object_signature()); 962 compute_optional_offset(_park_event_offset, k, vmSymbols::park_event_name(), 963 vmSymbols::long_signature()); 964 } 965 966 967 JavaThread* java_lang_Thread::thread(oop java_thread) { 968 return (JavaThread*)java_thread->address_field(_eetop_offset); 969 } 970 971 972 void java_lang_Thread::set_thread(oop java_thread, JavaThread* thread) { 973 java_thread->address_field_put(_eetop_offset, (address)thread); 974 } 975 976 977 typeArrayOop java_lang_Thread::name(oop java_thread) { 978 oop name = java_thread->obj_field(_name_offset); 979 assert(name == NULL || (name->is_typeArray() && TypeArrayKlass::cast(name->klass())->element_type() == T_CHAR), "just checking"); 980 return typeArrayOop(name); 981 } 982 983 984 void java_lang_Thread::set_name(oop java_thread, typeArrayOop name) { 985 assert(java_thread->obj_field(_name_offset) == NULL, "name should be NULL"); 986 java_thread->obj_field_put(_name_offset, name); 987 } 988 989 990 ThreadPriority java_lang_Thread::priority(oop java_thread) { 991 return (ThreadPriority)java_thread->int_field(_priority_offset); 992 } 993 994 995 void java_lang_Thread::set_priority(oop java_thread, ThreadPriority priority) { 996 java_thread->int_field_put(_priority_offset, priority); 997 } 998 999 1000 oop java_lang_Thread::threadGroup(oop java_thread) { 1001 return java_thread->obj_field(_group_offset); 1002 } 1003 1004 | 927 928 int java_lang_Thread::_name_offset = 0; 929 int java_lang_Thread::_group_offset = 0; 930 int java_lang_Thread::_contextClassLoader_offset = 0; 931 int java_lang_Thread::_inheritedAccessControlContext_offset = 0; 932 int java_lang_Thread::_priority_offset = 0; 933 int java_lang_Thread::_eetop_offset = 0; 934 int java_lang_Thread::_daemon_offset = 0; 935 int java_lang_Thread::_stillborn_offset = 0; 936 int java_lang_Thread::_stackSize_offset = 0; 937 int java_lang_Thread::_tid_offset = 0; 938 int java_lang_Thread::_thread_status_offset = 0; 939 int java_lang_Thread::_park_blocker_offset = 0; 940 int java_lang_Thread::_park_event_offset = 0 ; 941 942 943 void java_lang_Thread::compute_offsets() { 944 assert(_group_offset == 0, "offsets should be initialized only once"); 945 946 Klass* k = SystemDictionary::Thread_klass(); 947 compute_offset(_name_offset, k, vmSymbols::name_name(), vmSymbols::string_signature()); 948 compute_offset(_group_offset, k, vmSymbols::group_name(), vmSymbols::threadgroup_signature()); 949 compute_offset(_contextClassLoader_offset, k, vmSymbols::contextClassLoader_name(), vmSymbols::classloader_signature()); 950 compute_offset(_inheritedAccessControlContext_offset, k, vmSymbols::inheritedAccessControlContext_name(), vmSymbols::accesscontrolcontext_signature()); 951 compute_offset(_priority_offset, k, vmSymbols::priority_name(), vmSymbols::int_signature()); 952 compute_offset(_daemon_offset, k, vmSymbols::daemon_name(), vmSymbols::bool_signature()); 953 compute_offset(_eetop_offset, k, vmSymbols::eetop_name(), vmSymbols::long_signature()); 954 compute_offset(_stillborn_offset, k, vmSymbols::stillborn_name(), vmSymbols::bool_signature()); 955 // The stackSize field is only present starting in 1.4, so don't go fatal. 956 compute_optional_offset(_stackSize_offset, k, vmSymbols::stackSize_name(), vmSymbols::long_signature()); 957 // The tid and thread_status fields are only present starting in 1.5, so don't go fatal. 958 compute_optional_offset(_tid_offset, k, vmSymbols::thread_id_name(), vmSymbols::long_signature()); 959 compute_optional_offset(_thread_status_offset, k, vmSymbols::thread_status_name(), vmSymbols::int_signature()); 960 // The parkBlocker field is only present starting in 1.6, so don't go fatal. 961 compute_optional_offset(_park_blocker_offset, k, vmSymbols::park_blocker_name(), vmSymbols::object_signature()); 962 compute_optional_offset(_park_event_offset, k, vmSymbols::park_event_name(), 963 vmSymbols::long_signature()); 964 } 965 966 967 JavaThread* java_lang_Thread::thread(oop java_thread) { 968 return (JavaThread*)java_thread->address_field(_eetop_offset); 969 } 970 971 972 void java_lang_Thread::set_thread(oop java_thread, JavaThread* thread) { 973 java_thread->address_field_put(_eetop_offset, (address)thread); 974 } 975 976 977 oop java_lang_Thread::name(oop java_thread) { 978 oop name = java_thread->obj_field(_name_offset); 979 assert(name != NULL, "thread name is NULL"); 980 return name; 981 } 982 983 984 void java_lang_Thread::set_name(oop java_thread, oop name) { 985 assert(java_thread->obj_field(_name_offset) == NULL, "name should be NULL"); 986 java_thread->obj_field_put(_name_offset, name); 987 } 988 989 990 ThreadPriority java_lang_Thread::priority(oop java_thread) { 991 return (ThreadPriority)java_thread->int_field(_priority_offset); 992 } 993 994 995 void java_lang_Thread::set_priority(oop java_thread, ThreadPriority priority) { 996 java_thread->int_field_put(_priority_offset, priority); 997 } 998 999 1000 oop java_lang_Thread::threadGroup(oop java_thread) { 1001 return java_thread->obj_field(_group_offset); 1002 } 1003 1004 |