2928 return T_ILLEGAL; 2929 } // end switch 2930 return type; 2931 } 2932 2933 2934 void java_lang_boxing_object::print(BasicType type, jvalue* value, outputStream* st) { 2935 switch (type) { 2936 case T_BOOLEAN: st->print("%s", value->z ? "true" : "false"); break; 2937 case T_CHAR: st->print("%d", value->c); break; 2938 case T_BYTE: st->print("%d", value->b); break; 2939 case T_SHORT: st->print("%d", value->s); break; 2940 case T_INT: st->print("%d", value->i); break; 2941 case T_LONG: st->print(INT64_FORMAT, value->j); break; 2942 case T_FLOAT: st->print("%f", value->f); break; 2943 case T_DOUBLE: st->print("%lf", value->d); break; 2944 default: st->print("type %d?", type); break; 2945 } 2946 } 2947 2948 2949 // Support for java_lang_ref_Reference 2950 HeapWord *java_lang_ref_Reference::pending_list_lock_addr() { 2951 InstanceKlass* ik = SystemDictionary::Reference_klass(); 2952 address addr = ik->static_field_addr(static_lock_offset); 2953 return (HeapWord*) addr; 2954 } 2955 2956 oop java_lang_ref_Reference::pending_list_lock() { 2957 InstanceKlass* ik = SystemDictionary::Reference_klass(); 2958 address addr = ik->static_field_addr(static_lock_offset); 2959 if (UseCompressedOops) { 2960 return oopDesc::load_decode_heap_oop((narrowOop *)addr); 2961 } else { 2962 return oopDesc::load_decode_heap_oop((oop*)addr); 2963 } 2964 } 2965 2966 HeapWord *java_lang_ref_Reference::pending_list_addr() { 2967 InstanceKlass* ik = SystemDictionary::Reference_klass(); 2968 address addr = ik->static_field_addr(static_pending_offset); 2969 // XXX This might not be HeapWord aligned, almost rather be char *. 2970 return (HeapWord*)addr; 2971 } 2972 2973 oop java_lang_ref_Reference::pending_list() { 2974 char *addr = (char *)pending_list_addr(); 2975 if (UseCompressedOops) { 2976 return oopDesc::load_decode_heap_oop((narrowOop *)addr); 2977 } else { 2978 return oopDesc::load_decode_heap_oop((oop*)addr); 2979 } 2980 } 2981 2982 2983 // Support for java_lang_ref_SoftReference 2984 2985 jlong java_lang_ref_SoftReference::timestamp(oop ref) { 2986 return ref->long_field(timestamp_offset); 2987 } 2988 2989 jlong java_lang_ref_SoftReference::clock() { 2990 InstanceKlass* ik = SystemDictionary::SoftReference_klass(); 2991 jlong* offset = (jlong*)ik->static_field_addr(static_clock_offset); 2992 return *offset; 2993 } 2994 2995 void java_lang_ref_SoftReference::set_clock(jlong value) { 2996 InstanceKlass* ik = SystemDictionary::SoftReference_klass(); 2997 jlong* offset = (jlong*)ik->static_field_addr(static_clock_offset); 2998 *offset = value; 2999 } 3000 3001 // Support for java_lang_invoke_DirectMethodHandle 3002 3519 int java_lang_reflect_Constructor::parameter_annotations_offset; 3520 int java_lang_reflect_Constructor::type_annotations_offset; 3521 int java_lang_reflect_Field::clazz_offset; 3522 int java_lang_reflect_Field::name_offset; 3523 int java_lang_reflect_Field::type_offset; 3524 int java_lang_reflect_Field::slot_offset; 3525 int java_lang_reflect_Field::modifiers_offset; 3526 int java_lang_reflect_Field::signature_offset; 3527 int java_lang_reflect_Field::annotations_offset; 3528 int java_lang_reflect_Field::type_annotations_offset; 3529 int java_lang_reflect_Parameter::name_offset; 3530 int java_lang_reflect_Parameter::modifiers_offset; 3531 int java_lang_reflect_Parameter::index_offset; 3532 int java_lang_reflect_Parameter::executable_offset; 3533 int java_lang_boxing_object::value_offset; 3534 int java_lang_boxing_object::long_value_offset; 3535 int java_lang_ref_Reference::referent_offset; 3536 int java_lang_ref_Reference::queue_offset; 3537 int java_lang_ref_Reference::next_offset; 3538 int java_lang_ref_Reference::discovered_offset; 3539 int java_lang_ref_Reference::static_lock_offset; 3540 int java_lang_ref_Reference::static_pending_offset; 3541 int java_lang_ref_Reference::number_of_fake_oop_fields; 3542 int java_lang_ref_SoftReference::timestamp_offset; 3543 int java_lang_ref_SoftReference::static_clock_offset; 3544 int java_lang_ClassLoader::parent_offset; 3545 int java_lang_System::static_in_offset; 3546 int java_lang_System::static_out_offset; 3547 int java_lang_System::static_err_offset; 3548 int java_lang_System::static_security_offset; 3549 int java_lang_StackTraceElement::declaringClass_offset; 3550 int java_lang_StackTraceElement::methodName_offset; 3551 int java_lang_StackTraceElement::fileName_offset; 3552 int java_lang_StackTraceElement::lineNumber_offset; 3553 int java_lang_StackFrameInfo::_declaringClass_offset; 3554 int java_lang_StackFrameInfo::_memberName_offset; 3555 int java_lang_StackFrameInfo::_bci_offset; 3556 int java_lang_StackFrameInfo::_methodName_offset; 3557 int java_lang_StackFrameInfo::_fileName_offset; 3558 int java_lang_StackFrameInfo::_lineNumber_offset; 3559 int java_lang_StackFrameInfo::_mid_offset; 3560 int java_lang_StackFrameInfo::_version_offset; 3690 // are not available to determine the offset_of_static_fields. 3691 void JavaClasses::compute_hard_coded_offsets() { 3692 const int x = heapOopSize; 3693 const int header = instanceOopDesc::base_offset_in_bytes(); 3694 3695 // Throwable Class 3696 java_lang_Throwable::backtrace_offset = java_lang_Throwable::hc_backtrace_offset * x + header; 3697 java_lang_Throwable::detailMessage_offset = java_lang_Throwable::hc_detailMessage_offset * x + header; 3698 java_lang_Throwable::stackTrace_offset = java_lang_Throwable::hc_stackTrace_offset * x + header; 3699 java_lang_Throwable::static_unassigned_stacktrace_offset = java_lang_Throwable::hc_static_unassigned_stacktrace_offset * x; 3700 3701 // java_lang_boxing_object 3702 java_lang_boxing_object::value_offset = java_lang_boxing_object::hc_value_offset + header; 3703 java_lang_boxing_object::long_value_offset = align_size_up((java_lang_boxing_object::hc_value_offset + header), BytesPerLong); 3704 3705 // java_lang_ref_Reference: 3706 java_lang_ref_Reference::referent_offset = java_lang_ref_Reference::hc_referent_offset * x + header; 3707 java_lang_ref_Reference::queue_offset = java_lang_ref_Reference::hc_queue_offset * x + header; 3708 java_lang_ref_Reference::next_offset = java_lang_ref_Reference::hc_next_offset * x + header; 3709 java_lang_ref_Reference::discovered_offset = java_lang_ref_Reference::hc_discovered_offset * x + header; 3710 java_lang_ref_Reference::static_lock_offset = java_lang_ref_Reference::hc_static_lock_offset * x; 3711 java_lang_ref_Reference::static_pending_offset = java_lang_ref_Reference::hc_static_pending_offset * x; 3712 // Artificial fields for java_lang_ref_Reference 3713 // The first field is for the discovered field added in 1.4 3714 java_lang_ref_Reference::number_of_fake_oop_fields = 1; 3715 3716 // java_lang_ref_SoftReference Class 3717 java_lang_ref_SoftReference::timestamp_offset = align_size_up((java_lang_ref_SoftReference::hc_timestamp_offset * x + header), BytesPerLong); 3718 // Don't multiply static fields because they are always in wordSize units 3719 java_lang_ref_SoftReference::static_clock_offset = java_lang_ref_SoftReference::hc_static_clock_offset * x; 3720 3721 // java_lang_ClassLoader 3722 java_lang_ClassLoader::parent_offset = java_lang_ClassLoader::hc_parent_offset * x + header; 3723 3724 // java_lang_System 3725 java_lang_System::static_in_offset = java_lang_System::hc_static_in_offset * x; 3726 java_lang_System::static_out_offset = java_lang_System::hc_static_out_offset * x; 3727 java_lang_System::static_err_offset = java_lang_System::hc_static_err_offset * x; 3728 java_lang_System::static_security_offset = java_lang_System::hc_static_security_offset * x; 3729 3730 // java_lang_StackTraceElement 3731 java_lang_StackTraceElement::declaringClass_offset = java_lang_StackTraceElement::hc_declaringClass_offset * x + header; 3921 3922 CHECK_STATIC_OFFSET("java/lang/System", java_lang_System, in, "Ljava/io/InputStream;"); 3923 CHECK_STATIC_OFFSET("java/lang/System", java_lang_System, out, "Ljava/io/PrintStream;"); 3924 CHECK_STATIC_OFFSET("java/lang/System", java_lang_System, err, "Ljava/io/PrintStream;"); 3925 CHECK_STATIC_OFFSET("java/lang/System", java_lang_System, security, "Ljava/lang/SecurityManager;"); 3926 3927 // java.lang.StackTraceElement 3928 3929 CHECK_OFFSET("java/lang/StackTraceElement", java_lang_StackTraceElement, declaringClass, "Ljava/lang/String;"); 3930 CHECK_OFFSET("java/lang/StackTraceElement", java_lang_StackTraceElement, methodName, "Ljava/lang/String;"); 3931 CHECK_OFFSET("java/lang/StackTraceElement", java_lang_StackTraceElement, fileName, "Ljava/lang/String;"); 3932 CHECK_OFFSET("java/lang/StackTraceElement", java_lang_StackTraceElement, lineNumber, "I"); 3933 3934 // java.lang.ref.Reference 3935 3936 CHECK_OFFSET("java/lang/ref/Reference", java_lang_ref_Reference, referent, "Ljava/lang/Object;"); 3937 CHECK_OFFSET("java/lang/ref/Reference", java_lang_ref_Reference, queue, "Ljava/lang/ref/ReferenceQueue;"); 3938 CHECK_OFFSET("java/lang/ref/Reference", java_lang_ref_Reference, next, "Ljava/lang/ref/Reference;"); 3939 // Fake field 3940 //CHECK_OFFSET("java/lang/ref/Reference", java_lang_ref_Reference, discovered, "Ljava/lang/ref/Reference;"); 3941 CHECK_STATIC_OFFSET("java/lang/ref/Reference", java_lang_ref_Reference, lock, "Ljava/lang/ref/Reference$Lock;"); 3942 CHECK_STATIC_OFFSET("java/lang/ref/Reference", java_lang_ref_Reference, pending, "Ljava/lang/ref/Reference;"); 3943 3944 // java.lang.ref.SoftReference 3945 3946 CHECK_OFFSET("java/lang/ref/SoftReference", java_lang_ref_SoftReference, timestamp, "J"); 3947 CHECK_STATIC_OFFSET("java/lang/ref/SoftReference", java_lang_ref_SoftReference, clock, "J"); 3948 3949 // java.lang.AssertionStatusDirectives 3950 // 3951 // The CheckAssertionStatusDirectives boolean can be removed from here and 3952 // globals.hpp after the AssertionStatusDirectives class has been integrated 3953 // into merlin "for some time." Without it, the vm will fail with early 3954 // merlin builds. 3955 3956 if (CheckAssertionStatusDirectives) { 3957 const char* nm = "java/lang/AssertionStatusDirectives"; 3958 const char* sig = "[Ljava/lang/String;"; 3959 CHECK_OFFSET(nm, java_lang_AssertionStatusDirectives, classes, sig); 3960 CHECK_OFFSET(nm, java_lang_AssertionStatusDirectives, classEnabled, "[Z"); 3961 CHECK_OFFSET(nm, java_lang_AssertionStatusDirectives, packages, sig); 3962 CHECK_OFFSET(nm, java_lang_AssertionStatusDirectives, packageEnabled, "[Z"); | 2928 return T_ILLEGAL; 2929 } // end switch 2930 return type; 2931 } 2932 2933 2934 void java_lang_boxing_object::print(BasicType type, jvalue* value, outputStream* st) { 2935 switch (type) { 2936 case T_BOOLEAN: st->print("%s", value->z ? "true" : "false"); break; 2937 case T_CHAR: st->print("%d", value->c); break; 2938 case T_BYTE: st->print("%d", value->b); break; 2939 case T_SHORT: st->print("%d", value->s); break; 2940 case T_INT: st->print("%d", value->i); break; 2941 case T_LONG: st->print(INT64_FORMAT, value->j); break; 2942 case T_FLOAT: st->print("%f", value->f); break; 2943 case T_DOUBLE: st->print("%lf", value->d); break; 2944 default: st->print("type %d?", type); break; 2945 } 2946 } 2947 2948 // Support for java_lang_ref_SoftReference 2949 2950 jlong java_lang_ref_SoftReference::timestamp(oop ref) { 2951 return ref->long_field(timestamp_offset); 2952 } 2953 2954 jlong java_lang_ref_SoftReference::clock() { 2955 InstanceKlass* ik = SystemDictionary::SoftReference_klass(); 2956 jlong* offset = (jlong*)ik->static_field_addr(static_clock_offset); 2957 return *offset; 2958 } 2959 2960 void java_lang_ref_SoftReference::set_clock(jlong value) { 2961 InstanceKlass* ik = SystemDictionary::SoftReference_klass(); 2962 jlong* offset = (jlong*)ik->static_field_addr(static_clock_offset); 2963 *offset = value; 2964 } 2965 2966 // Support for java_lang_invoke_DirectMethodHandle 2967 3484 int java_lang_reflect_Constructor::parameter_annotations_offset; 3485 int java_lang_reflect_Constructor::type_annotations_offset; 3486 int java_lang_reflect_Field::clazz_offset; 3487 int java_lang_reflect_Field::name_offset; 3488 int java_lang_reflect_Field::type_offset; 3489 int java_lang_reflect_Field::slot_offset; 3490 int java_lang_reflect_Field::modifiers_offset; 3491 int java_lang_reflect_Field::signature_offset; 3492 int java_lang_reflect_Field::annotations_offset; 3493 int java_lang_reflect_Field::type_annotations_offset; 3494 int java_lang_reflect_Parameter::name_offset; 3495 int java_lang_reflect_Parameter::modifiers_offset; 3496 int java_lang_reflect_Parameter::index_offset; 3497 int java_lang_reflect_Parameter::executable_offset; 3498 int java_lang_boxing_object::value_offset; 3499 int java_lang_boxing_object::long_value_offset; 3500 int java_lang_ref_Reference::referent_offset; 3501 int java_lang_ref_Reference::queue_offset; 3502 int java_lang_ref_Reference::next_offset; 3503 int java_lang_ref_Reference::discovered_offset; 3504 int java_lang_ref_Reference::number_of_fake_oop_fields; 3505 int java_lang_ref_SoftReference::timestamp_offset; 3506 int java_lang_ref_SoftReference::static_clock_offset; 3507 int java_lang_ClassLoader::parent_offset; 3508 int java_lang_System::static_in_offset; 3509 int java_lang_System::static_out_offset; 3510 int java_lang_System::static_err_offset; 3511 int java_lang_System::static_security_offset; 3512 int java_lang_StackTraceElement::declaringClass_offset; 3513 int java_lang_StackTraceElement::methodName_offset; 3514 int java_lang_StackTraceElement::fileName_offset; 3515 int java_lang_StackTraceElement::lineNumber_offset; 3516 int java_lang_StackFrameInfo::_declaringClass_offset; 3517 int java_lang_StackFrameInfo::_memberName_offset; 3518 int java_lang_StackFrameInfo::_bci_offset; 3519 int java_lang_StackFrameInfo::_methodName_offset; 3520 int java_lang_StackFrameInfo::_fileName_offset; 3521 int java_lang_StackFrameInfo::_lineNumber_offset; 3522 int java_lang_StackFrameInfo::_mid_offset; 3523 int java_lang_StackFrameInfo::_version_offset; 3653 // are not available to determine the offset_of_static_fields. 3654 void JavaClasses::compute_hard_coded_offsets() { 3655 const int x = heapOopSize; 3656 const int header = instanceOopDesc::base_offset_in_bytes(); 3657 3658 // Throwable Class 3659 java_lang_Throwable::backtrace_offset = java_lang_Throwable::hc_backtrace_offset * x + header; 3660 java_lang_Throwable::detailMessage_offset = java_lang_Throwable::hc_detailMessage_offset * x + header; 3661 java_lang_Throwable::stackTrace_offset = java_lang_Throwable::hc_stackTrace_offset * x + header; 3662 java_lang_Throwable::static_unassigned_stacktrace_offset = java_lang_Throwable::hc_static_unassigned_stacktrace_offset * x; 3663 3664 // java_lang_boxing_object 3665 java_lang_boxing_object::value_offset = java_lang_boxing_object::hc_value_offset + header; 3666 java_lang_boxing_object::long_value_offset = align_size_up((java_lang_boxing_object::hc_value_offset + header), BytesPerLong); 3667 3668 // java_lang_ref_Reference: 3669 java_lang_ref_Reference::referent_offset = java_lang_ref_Reference::hc_referent_offset * x + header; 3670 java_lang_ref_Reference::queue_offset = java_lang_ref_Reference::hc_queue_offset * x + header; 3671 java_lang_ref_Reference::next_offset = java_lang_ref_Reference::hc_next_offset * x + header; 3672 java_lang_ref_Reference::discovered_offset = java_lang_ref_Reference::hc_discovered_offset * x + header; 3673 // Artificial fields for java_lang_ref_Reference 3674 // The first field is for the discovered field added in 1.4 3675 java_lang_ref_Reference::number_of_fake_oop_fields = 1; 3676 3677 // java_lang_ref_SoftReference Class 3678 java_lang_ref_SoftReference::timestamp_offset = align_size_up((java_lang_ref_SoftReference::hc_timestamp_offset * x + header), BytesPerLong); 3679 // Don't multiply static fields because they are always in wordSize units 3680 java_lang_ref_SoftReference::static_clock_offset = java_lang_ref_SoftReference::hc_static_clock_offset * x; 3681 3682 // java_lang_ClassLoader 3683 java_lang_ClassLoader::parent_offset = java_lang_ClassLoader::hc_parent_offset * x + header; 3684 3685 // java_lang_System 3686 java_lang_System::static_in_offset = java_lang_System::hc_static_in_offset * x; 3687 java_lang_System::static_out_offset = java_lang_System::hc_static_out_offset * x; 3688 java_lang_System::static_err_offset = java_lang_System::hc_static_err_offset * x; 3689 java_lang_System::static_security_offset = java_lang_System::hc_static_security_offset * x; 3690 3691 // java_lang_StackTraceElement 3692 java_lang_StackTraceElement::declaringClass_offset = java_lang_StackTraceElement::hc_declaringClass_offset * x + header; 3882 3883 CHECK_STATIC_OFFSET("java/lang/System", java_lang_System, in, "Ljava/io/InputStream;"); 3884 CHECK_STATIC_OFFSET("java/lang/System", java_lang_System, out, "Ljava/io/PrintStream;"); 3885 CHECK_STATIC_OFFSET("java/lang/System", java_lang_System, err, "Ljava/io/PrintStream;"); 3886 CHECK_STATIC_OFFSET("java/lang/System", java_lang_System, security, "Ljava/lang/SecurityManager;"); 3887 3888 // java.lang.StackTraceElement 3889 3890 CHECK_OFFSET("java/lang/StackTraceElement", java_lang_StackTraceElement, declaringClass, "Ljava/lang/String;"); 3891 CHECK_OFFSET("java/lang/StackTraceElement", java_lang_StackTraceElement, methodName, "Ljava/lang/String;"); 3892 CHECK_OFFSET("java/lang/StackTraceElement", java_lang_StackTraceElement, fileName, "Ljava/lang/String;"); 3893 CHECK_OFFSET("java/lang/StackTraceElement", java_lang_StackTraceElement, lineNumber, "I"); 3894 3895 // java.lang.ref.Reference 3896 3897 CHECK_OFFSET("java/lang/ref/Reference", java_lang_ref_Reference, referent, "Ljava/lang/Object;"); 3898 CHECK_OFFSET("java/lang/ref/Reference", java_lang_ref_Reference, queue, "Ljava/lang/ref/ReferenceQueue;"); 3899 CHECK_OFFSET("java/lang/ref/Reference", java_lang_ref_Reference, next, "Ljava/lang/ref/Reference;"); 3900 // Fake field 3901 //CHECK_OFFSET("java/lang/ref/Reference", java_lang_ref_Reference, discovered, "Ljava/lang/ref/Reference;"); 3902 3903 // java.lang.ref.SoftReference 3904 3905 CHECK_OFFSET("java/lang/ref/SoftReference", java_lang_ref_SoftReference, timestamp, "J"); 3906 CHECK_STATIC_OFFSET("java/lang/ref/SoftReference", java_lang_ref_SoftReference, clock, "J"); 3907 3908 // java.lang.AssertionStatusDirectives 3909 // 3910 // The CheckAssertionStatusDirectives boolean can be removed from here and 3911 // globals.hpp after the AssertionStatusDirectives class has been integrated 3912 // into merlin "for some time." Without it, the vm will fail with early 3913 // merlin builds. 3914 3915 if (CheckAssertionStatusDirectives) { 3916 const char* nm = "java/lang/AssertionStatusDirectives"; 3917 const char* sig = "[Ljava/lang/String;"; 3918 CHECK_OFFSET(nm, java_lang_AssertionStatusDirectives, classes, sig); 3919 CHECK_OFFSET(nm, java_lang_AssertionStatusDirectives, classEnabled, "[Z"); 3920 CHECK_OFFSET(nm, java_lang_AssertionStatusDirectives, packages, sig); 3921 CHECK_OFFSET(nm, java_lang_AssertionStatusDirectives, packageEnabled, "[Z"); |