< prev index next >

src/share/vm/classfile/javaClasses.cpp

Print this page
rev 11747 : [mq]: per.hotspot.patch


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");


< prev index next >