2540
2541
2542 // Support for java_lang_ref_SoftReference
2543
2544 jlong java_lang_ref_SoftReference::timestamp(oop ref) {
2545 return ref->long_field(timestamp_offset);
2546 }
2547
2548 jlong java_lang_ref_SoftReference::clock() {
2549 InstanceKlass* ik = InstanceKlass::cast(SystemDictionary::SoftReference_klass());
2550 jlong* offset = (jlong*)ik->static_field_addr(static_clock_offset);
2551 return *offset;
2552 }
2553
2554 void java_lang_ref_SoftReference::set_clock(jlong value) {
2555 InstanceKlass* ik = InstanceKlass::cast(SystemDictionary::SoftReference_klass());
2556 jlong* offset = (jlong*)ik->static_field_addr(static_clock_offset);
2557 *offset = value;
2558 }
2559
2560
2561 // Support for java_lang_invoke_MethodHandle
2562
2563 int java_lang_invoke_MethodHandle::_type_offset;
2564 int java_lang_invoke_MethodHandle::_form_offset;
2565
2566 int java_lang_invoke_MemberName::_clazz_offset;
2567 int java_lang_invoke_MemberName::_name_offset;
2568 int java_lang_invoke_MemberName::_type_offset;
2569 int java_lang_invoke_MemberName::_flags_offset;
2570 int java_lang_invoke_MemberName::_vmtarget_offset;
2571 int java_lang_invoke_MemberName::_vmloader_offset;
2572 int java_lang_invoke_MemberName::_vmindex_offset;
2573
2574 int java_lang_invoke_LambdaForm::_vmentry_offset;
2575
2576 void java_lang_invoke_MethodHandle::compute_offsets() {
2577 Klass* klass_oop = SystemDictionary::MethodHandle_klass();
2578 if (klass_oop != NULL && EnableInvokeDynamic) {
2579 compute_offset(_type_offset, klass_oop, vmSymbols::type_name(), vmSymbols::java_lang_invoke_MethodType_signature());
2580 compute_optional_offset(_form_offset, klass_oop, vmSymbols::form_name(), vmSymbols::java_lang_invoke_LambdaForm_signature());
3188 java_lang_StackTraceElement::methodName_offset = java_lang_StackTraceElement::hc_methodName_offset * x + header;
3189 java_lang_StackTraceElement::fileName_offset = java_lang_StackTraceElement::hc_fileName_offset * x + header;
3190 java_lang_StackTraceElement::lineNumber_offset = java_lang_StackTraceElement::hc_lineNumber_offset * x + header;
3191 java_lang_AssertionStatusDirectives::classes_offset = java_lang_AssertionStatusDirectives::hc_classes_offset * x + header;
3192 java_lang_AssertionStatusDirectives::classEnabled_offset = java_lang_AssertionStatusDirectives::hc_classEnabled_offset * x + header;
3193 java_lang_AssertionStatusDirectives::packages_offset = java_lang_AssertionStatusDirectives::hc_packages_offset * x + header;
3194 java_lang_AssertionStatusDirectives::packageEnabled_offset = java_lang_AssertionStatusDirectives::hc_packageEnabled_offset * x + header;
3195 java_lang_AssertionStatusDirectives::deflt_offset = java_lang_AssertionStatusDirectives::hc_deflt_offset * x + header;
3196
3197 }
3198
3199
3200 // Compute non-hard-coded field offsets of all the classes in this file
3201 void JavaClasses::compute_offsets() {
3202 // java_lang_Class::compute_offsets was called earlier in bootstrap
3203 java_lang_ClassLoader::compute_offsets();
3204 java_lang_Thread::compute_offsets();
3205 java_lang_ThreadGroup::compute_offsets();
3206 if (EnableInvokeDynamic) {
3207 java_lang_invoke_MethodHandle::compute_offsets();
3208 java_lang_invoke_MemberName::compute_offsets();
3209 java_lang_invoke_LambdaForm::compute_offsets();
3210 java_lang_invoke_MethodType::compute_offsets();
3211 java_lang_invoke_CallSite::compute_offsets();
3212 }
3213 java_security_AccessControlContext::compute_offsets();
3214 // Initialize reflection classes. The layouts of these classes
3215 // changed with the new reflection implementation in JDK 1.4, and
3216 // since the Universe doesn't know what JDK version it is until this
3217 // point we defer computation of these offsets until now.
3218 java_lang_reflect_AccessibleObject::compute_offsets();
3219 java_lang_reflect_Method::compute_offsets();
3220 java_lang_reflect_Constructor::compute_offsets();
3221 java_lang_reflect_Field::compute_offsets();
3222 if (JDK_Version::is_gte_jdk14x_version()) {
3223 java_nio_Buffer::compute_offsets();
3224 }
3225 if (JDK_Version::is_gte_jdk15x_version()) {
3226 sun_reflect_ConstantPool::compute_offsets();
3227 sun_reflect_UnsafeStaticFieldAccessorImpl::compute_offsets();
|
2540
2541
2542 // Support for java_lang_ref_SoftReference
2543
2544 jlong java_lang_ref_SoftReference::timestamp(oop ref) {
2545 return ref->long_field(timestamp_offset);
2546 }
2547
2548 jlong java_lang_ref_SoftReference::clock() {
2549 InstanceKlass* ik = InstanceKlass::cast(SystemDictionary::SoftReference_klass());
2550 jlong* offset = (jlong*)ik->static_field_addr(static_clock_offset);
2551 return *offset;
2552 }
2553
2554 void java_lang_ref_SoftReference::set_clock(jlong value) {
2555 InstanceKlass* ik = InstanceKlass::cast(SystemDictionary::SoftReference_klass());
2556 jlong* offset = (jlong*)ik->static_field_addr(static_clock_offset);
2557 *offset = value;
2558 }
2559
2560 // Support for java_lang_invoke_DirectMethodHandle
2561
2562 int java_lang_invoke_DirectMethodHandle::_member_offset;
2563
2564 oop java_lang_invoke_DirectMethodHandle::member(oop dmh) {
2565 oop member_name = NULL;
2566 bool is_dmh = dmh->is_oop() && java_lang_invoke_DirectMethodHandle::is_instance(dmh);
2567 assert(is_dmh, "a DirectMethodHandle oop is expected");
2568 if (is_dmh) {
2569 member_name = dmh->obj_field(member_offset_in_bytes());
2570 }
2571 return member_name;
2572 }
2573
2574 void java_lang_invoke_DirectMethodHandle::compute_offsets() {
2575 Klass* klass_oop = SystemDictionary::DirectMethodHandle_klass();
2576 if (klass_oop != NULL && EnableInvokeDynamic) {
2577 compute_offset(_member_offset, klass_oop, vmSymbols::member_name(), vmSymbols::java_lang_invoke_MemberName_signature());
2578 }
2579 }
2580
2581 // Support for java_lang_invoke_MethodHandle
2582
2583 int java_lang_invoke_MethodHandle::_type_offset;
2584 int java_lang_invoke_MethodHandle::_form_offset;
2585
2586 int java_lang_invoke_MemberName::_clazz_offset;
2587 int java_lang_invoke_MemberName::_name_offset;
2588 int java_lang_invoke_MemberName::_type_offset;
2589 int java_lang_invoke_MemberName::_flags_offset;
2590 int java_lang_invoke_MemberName::_vmtarget_offset;
2591 int java_lang_invoke_MemberName::_vmloader_offset;
2592 int java_lang_invoke_MemberName::_vmindex_offset;
2593
2594 int java_lang_invoke_LambdaForm::_vmentry_offset;
2595
2596 void java_lang_invoke_MethodHandle::compute_offsets() {
2597 Klass* klass_oop = SystemDictionary::MethodHandle_klass();
2598 if (klass_oop != NULL && EnableInvokeDynamic) {
2599 compute_offset(_type_offset, klass_oop, vmSymbols::type_name(), vmSymbols::java_lang_invoke_MethodType_signature());
2600 compute_optional_offset(_form_offset, klass_oop, vmSymbols::form_name(), vmSymbols::java_lang_invoke_LambdaForm_signature());
3208 java_lang_StackTraceElement::methodName_offset = java_lang_StackTraceElement::hc_methodName_offset * x + header;
3209 java_lang_StackTraceElement::fileName_offset = java_lang_StackTraceElement::hc_fileName_offset * x + header;
3210 java_lang_StackTraceElement::lineNumber_offset = java_lang_StackTraceElement::hc_lineNumber_offset * x + header;
3211 java_lang_AssertionStatusDirectives::classes_offset = java_lang_AssertionStatusDirectives::hc_classes_offset * x + header;
3212 java_lang_AssertionStatusDirectives::classEnabled_offset = java_lang_AssertionStatusDirectives::hc_classEnabled_offset * x + header;
3213 java_lang_AssertionStatusDirectives::packages_offset = java_lang_AssertionStatusDirectives::hc_packages_offset * x + header;
3214 java_lang_AssertionStatusDirectives::packageEnabled_offset = java_lang_AssertionStatusDirectives::hc_packageEnabled_offset * x + header;
3215 java_lang_AssertionStatusDirectives::deflt_offset = java_lang_AssertionStatusDirectives::hc_deflt_offset * x + header;
3216
3217 }
3218
3219
3220 // Compute non-hard-coded field offsets of all the classes in this file
3221 void JavaClasses::compute_offsets() {
3222 // java_lang_Class::compute_offsets was called earlier in bootstrap
3223 java_lang_ClassLoader::compute_offsets();
3224 java_lang_Thread::compute_offsets();
3225 java_lang_ThreadGroup::compute_offsets();
3226 if (EnableInvokeDynamic) {
3227 java_lang_invoke_MethodHandle::compute_offsets();
3228 java_lang_invoke_DirectMethodHandle::compute_offsets();
3229 java_lang_invoke_MemberName::compute_offsets();
3230 java_lang_invoke_LambdaForm::compute_offsets();
3231 java_lang_invoke_MethodType::compute_offsets();
3232 java_lang_invoke_CallSite::compute_offsets();
3233 }
3234 java_security_AccessControlContext::compute_offsets();
3235 // Initialize reflection classes. The layouts of these classes
3236 // changed with the new reflection implementation in JDK 1.4, and
3237 // since the Universe doesn't know what JDK version it is until this
3238 // point we defer computation of these offsets until now.
3239 java_lang_reflect_AccessibleObject::compute_offsets();
3240 java_lang_reflect_Method::compute_offsets();
3241 java_lang_reflect_Constructor::compute_offsets();
3242 java_lang_reflect_Field::compute_offsets();
3243 if (JDK_Version::is_gte_jdk14x_version()) {
3244 java_nio_Buffer::compute_offsets();
3245 }
3246 if (JDK_Version::is_gte_jdk15x_version()) {
3247 sun_reflect_ConstantPool::compute_offsets();
3248 sun_reflect_UnsafeStaticFieldAccessorImpl::compute_offsets();
|