< prev index next >

src/share/vm/classfile/javaClasses.cpp

Print this page




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


< prev index next >