33 #include "interpreter/interpreter.hpp"
34 #include "memory/oopFactory.hpp"
35 #include "memory/resourceArea.hpp"
36 #include "memory/universe.inline.hpp"
37 #include "oops/fieldStreams.hpp"
38 #include "oops/instanceKlass.hpp"
39 #include "oops/instanceMirrorKlass.hpp"
40 #include "oops/klass.hpp"
41 #include "oops/method.hpp"
42 #include "oops/symbol.hpp"
43 #include "oops/typeArrayOop.hpp"
44 #include "prims/jvmtiRedefineClassesTrace.hpp"
45 #include "runtime/fieldDescriptor.hpp"
46 #include "runtime/handles.inline.hpp"
47 #include "runtime/interfaceSupport.hpp"
48 #include "runtime/java.hpp"
49 #include "runtime/javaCalls.hpp"
50 #include "runtime/safepoint.hpp"
51 #include "runtime/thread.inline.hpp"
52 #include "runtime/vframe.hpp"
53 #include "utilities/preserveException.hpp"
54
55 PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
56
57 #define INJECTED_FIELD_COMPUTE_OFFSET(klass, name, signature, may_be_java) \
58 klass::_##name##_offset = JavaClasses::compute_injected_offset(JavaClasses::klass##_##name##_enum);
59
60 #define DECLARE_INJECTED_FIELD(klass, name, signature, may_be_java) \
61 { SystemDictionary::WK_KLASS_ENUM_NAME(klass), vmSymbols::VM_SYMBOL_ENUM_NAME(name##_name), vmSymbols::VM_SYMBOL_ENUM_NAME(signature), may_be_java },
62
63 InjectedField JavaClasses::_injected_fields[] = {
64 ALL_INJECTED_FIELDS(DECLARE_INJECTED_FIELD)
65 };
66
67 int JavaClasses::compute_injected_offset(InjectedFieldID id) {
68 return _injected_fields[id].compute_offset();
69 }
70
71
72 InjectedField* JavaClasses::get_injected(Symbol* class_name, int* field_count) {
936 assert(_group_offset == 0, "offsets should be initialized only once");
937
938 Klass* k = SystemDictionary::Thread_klass();
939 compute_offset(_name_offset, k, vmSymbols::name_name(), vmSymbols::string_signature());
940 compute_offset(_group_offset, k, vmSymbols::group_name(), vmSymbols::threadgroup_signature());
941 compute_offset(_contextClassLoader_offset, k, vmSymbols::contextClassLoader_name(), vmSymbols::classloader_signature());
942 compute_offset(_inheritedAccessControlContext_offset, k, vmSymbols::inheritedAccessControlContext_name(), vmSymbols::accesscontrolcontext_signature());
943 compute_offset(_priority_offset, k, vmSymbols::priority_name(), vmSymbols::int_signature());
944 compute_offset(_daemon_offset, k, vmSymbols::daemon_name(), vmSymbols::bool_signature());
945 compute_offset(_eetop_offset, k, vmSymbols::eetop_name(), vmSymbols::long_signature());
946 compute_offset(_stillborn_offset, k, vmSymbols::stillborn_name(), vmSymbols::bool_signature());
947 // The stackSize field is only present starting in 1.4, so don't go fatal.
948 compute_optional_offset(_stackSize_offset, k, vmSymbols::stackSize_name(), vmSymbols::long_signature());
949 // The tid and thread_status fields are only present starting in 1.5, so don't go fatal.
950 compute_optional_offset(_tid_offset, k, vmSymbols::thread_id_name(), vmSymbols::long_signature());
951 compute_optional_offset(_thread_status_offset, k, vmSymbols::thread_status_name(), vmSymbols::int_signature());
952 // The parkBlocker field is only present starting in 1.6, so don't go fatal.
953 compute_optional_offset(_park_blocker_offset, k, vmSymbols::park_blocker_name(), vmSymbols::object_signature());
954 compute_optional_offset(_park_event_offset, k, vmSymbols::park_event_name(),
955 vmSymbols::long_signature());
956 }
957
958
959 JavaThread* java_lang_Thread::thread(oop java_thread) {
960 return (JavaThread*)java_thread->address_field(_eetop_offset);
961 }
962
963
964 void java_lang_Thread::set_thread(oop java_thread, JavaThread* thread) {
965 java_thread->address_field_put(_eetop_offset, (address)thread);
966 }
967
968
969 oop java_lang_Thread::name(oop java_thread) {
970 return java_thread->obj_field(_name_offset);
971 }
972
973
974 void java_lang_Thread::set_name(oop java_thread, oop name) {
975 java_thread->obj_field_put(_name_offset, name);
|
33 #include "interpreter/interpreter.hpp"
34 #include "memory/oopFactory.hpp"
35 #include "memory/resourceArea.hpp"
36 #include "memory/universe.inline.hpp"
37 #include "oops/fieldStreams.hpp"
38 #include "oops/instanceKlass.hpp"
39 #include "oops/instanceMirrorKlass.hpp"
40 #include "oops/klass.hpp"
41 #include "oops/method.hpp"
42 #include "oops/symbol.hpp"
43 #include "oops/typeArrayOop.hpp"
44 #include "prims/jvmtiRedefineClassesTrace.hpp"
45 #include "runtime/fieldDescriptor.hpp"
46 #include "runtime/handles.inline.hpp"
47 #include "runtime/interfaceSupport.hpp"
48 #include "runtime/java.hpp"
49 #include "runtime/javaCalls.hpp"
50 #include "runtime/safepoint.hpp"
51 #include "runtime/thread.inline.hpp"
52 #include "runtime/vframe.hpp"
53 #include "evtrace/traceEvents.hpp"
54 #include "utilities/preserveException.hpp"
55
56 PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
57
58 #define INJECTED_FIELD_COMPUTE_OFFSET(klass, name, signature, may_be_java) \
59 klass::_##name##_offset = JavaClasses::compute_injected_offset(JavaClasses::klass##_##name##_enum);
60
61 #define DECLARE_INJECTED_FIELD(klass, name, signature, may_be_java) \
62 { SystemDictionary::WK_KLASS_ENUM_NAME(klass), vmSymbols::VM_SYMBOL_ENUM_NAME(name##_name), vmSymbols::VM_SYMBOL_ENUM_NAME(signature), may_be_java },
63
64 InjectedField JavaClasses::_injected_fields[] = {
65 ALL_INJECTED_FIELDS(DECLARE_INJECTED_FIELD)
66 };
67
68 int JavaClasses::compute_injected_offset(InjectedFieldID id) {
69 return _injected_fields[id].compute_offset();
70 }
71
72
73 InjectedField* JavaClasses::get_injected(Symbol* class_name, int* field_count) {
937 assert(_group_offset == 0, "offsets should be initialized only once");
938
939 Klass* k = SystemDictionary::Thread_klass();
940 compute_offset(_name_offset, k, vmSymbols::name_name(), vmSymbols::string_signature());
941 compute_offset(_group_offset, k, vmSymbols::group_name(), vmSymbols::threadgroup_signature());
942 compute_offset(_contextClassLoader_offset, k, vmSymbols::contextClassLoader_name(), vmSymbols::classloader_signature());
943 compute_offset(_inheritedAccessControlContext_offset, k, vmSymbols::inheritedAccessControlContext_name(), vmSymbols::accesscontrolcontext_signature());
944 compute_offset(_priority_offset, k, vmSymbols::priority_name(), vmSymbols::int_signature());
945 compute_offset(_daemon_offset, k, vmSymbols::daemon_name(), vmSymbols::bool_signature());
946 compute_offset(_eetop_offset, k, vmSymbols::eetop_name(), vmSymbols::long_signature());
947 compute_offset(_stillborn_offset, k, vmSymbols::stillborn_name(), vmSymbols::bool_signature());
948 // The stackSize field is only present starting in 1.4, so don't go fatal.
949 compute_optional_offset(_stackSize_offset, k, vmSymbols::stackSize_name(), vmSymbols::long_signature());
950 // The tid and thread_status fields are only present starting in 1.5, so don't go fatal.
951 compute_optional_offset(_tid_offset, k, vmSymbols::thread_id_name(), vmSymbols::long_signature());
952 compute_optional_offset(_thread_status_offset, k, vmSymbols::thread_status_name(), vmSymbols::int_signature());
953 // The parkBlocker field is only present starting in 1.6, so don't go fatal.
954 compute_optional_offset(_park_blocker_offset, k, vmSymbols::park_blocker_name(), vmSymbols::object_signature());
955 compute_optional_offset(_park_event_offset, k, vmSymbols::park_event_name(),
956 vmSymbols::long_signature());
957
958 int park_last_global_seq_offset_offset = 0;
959 compute_offset(park_last_global_seq_offset_offset, k, vmSymbols::park_last_global_seq_offset_name(), vmSymbols::long_signature());
960 k->java_mirror()->long_field_put(park_last_global_seq_offset_offset, in_bytes(Thread::park_last_global_seq_offset()));
961 int park_priority_offset_offset = 0;
962 compute_offset(park_priority_offset_offset, k, vmSymbols::park_priority_offset_name(), vmSymbols::long_signature());
963 k->java_mirror()->long_field_put(park_priority_offset_offset, in_bytes(Thread::park_priority_offset()));
964 int nesting_level_offset_offset = 0;
965 compute_offset(nesting_level_offset_offset, k, vmSymbols::nesting_level_offset_name(), vmSymbols::long_signature());
966 k->java_mirror()->long_field_put(nesting_level_offset_offset, in_bytes(Thread::nesting_level_offset()));
967 }
968
969
970 JavaThread* java_lang_Thread::thread(oop java_thread) {
971 return (JavaThread*)java_thread->address_field(_eetop_offset);
972 }
973
974
975 void java_lang_Thread::set_thread(oop java_thread, JavaThread* thread) {
976 java_thread->address_field_put(_eetop_offset, (address)thread);
977 }
978
979
980 oop java_lang_Thread::name(oop java_thread) {
981 return java_thread->obj_field(_name_offset);
982 }
983
984
985 void java_lang_Thread::set_name(oop java_thread, oop name) {
986 java_thread->obj_field_put(_name_offset, name);
|