2998 return T_ILLEGAL;
2999 } // end switch
3000 return type;
3001 }
3002
3003
3004 void java_lang_boxing_object::print(BasicType type, jvalue* value, outputStream* st) {
3005 switch (type) {
3006 case T_BOOLEAN: st->print("%s", value->z ? "true" : "false"); break;
3007 case T_CHAR: st->print("%d", value->c); break;
3008 case T_BYTE: st->print("%d", value->b); break;
3009 case T_SHORT: st->print("%d", value->s); break;
3010 case T_INT: st->print("%d", value->i); break;
3011 case T_LONG: st->print(INT64_FORMAT, value->j); break;
3012 case T_FLOAT: st->print("%f", value->f); break;
3013 case T_DOUBLE: st->print("%lf", value->d); break;
3014 default: st->print("type %d?", type); break;
3015 }
3016 }
3017
3018
3019 // Support for java_lang_ref_Reference
3020 HeapWord *java_lang_ref_Reference::pending_list_lock_addr() {
3021 InstanceKlass* ik = SystemDictionary::Reference_klass();
3022 address addr = ik->static_field_addr(static_lock_offset);
3023 return (HeapWord*) addr;
3024 }
3025
3026 oop java_lang_ref_Reference::pending_list_lock() {
3027 InstanceKlass* ik = SystemDictionary::Reference_klass();
3028 address addr = ik->static_field_addr(static_lock_offset);
3029 if (UseCompressedOops) {
3030 return oopDesc::load_decode_heap_oop((narrowOop *)addr);
3031 } else {
3032 return oopDesc::load_decode_heap_oop((oop*)addr);
3033 }
3034 }
3035
3036 HeapWord *java_lang_ref_Reference::pending_list_addr() {
3037 InstanceKlass* ik = SystemDictionary::Reference_klass();
3038 address addr = ik->static_field_addr(static_pending_offset);
3039 // XXX This might not be HeapWord aligned, almost rather be char *.
3040 return (HeapWord*)addr;
3041 }
3042
3043 oop java_lang_ref_Reference::pending_list() {
3044 char *addr = (char *)pending_list_addr();
3045 if (UseCompressedOops) {
3046 return oopDesc::load_decode_heap_oop((narrowOop *)addr);
3047 } else {
3048 return oopDesc::load_decode_heap_oop((oop*)addr);
3049 }
3050 }
3051
3052
3053 // Support for java_lang_ref_SoftReference
3054
3055 jlong java_lang_ref_SoftReference::timestamp(oop ref) {
3056 return ref->long_field(timestamp_offset);
3057 }
3058
3059 jlong java_lang_ref_SoftReference::clock() {
3060 InstanceKlass* ik = SystemDictionary::SoftReference_klass();
3061 jlong* offset = (jlong*)ik->static_field_addr(static_clock_offset);
3062 return *offset;
3063 }
3064
3065 void java_lang_ref_SoftReference::set_clock(jlong value) {
3066 InstanceKlass* ik = SystemDictionary::SoftReference_klass();
3067 jlong* offset = (jlong*)ik->static_field_addr(static_clock_offset);
3068 *offset = value;
3069 }
3070
3071 // Support for java_lang_invoke_DirectMethodHandle
3072
3608 int java_lang_reflect_Constructor::parameter_annotations_offset;
3609 int java_lang_reflect_Constructor::type_annotations_offset;
3610 int java_lang_reflect_Field::clazz_offset;
3611 int java_lang_reflect_Field::name_offset;
3612 int java_lang_reflect_Field::type_offset;
3613 int java_lang_reflect_Field::slot_offset;
3614 int java_lang_reflect_Field::modifiers_offset;
3615 int java_lang_reflect_Field::signature_offset;
3616 int java_lang_reflect_Field::annotations_offset;
3617 int java_lang_reflect_Field::type_annotations_offset;
3618 int java_lang_reflect_Parameter::name_offset;
3619 int java_lang_reflect_Parameter::modifiers_offset;
3620 int java_lang_reflect_Parameter::index_offset;
3621 int java_lang_reflect_Parameter::executable_offset;
3622 int java_lang_boxing_object::value_offset;
3623 int java_lang_boxing_object::long_value_offset;
3624 int java_lang_ref_Reference::referent_offset;
3625 int java_lang_ref_Reference::queue_offset;
3626 int java_lang_ref_Reference::next_offset;
3627 int java_lang_ref_Reference::discovered_offset;
3628 int java_lang_ref_Reference::static_lock_offset;
3629 int java_lang_ref_Reference::static_pending_offset;
3630 int java_lang_ref_Reference::number_of_fake_oop_fields;
3631 int java_lang_ref_SoftReference::timestamp_offset;
3632 int java_lang_ref_SoftReference::static_clock_offset;
3633 int java_lang_ClassLoader::parent_offset;
3634 int java_lang_System::static_in_offset;
3635 int java_lang_System::static_out_offset;
3636 int java_lang_System::static_err_offset;
3637 int java_lang_System::static_security_offset;
3638 int java_lang_StackTraceElement::declaringClass_offset;
3639 int java_lang_StackTraceElement::methodName_offset;
3640 int java_lang_StackTraceElement::fileName_offset;
3641 int java_lang_StackTraceElement::lineNumber_offset;
3642 int java_lang_StackTraceElement::moduleName_offset;
3643 int java_lang_StackTraceElement::moduleVersion_offset;
3644 int java_lang_StackFrameInfo::_declaringClass_offset;
3645 int java_lang_StackFrameInfo::_memberName_offset;
3646 int java_lang_StackFrameInfo::_bci_offset;
3647 int java_lang_StackFrameInfo::_version_offset;
3648 int java_lang_LiveStackFrameInfo::_monitors_offset;
3649 int java_lang_LiveStackFrameInfo::_locals_offset;
3764 // are not available to determine the offset_of_static_fields.
3765 void JavaClasses::compute_hard_coded_offsets() {
3766 const int x = heapOopSize;
3767 const int header = instanceOopDesc::base_offset_in_bytes();
3768
3769 // Throwable Class
3770 java_lang_Throwable::backtrace_offset = java_lang_Throwable::hc_backtrace_offset * x + header;
3771 java_lang_Throwable::detailMessage_offset = java_lang_Throwable::hc_detailMessage_offset * x + header;
3772 java_lang_Throwable::stackTrace_offset = java_lang_Throwable::hc_stackTrace_offset * x + header;
3773 java_lang_Throwable::static_unassigned_stacktrace_offset = java_lang_Throwable::hc_static_unassigned_stacktrace_offset * x;
3774
3775 // java_lang_boxing_object
3776 java_lang_boxing_object::value_offset = java_lang_boxing_object::hc_value_offset + header;
3777 java_lang_boxing_object::long_value_offset = align_size_up((java_lang_boxing_object::hc_value_offset + header), BytesPerLong);
3778
3779 // java_lang_ref_Reference:
3780 java_lang_ref_Reference::referent_offset = java_lang_ref_Reference::hc_referent_offset * x + header;
3781 java_lang_ref_Reference::queue_offset = java_lang_ref_Reference::hc_queue_offset * x + header;
3782 java_lang_ref_Reference::next_offset = java_lang_ref_Reference::hc_next_offset * x + header;
3783 java_lang_ref_Reference::discovered_offset = java_lang_ref_Reference::hc_discovered_offset * x + header;
3784 java_lang_ref_Reference::static_lock_offset = java_lang_ref_Reference::hc_static_lock_offset * x;
3785 java_lang_ref_Reference::static_pending_offset = java_lang_ref_Reference::hc_static_pending_offset * x;
3786 // Artificial fields for java_lang_ref_Reference
3787 // The first field is for the discovered field added in 1.4
3788 java_lang_ref_Reference::number_of_fake_oop_fields = 1;
3789
3790 // java_lang_ref_SoftReference Class
3791 java_lang_ref_SoftReference::timestamp_offset = align_size_up((java_lang_ref_SoftReference::hc_timestamp_offset * x + header), BytesPerLong);
3792 // Don't multiply static fields because they are always in wordSize units
3793 java_lang_ref_SoftReference::static_clock_offset = java_lang_ref_SoftReference::hc_static_clock_offset * x;
3794
3795 // java_lang_ClassLoader
3796 java_lang_ClassLoader::parent_offset = java_lang_ClassLoader::hc_parent_offset * x + header;
3797
3798 // java_lang_System
3799 java_lang_System::static_in_offset = java_lang_System::hc_static_in_offset * x;
3800 java_lang_System::static_out_offset = java_lang_System::hc_static_out_offset * x;
3801 java_lang_System::static_err_offset = java_lang_System::hc_static_err_offset * x;
3802 java_lang_System::static_security_offset = java_lang_System::hc_static_security_offset * x;
3803
3804 // java_lang_StackTraceElement
3805 java_lang_StackTraceElement::moduleName_offset = java_lang_StackTraceElement::hc_moduleName_offset * x + header;
3998
3999 CHECK_STATIC_OFFSET("java/lang/System", java_lang_System, in, "Ljava/io/InputStream;");
4000 CHECK_STATIC_OFFSET("java/lang/System", java_lang_System, out, "Ljava/io/PrintStream;");
4001 CHECK_STATIC_OFFSET("java/lang/System", java_lang_System, err, "Ljava/io/PrintStream;");
4002 CHECK_STATIC_OFFSET("java/lang/System", java_lang_System, security, "Ljava/lang/SecurityManager;");
4003
4004 // java.lang.StackTraceElement
4005
4006 CHECK_OFFSET("java/lang/StackTraceElement", java_lang_StackTraceElement, declaringClass, "Ljava/lang/String;");
4007 CHECK_OFFSET("java/lang/StackTraceElement", java_lang_StackTraceElement, methodName, "Ljava/lang/String;");
4008 CHECK_OFFSET("java/lang/StackTraceElement", java_lang_StackTraceElement, fileName, "Ljava/lang/String;");
4009 CHECK_OFFSET("java/lang/StackTraceElement", java_lang_StackTraceElement, lineNumber, "I");
4010
4011 // java.lang.ref.Reference
4012
4013 CHECK_OFFSET("java/lang/ref/Reference", java_lang_ref_Reference, referent, "Ljava/lang/Object;");
4014 CHECK_OFFSET("java/lang/ref/Reference", java_lang_ref_Reference, queue, "Ljava/lang/ref/ReferenceQueue;");
4015 CHECK_OFFSET("java/lang/ref/Reference", java_lang_ref_Reference, next, "Ljava/lang/ref/Reference;");
4016 // Fake field
4017 //CHECK_OFFSET("java/lang/ref/Reference", java_lang_ref_Reference, discovered, "Ljava/lang/ref/Reference;");
4018 CHECK_STATIC_OFFSET("java/lang/ref/Reference", java_lang_ref_Reference, lock, "Ljava/lang/ref/Reference$Lock;");
4019 CHECK_STATIC_OFFSET("java/lang/ref/Reference", java_lang_ref_Reference, pending, "Ljava/lang/ref/Reference;");
4020
4021 // java.lang.ref.SoftReference
4022
4023 CHECK_OFFSET("java/lang/ref/SoftReference", java_lang_ref_SoftReference, timestamp, "J");
4024 CHECK_STATIC_OFFSET("java/lang/ref/SoftReference", java_lang_ref_SoftReference, clock, "J");
4025
4026 // java.lang.AssertionStatusDirectives
4027 //
4028 // The CheckAssertionStatusDirectives boolean can be removed from here and
4029 // globals.hpp after the AssertionStatusDirectives class has been integrated
4030 // into merlin "for some time." Without it, the vm will fail with early
4031 // merlin builds.
4032
4033 if (CheckAssertionStatusDirectives) {
4034 const char* nm = "java/lang/AssertionStatusDirectives";
4035 const char* sig = "[Ljava/lang/String;";
4036 CHECK_OFFSET(nm, java_lang_AssertionStatusDirectives, classes, sig);
4037 CHECK_OFFSET(nm, java_lang_AssertionStatusDirectives, classEnabled, "[Z");
4038 CHECK_OFFSET(nm, java_lang_AssertionStatusDirectives, packages, sig);
4039 CHECK_OFFSET(nm, java_lang_AssertionStatusDirectives, packageEnabled, "[Z");
|
2998 return T_ILLEGAL;
2999 } // end switch
3000 return type;
3001 }
3002
3003
3004 void java_lang_boxing_object::print(BasicType type, jvalue* value, outputStream* st) {
3005 switch (type) {
3006 case T_BOOLEAN: st->print("%s", value->z ? "true" : "false"); break;
3007 case T_CHAR: st->print("%d", value->c); break;
3008 case T_BYTE: st->print("%d", value->b); break;
3009 case T_SHORT: st->print("%d", value->s); break;
3010 case T_INT: st->print("%d", value->i); break;
3011 case T_LONG: st->print(INT64_FORMAT, value->j); break;
3012 case T_FLOAT: st->print("%f", value->f); break;
3013 case T_DOUBLE: st->print("%lf", value->d); break;
3014 default: st->print("type %d?", type); break;
3015 }
3016 }
3017
3018 // Support for java_lang_ref_SoftReference
3019
3020 jlong java_lang_ref_SoftReference::timestamp(oop ref) {
3021 return ref->long_field(timestamp_offset);
3022 }
3023
3024 jlong java_lang_ref_SoftReference::clock() {
3025 InstanceKlass* ik = SystemDictionary::SoftReference_klass();
3026 jlong* offset = (jlong*)ik->static_field_addr(static_clock_offset);
3027 return *offset;
3028 }
3029
3030 void java_lang_ref_SoftReference::set_clock(jlong value) {
3031 InstanceKlass* ik = SystemDictionary::SoftReference_klass();
3032 jlong* offset = (jlong*)ik->static_field_addr(static_clock_offset);
3033 *offset = value;
3034 }
3035
3036 // Support for java_lang_invoke_DirectMethodHandle
3037
3573 int java_lang_reflect_Constructor::parameter_annotations_offset;
3574 int java_lang_reflect_Constructor::type_annotations_offset;
3575 int java_lang_reflect_Field::clazz_offset;
3576 int java_lang_reflect_Field::name_offset;
3577 int java_lang_reflect_Field::type_offset;
3578 int java_lang_reflect_Field::slot_offset;
3579 int java_lang_reflect_Field::modifiers_offset;
3580 int java_lang_reflect_Field::signature_offset;
3581 int java_lang_reflect_Field::annotations_offset;
3582 int java_lang_reflect_Field::type_annotations_offset;
3583 int java_lang_reflect_Parameter::name_offset;
3584 int java_lang_reflect_Parameter::modifiers_offset;
3585 int java_lang_reflect_Parameter::index_offset;
3586 int java_lang_reflect_Parameter::executable_offset;
3587 int java_lang_boxing_object::value_offset;
3588 int java_lang_boxing_object::long_value_offset;
3589 int java_lang_ref_Reference::referent_offset;
3590 int java_lang_ref_Reference::queue_offset;
3591 int java_lang_ref_Reference::next_offset;
3592 int java_lang_ref_Reference::discovered_offset;
3593 int java_lang_ref_Reference::number_of_fake_oop_fields;
3594 int java_lang_ref_SoftReference::timestamp_offset;
3595 int java_lang_ref_SoftReference::static_clock_offset;
3596 int java_lang_ClassLoader::parent_offset;
3597 int java_lang_System::static_in_offset;
3598 int java_lang_System::static_out_offset;
3599 int java_lang_System::static_err_offset;
3600 int java_lang_System::static_security_offset;
3601 int java_lang_StackTraceElement::declaringClass_offset;
3602 int java_lang_StackTraceElement::methodName_offset;
3603 int java_lang_StackTraceElement::fileName_offset;
3604 int java_lang_StackTraceElement::lineNumber_offset;
3605 int java_lang_StackTraceElement::moduleName_offset;
3606 int java_lang_StackTraceElement::moduleVersion_offset;
3607 int java_lang_StackFrameInfo::_declaringClass_offset;
3608 int java_lang_StackFrameInfo::_memberName_offset;
3609 int java_lang_StackFrameInfo::_bci_offset;
3610 int java_lang_StackFrameInfo::_version_offset;
3611 int java_lang_LiveStackFrameInfo::_monitors_offset;
3612 int java_lang_LiveStackFrameInfo::_locals_offset;
3727 // are not available to determine the offset_of_static_fields.
3728 void JavaClasses::compute_hard_coded_offsets() {
3729 const int x = heapOopSize;
3730 const int header = instanceOopDesc::base_offset_in_bytes();
3731
3732 // Throwable Class
3733 java_lang_Throwable::backtrace_offset = java_lang_Throwable::hc_backtrace_offset * x + header;
3734 java_lang_Throwable::detailMessage_offset = java_lang_Throwable::hc_detailMessage_offset * x + header;
3735 java_lang_Throwable::stackTrace_offset = java_lang_Throwable::hc_stackTrace_offset * x + header;
3736 java_lang_Throwable::static_unassigned_stacktrace_offset = java_lang_Throwable::hc_static_unassigned_stacktrace_offset * x;
3737
3738 // java_lang_boxing_object
3739 java_lang_boxing_object::value_offset = java_lang_boxing_object::hc_value_offset + header;
3740 java_lang_boxing_object::long_value_offset = align_size_up((java_lang_boxing_object::hc_value_offset + header), BytesPerLong);
3741
3742 // java_lang_ref_Reference:
3743 java_lang_ref_Reference::referent_offset = java_lang_ref_Reference::hc_referent_offset * x + header;
3744 java_lang_ref_Reference::queue_offset = java_lang_ref_Reference::hc_queue_offset * x + header;
3745 java_lang_ref_Reference::next_offset = java_lang_ref_Reference::hc_next_offset * x + header;
3746 java_lang_ref_Reference::discovered_offset = java_lang_ref_Reference::hc_discovered_offset * x + header;
3747 // Artificial fields for java_lang_ref_Reference
3748 // The first field is for the discovered field added in 1.4
3749 java_lang_ref_Reference::number_of_fake_oop_fields = 1;
3750
3751 // java_lang_ref_SoftReference Class
3752 java_lang_ref_SoftReference::timestamp_offset = align_size_up((java_lang_ref_SoftReference::hc_timestamp_offset * x + header), BytesPerLong);
3753 // Don't multiply static fields because they are always in wordSize units
3754 java_lang_ref_SoftReference::static_clock_offset = java_lang_ref_SoftReference::hc_static_clock_offset * x;
3755
3756 // java_lang_ClassLoader
3757 java_lang_ClassLoader::parent_offset = java_lang_ClassLoader::hc_parent_offset * x + header;
3758
3759 // java_lang_System
3760 java_lang_System::static_in_offset = java_lang_System::hc_static_in_offset * x;
3761 java_lang_System::static_out_offset = java_lang_System::hc_static_out_offset * x;
3762 java_lang_System::static_err_offset = java_lang_System::hc_static_err_offset * x;
3763 java_lang_System::static_security_offset = java_lang_System::hc_static_security_offset * x;
3764
3765 // java_lang_StackTraceElement
3766 java_lang_StackTraceElement::moduleName_offset = java_lang_StackTraceElement::hc_moduleName_offset * x + header;
3959
3960 CHECK_STATIC_OFFSET("java/lang/System", java_lang_System, in, "Ljava/io/InputStream;");
3961 CHECK_STATIC_OFFSET("java/lang/System", java_lang_System, out, "Ljava/io/PrintStream;");
3962 CHECK_STATIC_OFFSET("java/lang/System", java_lang_System, err, "Ljava/io/PrintStream;");
3963 CHECK_STATIC_OFFSET("java/lang/System", java_lang_System, security, "Ljava/lang/SecurityManager;");
3964
3965 // java.lang.StackTraceElement
3966
3967 CHECK_OFFSET("java/lang/StackTraceElement", java_lang_StackTraceElement, declaringClass, "Ljava/lang/String;");
3968 CHECK_OFFSET("java/lang/StackTraceElement", java_lang_StackTraceElement, methodName, "Ljava/lang/String;");
3969 CHECK_OFFSET("java/lang/StackTraceElement", java_lang_StackTraceElement, fileName, "Ljava/lang/String;");
3970 CHECK_OFFSET("java/lang/StackTraceElement", java_lang_StackTraceElement, lineNumber, "I");
3971
3972 // java.lang.ref.Reference
3973
3974 CHECK_OFFSET("java/lang/ref/Reference", java_lang_ref_Reference, referent, "Ljava/lang/Object;");
3975 CHECK_OFFSET("java/lang/ref/Reference", java_lang_ref_Reference, queue, "Ljava/lang/ref/ReferenceQueue;");
3976 CHECK_OFFSET("java/lang/ref/Reference", java_lang_ref_Reference, next, "Ljava/lang/ref/Reference;");
3977 // Fake field
3978 //CHECK_OFFSET("java/lang/ref/Reference", java_lang_ref_Reference, discovered, "Ljava/lang/ref/Reference;");
3979
3980 // java.lang.ref.SoftReference
3981
3982 CHECK_OFFSET("java/lang/ref/SoftReference", java_lang_ref_SoftReference, timestamp, "J");
3983 CHECK_STATIC_OFFSET("java/lang/ref/SoftReference", java_lang_ref_SoftReference, clock, "J");
3984
3985 // java.lang.AssertionStatusDirectives
3986 //
3987 // The CheckAssertionStatusDirectives boolean can be removed from here and
3988 // globals.hpp after the AssertionStatusDirectives class has been integrated
3989 // into merlin "for some time." Without it, the vm will fail with early
3990 // merlin builds.
3991
3992 if (CheckAssertionStatusDirectives) {
3993 const char* nm = "java/lang/AssertionStatusDirectives";
3994 const char* sig = "[Ljava/lang/String;";
3995 CHECK_OFFSET(nm, java_lang_AssertionStatusDirectives, classes, sig);
3996 CHECK_OFFSET(nm, java_lang_AssertionStatusDirectives, classEnabled, "[Z");
3997 CHECK_OFFSET(nm, java_lang_AssertionStatusDirectives, packages, sig);
3998 CHECK_OFFSET(nm, java_lang_AssertionStatusDirectives, packageEnabled, "[Z");
|