< prev index next >

src/share/vm/classfile/javaClasses.cpp

Print this page




  98 
  99 static bool find_field(InstanceKlass* ik,
 100                        Symbol* name_symbol, Symbol* signature_symbol,
 101                        fieldDescriptor* fd,
 102                        bool allow_super = false) {
 103   if (allow_super)
 104     return ik->find_field(name_symbol, signature_symbol, fd) != NULL;
 105   else
 106     return ik->find_local_field(name_symbol, signature_symbol, fd);
 107 }
 108 
 109 // Helpful routine for computing field offsets at run time rather than hardcoding them
 110 static void
 111 compute_offset(int &dest_offset,
 112                Klass* klass_oop, Symbol* name_symbol, Symbol* signature_symbol,
 113                bool allow_super = false) {
 114   fieldDescriptor fd;
 115   InstanceKlass* ik = InstanceKlass::cast(klass_oop);
 116   if (!find_field(ik, name_symbol, signature_symbol, &fd, allow_super)) {
 117     ResourceMark rm;
 118     tty->print_cr("Invalid layout of %s at %s", ik->external_name(), name_symbol->as_C_string());
 119 #ifndef PRODUCT
 120     klass_oop->print();
 121     tty->print_cr("all fields:");
 122     for (AllFieldStream fs(InstanceKlass::cast(klass_oop)); !fs.done(); fs.next()) {
 123       tty->print_cr("  name: %s, sig: %s, flags: %08x", fs.name()->as_C_string(), fs.signature()->as_C_string(), fs.access_flags().as_int());
 124     }
 125 #endif //PRODUCT
 126     fatal("Invalid layout of preloaded class");
 127   }
 128   dest_offset = fd.offset();
 129 }
 130 
 131 // Same as above but for "optional" offsets that might not be present in certain JDK versions
 132 static void
 133 compute_optional_offset(int& dest_offset,
 134                         Klass* klass_oop, Symbol* name_symbol, Symbol* signature_symbol,
 135                         bool allow_super = false) {
 136   fieldDescriptor fd;
 137   InstanceKlass* ik = InstanceKlass::cast(klass_oop);
 138   if (find_field(ik, name_symbol, signature_symbol, &fd, allow_super)) {


 857       (*reference_klass) = as_Klass(java_class);
 858     return T_OBJECT;
 859   }
 860 }
 861 
 862 
 863 oop java_lang_Class::primitive_mirror(BasicType t) {
 864   oop mirror = Universe::java_mirror(t);
 865   assert(mirror != NULL && mirror->is_a(SystemDictionary::Class_klass()), "must be a Class");
 866   assert(java_lang_Class::is_primitive(mirror), "must be primitive");
 867   return mirror;
 868 }
 869 
 870 bool java_lang_Class::offsets_computed = false;
 871 int  java_lang_Class::classRedefinedCount_offset = -1;
 872 
 873 void java_lang_Class::compute_offsets() {
 874   assert(!offsets_computed, "offsets should be initialized only once");
 875   offsets_computed = true;
 876 

 877   Klass* k = SystemDictionary::Class_klass();

 878   // The classRedefinedCount field is only present starting in 1.5,
 879   // so don't go fatal.
 880   compute_optional_offset(classRedefinedCount_offset,
 881                           k, vmSymbols::classRedefinedCount_name(), vmSymbols::int_signature());
 882 
 883   // Needs to be optional because the old build runs Queens during bootstrapping
 884   // and jdk8-9 doesn't have coordinated pushes yet.
 885   compute_optional_offset(_class_loader_offset,
 886                  k, vmSymbols::classLoader_name(),
 887                  vmSymbols::classloader_signature());
 888 
 889   compute_offset(_component_mirror_offset,
 890                  k, vmSymbols::componentType_name(),
 891                  vmSymbols::class_signature());
 892 
 893   // Init lock is a C union with component_mirror.  Only instanceKlass mirrors have
 894   // init_lock and only ArrayKlass mirrors have component_mirror.  Since both are oops
 895   // GC treats them the same.
 896   _init_lock_offset = _component_mirror_offset;
 897 
 898   CLASS_INJECTED_FIELDS(INJECTED_FIELD_COMPUTE_OFFSET);
 899 }
 900 




 901 int java_lang_Class::classRedefinedCount(oop the_class_mirror) {
 902   if (classRedefinedCount_offset == -1) {
 903     // If we don't have an offset for it then just return -1 as a marker.
 904     return -1;
 905   }
 906 
 907   return the_class_mirror->int_field(classRedefinedCount_offset);
 908 }
 909 
 910 void java_lang_Class::set_classRedefinedCount(oop the_class_mirror, int value) {
 911   if (classRedefinedCount_offset == -1) {
 912     // If we don't have an offset for it then nothing to set.
 913     return;
 914   }
 915 
 916   the_class_mirror->int_field_put(classRedefinedCount_offset, value);
 917 }
 918 
















 919 
 920 // Note: JDK1.1 and before had a privateInfo_offset field which was used for the
 921 //       platform thread structure, and a eetop offset which was used for thread
 922 //       local storage (and unused by the HotSpot VM). In JDK1.2 the two structures
 923 //       merged, so in the HotSpot VM we just use the eetop field for the thread
 924 //       instead of the privateInfo_offset.
 925 //
 926 // Note: The stackSize field is only present starting in 1.4.
 927 
 928 int java_lang_Thread::_name_offset = 0;
 929 int java_lang_Thread::_group_offset = 0;
 930 int java_lang_Thread::_contextClassLoader_offset = 0;
 931 int java_lang_Thread::_inheritedAccessControlContext_offset = 0;
 932 int java_lang_Thread::_priority_offset = 0;
 933 int java_lang_Thread::_eetop_offset = 0;
 934 int java_lang_Thread::_daemon_offset = 0;
 935 int java_lang_Thread::_stillborn_offset = 0;
 936 int java_lang_Thread::_stackSize_offset = 0;
 937 int java_lang_Thread::_tid_offset = 0;
 938 int java_lang_Thread::_thread_status_offset = 0;


2683   }
2684   return member_name;
2685 }
2686 
2687 void java_lang_invoke_DirectMethodHandle::compute_offsets() {
2688   Klass* klass_oop = SystemDictionary::DirectMethodHandle_klass();
2689   if (klass_oop != NULL) {
2690     compute_offset(_member_offset, klass_oop, vmSymbols::member_name(), vmSymbols::java_lang_invoke_MemberName_signature());
2691   }
2692 }
2693 
2694 // Support for java_lang_invoke_MethodHandle
2695 
2696 int java_lang_invoke_MethodHandle::_type_offset;
2697 int java_lang_invoke_MethodHandle::_form_offset;
2698 
2699 int java_lang_invoke_MemberName::_clazz_offset;
2700 int java_lang_invoke_MemberName::_name_offset;
2701 int java_lang_invoke_MemberName::_type_offset;
2702 int java_lang_invoke_MemberName::_flags_offset;

2703 int java_lang_invoke_MemberName::_vmtarget_offset;
2704 int java_lang_invoke_MemberName::_vmloader_offset;
2705 int java_lang_invoke_MemberName::_vmindex_offset;
2706 
2707 int java_lang_invoke_LambdaForm::_vmentry_offset;
2708 
2709 void java_lang_invoke_MethodHandle::compute_offsets() {
2710   Klass* klass_oop = SystemDictionary::MethodHandle_klass();
2711   if (klass_oop != NULL) {
2712     compute_offset(_type_offset, klass_oop, vmSymbols::type_name(), vmSymbols::java_lang_invoke_MethodType_signature());
2713     compute_offset(_form_offset, klass_oop, vmSymbols::form_name(), vmSymbols::java_lang_invoke_LambdaForm_signature());
2714   }
2715 }
2716 
2717 void java_lang_invoke_MemberName::compute_offsets() {
2718   Klass* klass_oop = SystemDictionary::MemberName_klass();
2719   if (klass_oop != NULL) {
2720     compute_offset(_clazz_offset,     klass_oop, vmSymbols::clazz_name(),     vmSymbols::class_signature());
2721     compute_offset(_name_offset,      klass_oop, vmSymbols::name_name(),      vmSymbols::string_signature());
2722     compute_offset(_type_offset,      klass_oop, vmSymbols::type_name(),      vmSymbols::object_signature());
2723     compute_offset(_flags_offset,     klass_oop, vmSymbols::flags_name(),     vmSymbols::int_signature());

2724     MEMBERNAME_INJECTED_FIELDS(INJECTED_FIELD_COMPUTE_OFFSET);
2725   }
2726 }
2727 
2728 void java_lang_invoke_LambdaForm::compute_offsets() {
2729   Klass* klass_oop = SystemDictionary::LambdaForm_klass();
2730   if (klass_oop != NULL) {
2731     compute_offset(_vmentry_offset, klass_oop, vmSymbols::vmentry_name(), vmSymbols::java_lang_invoke_MemberName_signature());
2732   }
2733 }
2734 
2735 oop java_lang_invoke_MethodHandle::type(oop mh) {
2736   return mh->obj_field(_type_offset);
2737 }
2738 
2739 void java_lang_invoke_MethodHandle::set_type(oop mh, oop mtype) {
2740   mh->obj_field_put(_type_offset, mtype);
2741 }
2742 
2743 oop java_lang_invoke_MethodHandle::form(oop mh) {


2775 oop java_lang_invoke_MemberName::type(oop mname) {
2776   assert(is_instance(mname), "wrong type");
2777   return mname->obj_field(_type_offset);
2778 }
2779 
2780 void java_lang_invoke_MemberName::set_type(oop mname, oop type) {
2781   assert(is_instance(mname), "wrong type");
2782   mname->obj_field_put(_type_offset, type);
2783 }
2784 
2785 int java_lang_invoke_MemberName::flags(oop mname) {
2786   assert(is_instance(mname), "wrong type");
2787   return mname->int_field(_flags_offset);
2788 }
2789 
2790 void java_lang_invoke_MemberName::set_flags(oop mname, int flags) {
2791   assert(is_instance(mname), "wrong type");
2792   mname->int_field_put(_flags_offset, flags);
2793 }
2794 





2795 Metadata* java_lang_invoke_MemberName::vmtarget(oop mname) {
2796   assert(is_instance(mname), "wrong type");
2797   return (Metadata*)mname->address_field(_vmtarget_offset);
2798 }
2799 
2800 #if INCLUDE_JVMTI
2801 // Can be executed on VM thread only
2802 void java_lang_invoke_MemberName::adjust_vmtarget(oop mname, Metadata* ref) {
2803   assert((is_instance(mname) && (flags(mname) & (MN_IS_METHOD | MN_IS_CONSTRUCTOR)) > 0), "wrong type");
2804   assert(Thread::current()->is_VM_thread(), "not VM thread");
2805   mname->address_field_put(_vmtarget_offset, (address)ref);
2806 }
2807 #endif // INCLUDE_JVMTI
2808 
2809 void java_lang_invoke_MemberName::set_vmtarget(oop mname, Metadata* ref) {
2810   assert(is_instance(mname), "wrong type");
2811   // check the type of the vmtarget
2812   oop dependency = NULL;
2813   if (ref != NULL) {
2814     switch (flags(mname) & (MN_IS_METHOD |


3113 
3114 bool java_lang_System::has_security_manager() {
3115   InstanceKlass* ik = InstanceKlass::cast(SystemDictionary::System_klass());
3116   address addr = ik->static_field_addr(static_security_offset);
3117   if (UseCompressedOops) {
3118     return oopDesc::load_decode_heap_oop((narrowOop *)addr) != NULL;
3119   } else {
3120     return oopDesc::load_decode_heap_oop((oop*)addr) != NULL;
3121   }
3122 }
3123 
3124 int java_lang_Class::_klass_offset;
3125 int java_lang_Class::_array_klass_offset;
3126 int java_lang_Class::_oop_size_offset;
3127 int java_lang_Class::_static_oop_field_count_offset;
3128 int java_lang_Class::_class_loader_offset;
3129 int java_lang_Class::_protection_domain_offset;
3130 int java_lang_Class::_component_mirror_offset;
3131 int java_lang_Class::_init_lock_offset;
3132 int java_lang_Class::_signers_offset;


3133 GrowableArray<Klass*>* java_lang_Class::_fixup_mirror_list = NULL;

3134 int java_lang_Throwable::backtrace_offset;
3135 int java_lang_Throwable::detailMessage_offset;
3136 int java_lang_Throwable::cause_offset;
3137 int java_lang_Throwable::stackTrace_offset;
3138 int java_lang_Throwable::static_unassigned_stacktrace_offset;

3139 int java_lang_reflect_AccessibleObject::override_offset;

3140 int java_lang_reflect_Method::clazz_offset;
3141 int java_lang_reflect_Method::name_offset;
3142 int java_lang_reflect_Method::returnType_offset;
3143 int java_lang_reflect_Method::parameterTypes_offset;
3144 int java_lang_reflect_Method::exceptionTypes_offset;
3145 int java_lang_reflect_Method::slot_offset;
3146 int java_lang_reflect_Method::modifiers_offset;
3147 int java_lang_reflect_Method::signature_offset;
3148 int java_lang_reflect_Method::annotations_offset;
3149 int java_lang_reflect_Method::parameter_annotations_offset;
3150 int java_lang_reflect_Method::annotation_default_offset;
3151 int java_lang_reflect_Method::type_annotations_offset;

3152 int java_lang_reflect_Constructor::clazz_offset;
3153 int java_lang_reflect_Constructor::parameterTypes_offset;
3154 int java_lang_reflect_Constructor::exceptionTypes_offset;
3155 int java_lang_reflect_Constructor::slot_offset;
3156 int java_lang_reflect_Constructor::modifiers_offset;
3157 int java_lang_reflect_Constructor::signature_offset;
3158 int java_lang_reflect_Constructor::annotations_offset;
3159 int java_lang_reflect_Constructor::parameter_annotations_offset;
3160 int java_lang_reflect_Constructor::type_annotations_offset;

3161 int java_lang_reflect_Field::clazz_offset;
3162 int java_lang_reflect_Field::name_offset;
3163 int java_lang_reflect_Field::type_offset;
3164 int java_lang_reflect_Field::slot_offset;
3165 int java_lang_reflect_Field::modifiers_offset;
3166 int java_lang_reflect_Field::signature_offset;
3167 int java_lang_reflect_Field::annotations_offset;
3168 int java_lang_reflect_Field::type_annotations_offset;

3169 int java_lang_reflect_Parameter::name_offset;
3170 int java_lang_reflect_Parameter::modifiers_offset;
3171 int java_lang_reflect_Parameter::index_offset;
3172 int java_lang_reflect_Parameter::executable_offset;

3173 int java_lang_boxing_object::value_offset;
3174 int java_lang_boxing_object::long_value_offset;

3175 int java_lang_ref_Reference::referent_offset;
3176 int java_lang_ref_Reference::queue_offset;
3177 int java_lang_ref_Reference::next_offset;
3178 int java_lang_ref_Reference::discovered_offset;
3179 int java_lang_ref_Reference::static_lock_offset;
3180 int java_lang_ref_Reference::static_pending_offset;
3181 int java_lang_ref_Reference::number_of_fake_oop_fields;

3182 int java_lang_ref_SoftReference::timestamp_offset;
3183 int java_lang_ref_SoftReference::static_clock_offset;

3184 int java_lang_ClassLoader::parent_offset;

3185 int java_lang_System::static_in_offset;
3186 int java_lang_System::static_out_offset;
3187 int java_lang_System::static_err_offset;
3188 int java_lang_System::static_security_offset;

3189 int java_lang_StackTraceElement::declaringClass_offset;
3190 int java_lang_StackTraceElement::methodName_offset;
3191 int java_lang_StackTraceElement::fileName_offset;
3192 int java_lang_StackTraceElement::lineNumber_offset;

3193 int java_lang_AssertionStatusDirectives::classes_offset;
3194 int java_lang_AssertionStatusDirectives::classEnabled_offset;
3195 int java_lang_AssertionStatusDirectives::packages_offset;
3196 int java_lang_AssertionStatusDirectives::packageEnabled_offset;
3197 int java_lang_AssertionStatusDirectives::deflt_offset;

3198 int java_nio_Buffer::_limit_offset;

3199 int java_util_concurrent_locks_AbstractOwnableSynchronizer::_owner_offset = 0;

3200 int sun_reflect_ConstantPool::_oop_offset;

3201 int sun_reflect_UnsafeStaticFieldAccessorImpl::_base_offset;
3202 
3203 
3204 // Support for java_lang_StackTraceElement
3205 
3206 void java_lang_StackTraceElement::set_fileName(oop element, oop value) {
3207   element->obj_field_put(fileName_offset, value);
3208 }
3209 
3210 void java_lang_StackTraceElement::set_declaringClass(oop element, oop value) {
3211   element->obj_field_put(declaringClass_offset, value);
3212 }
3213 
3214 void java_lang_StackTraceElement::set_methodName(oop element, oop value) {
3215   element->obj_field_put(methodName_offset, value);
3216 }
3217 
3218 void java_lang_StackTraceElement::set_lineNumber(oop element, int value) {
3219   element->int_field_put(lineNumber_offset, value);
3220 }


3318   java_lang_StackTraceElement::fileName_offset   = java_lang_StackTraceElement::hc_fileName_offset   * x + header;
3319   java_lang_StackTraceElement::lineNumber_offset = java_lang_StackTraceElement::hc_lineNumber_offset * x + header;
3320   java_lang_AssertionStatusDirectives::classes_offset = java_lang_AssertionStatusDirectives::hc_classes_offset * x + header;
3321   java_lang_AssertionStatusDirectives::classEnabled_offset = java_lang_AssertionStatusDirectives::hc_classEnabled_offset * x + header;
3322   java_lang_AssertionStatusDirectives::packages_offset = java_lang_AssertionStatusDirectives::hc_packages_offset * x + header;
3323   java_lang_AssertionStatusDirectives::packageEnabled_offset = java_lang_AssertionStatusDirectives::hc_packageEnabled_offset * x + header;
3324   java_lang_AssertionStatusDirectives::deflt_offset = java_lang_AssertionStatusDirectives::hc_deflt_offset * x + header;
3325 
3326 }
3327 
3328 
3329 // Compute non-hard-coded field offsets of all the classes in this file
3330 void JavaClasses::compute_offsets() {
3331   // java_lang_Class::compute_offsets was called earlier in bootstrap
3332   java_lang_ClassLoader::compute_offsets();
3333   java_lang_Thread::compute_offsets();
3334   java_lang_ThreadGroup::compute_offsets();
3335   java_lang_invoke_MethodHandle::compute_offsets();
3336   java_lang_invoke_DirectMethodHandle::compute_offsets();
3337   java_lang_invoke_MemberName::compute_offsets();

3338   java_lang_invoke_LambdaForm::compute_offsets();
3339   java_lang_invoke_MethodType::compute_offsets();
3340   java_lang_invoke_CallSite::compute_offsets();
3341   java_security_AccessControlContext::compute_offsets();
3342   // Initialize reflection classes. The layouts of these classes
3343   // changed with the new reflection implementation in JDK 1.4, and
3344   // since the Universe doesn't know what JDK version it is until this
3345   // point we defer computation of these offsets until now.
3346   java_lang_reflect_AccessibleObject::compute_offsets();
3347   java_lang_reflect_Method::compute_offsets();
3348   java_lang_reflect_Constructor::compute_offsets();
3349   java_lang_reflect_Field::compute_offsets();
3350   java_nio_Buffer::compute_offsets();
3351   sun_reflect_ConstantPool::compute_offsets();
3352   sun_reflect_UnsafeStaticFieldAccessorImpl::compute_offsets();
3353   java_lang_reflect_Parameter::compute_offsets();
3354 
3355   // generated interpreter code wants to know about the offsets we just computed:
3356   AbstractAssembler::update_delayed_values();
3357 }




  98 
  99 static bool find_field(InstanceKlass* ik,
 100                        Symbol* name_symbol, Symbol* signature_symbol,
 101                        fieldDescriptor* fd,
 102                        bool allow_super = false) {
 103   if (allow_super)
 104     return ik->find_field(name_symbol, signature_symbol, fd) != NULL;
 105   else
 106     return ik->find_local_field(name_symbol, signature_symbol, fd);
 107 }
 108 
 109 // Helpful routine for computing field offsets at run time rather than hardcoding them
 110 static void
 111 compute_offset(int &dest_offset,
 112                Klass* klass_oop, Symbol* name_symbol, Symbol* signature_symbol,
 113                bool allow_super = false) {
 114   fieldDescriptor fd;
 115   InstanceKlass* ik = InstanceKlass::cast(klass_oop);
 116   if (!find_field(ik, name_symbol, signature_symbol, &fd, allow_super)) {
 117     ResourceMark rm;
 118     tty->print_cr("Invalid layout of %s at %s sig %s", ik->external_name(), name_symbol->as_C_string(), signature_symbol->as_C_string());
 119 #ifndef PRODUCT
 120     klass_oop->print();
 121     tty->print_cr("all fields:");
 122     for (AllFieldStream fs(InstanceKlass::cast(klass_oop)); !fs.done(); fs.next()) {
 123       tty->print_cr("  name: %s, sig: %s, flags: %08x", fs.name()->as_C_string(), fs.signature()->as_C_string(), fs.access_flags().as_int());
 124     }
 125 #endif //PRODUCT
 126     fatal("Invalid layout of preloaded class");
 127   }
 128   dest_offset = fd.offset();
 129 }
 130 
 131 // Same as above but for "optional" offsets that might not be present in certain JDK versions
 132 static void
 133 compute_optional_offset(int& dest_offset,
 134                         Klass* klass_oop, Symbol* name_symbol, Symbol* signature_symbol,
 135                         bool allow_super = false) {
 136   fieldDescriptor fd;
 137   InstanceKlass* ik = InstanceKlass::cast(klass_oop);
 138   if (find_field(ik, name_symbol, signature_symbol, &fd, allow_super)) {


 857       (*reference_klass) = as_Klass(java_class);
 858     return T_OBJECT;
 859   }
 860 }
 861 
 862 
 863 oop java_lang_Class::primitive_mirror(BasicType t) {
 864   oop mirror = Universe::java_mirror(t);
 865   assert(mirror != NULL && mirror->is_a(SystemDictionary::Class_klass()), "must be a Class");
 866   assert(java_lang_Class::is_primitive(mirror), "must be primitive");
 867   return mirror;
 868 }
 869 
 870 bool java_lang_Class::offsets_computed = false;
 871 int  java_lang_Class::classRedefinedCount_offset = -1;
 872 
 873 void java_lang_Class::compute_offsets() {
 874   assert(!offsets_computed, "offsets should be initialized only once");
 875   offsets_computed = true;
 876 
 877   Thread* THREAD = Thread::current();
 878   Klass* k = SystemDictionary::Class_klass();
 879   compute_offset(_classData_offset, k, vmSymbols::classData_name(), vmSymbols::object_signature());
 880   // The classRedefinedCount field is only present starting in 1.5,
 881   // so don't go fatal.
 882   compute_optional_offset(classRedefinedCount_offset, k, vmSymbols::classRedefinedCount_name(), vmSymbols::int_signature());

 883 
 884   // Needs to be optional because the old build runs Queens during bootstrapping
 885   // and jdk8-9 doesn't have coordinated pushes yet.
 886   compute_optional_offset(_class_loader_offset,
 887                  k, vmSymbols::classLoader_name(),
 888                  vmSymbols::classloader_signature());
 889 
 890   compute_offset(_component_mirror_offset,
 891                  k, vmSymbols::componentType_name(),
 892                  vmSymbols::class_signature());
 893 
 894   // Init lock is a C union with component_mirror.  Only instanceKlass mirrors have
 895   // init_lock and only ArrayKlass mirrors have component_mirror.  Since both are oops
 896   // GC treats them the same.
 897   _init_lock_offset = _component_mirror_offset;
 898 
 899   CLASS_INJECTED_FIELDS(INJECTED_FIELD_COMPUTE_OFFSET);
 900 }
 901 
 902 oop java_lang_Class::classData(oop obj) {
 903   return obj->obj_field_volatile(_classData_offset);
 904 }
 905 
 906 int java_lang_Class::classRedefinedCount(oop the_class_mirror) {
 907   if (classRedefinedCount_offset == -1) {
 908     // If we don't have an offset for it then just return -1 as a marker.
 909     return -1;
 910   }
 911 
 912   return the_class_mirror->int_field(classRedefinedCount_offset);
 913 }
 914 
 915 void java_lang_Class::set_classRedefinedCount(oop the_class_mirror, int value) {
 916   if (classRedefinedCount_offset == -1) {
 917     // If we don't have an offset for it then nothing to set.
 918     return;
 919   }
 920 
 921   the_class_mirror->int_field_put(classRedefinedCount_offset, value);
 922 }
 923 
 924 int java_lang_invoke_MemberName_ClassData::_publishedToVM_offset;
 925 
 926 void java_lang_invoke_MemberName_ClassData::compute_offsets() {
 927   Thread* THREAD = Thread::current();
 928   Klass* k = SystemDictionary::MemberName_ClassData_klass();
 929   compute_offset(_publishedToVM_offset, k, vmSymbols::publishedToVM_name(), vmSymbols::java_lang_invoke_MemberName_signature());
 930 }
 931 
 932 bool java_lang_invoke_MemberName_ClassData::is_instance(oop obj) {
 933   return obj != NULL && obj->klass() == SystemDictionary::MemberName_ClassData_klass();
 934 }
 935 
 936 oop java_lang_invoke_MemberName_ClassData::publishedToVM(oop obj) {
 937   assert(is_instance(obj), err_msg("%s", obj == NULL ? "null" : obj->klass()->external_name()));
 938   return obj->obj_field(_publishedToVM_offset);
 939 }
 940 
 941 // Note: JDK1.1 and before had a privateInfo_offset field which was used for the
 942 //       platform thread structure, and a eetop offset which was used for thread
 943 //       local storage (and unused by the HotSpot VM). In JDK1.2 the two structures
 944 //       merged, so in the HotSpot VM we just use the eetop field for the thread
 945 //       instead of the privateInfo_offset.
 946 //
 947 // Note: The stackSize field is only present starting in 1.4.
 948 
 949 int java_lang_Thread::_name_offset = 0;
 950 int java_lang_Thread::_group_offset = 0;
 951 int java_lang_Thread::_contextClassLoader_offset = 0;
 952 int java_lang_Thread::_inheritedAccessControlContext_offset = 0;
 953 int java_lang_Thread::_priority_offset = 0;
 954 int java_lang_Thread::_eetop_offset = 0;
 955 int java_lang_Thread::_daemon_offset = 0;
 956 int java_lang_Thread::_stillborn_offset = 0;
 957 int java_lang_Thread::_stackSize_offset = 0;
 958 int java_lang_Thread::_tid_offset = 0;
 959 int java_lang_Thread::_thread_status_offset = 0;


2704   }
2705   return member_name;
2706 }
2707 
2708 void java_lang_invoke_DirectMethodHandle::compute_offsets() {
2709   Klass* klass_oop = SystemDictionary::DirectMethodHandle_klass();
2710   if (klass_oop != NULL) {
2711     compute_offset(_member_offset, klass_oop, vmSymbols::member_name(), vmSymbols::java_lang_invoke_MemberName_signature());
2712   }
2713 }
2714 
2715 // Support for java_lang_invoke_MethodHandle
2716 
2717 int java_lang_invoke_MethodHandle::_type_offset;
2718 int java_lang_invoke_MethodHandle::_form_offset;
2719 
2720 int java_lang_invoke_MemberName::_clazz_offset;
2721 int java_lang_invoke_MemberName::_name_offset;
2722 int java_lang_invoke_MemberName::_type_offset;
2723 int java_lang_invoke_MemberName::_flags_offset;
2724 int java_lang_invoke_MemberName::_next_offset;
2725 int java_lang_invoke_MemberName::_vmtarget_offset;
2726 int java_lang_invoke_MemberName::_vmloader_offset;
2727 int java_lang_invoke_MemberName::_vmindex_offset;
2728 
2729 int java_lang_invoke_LambdaForm::_vmentry_offset;
2730 
2731 void java_lang_invoke_MethodHandle::compute_offsets() {
2732   Klass* klass_oop = SystemDictionary::MethodHandle_klass();
2733   if (klass_oop != NULL) {
2734     compute_offset(_type_offset, klass_oop, vmSymbols::type_name(), vmSymbols::java_lang_invoke_MethodType_signature());
2735     compute_offset(_form_offset, klass_oop, vmSymbols::form_name(), vmSymbols::java_lang_invoke_LambdaForm_signature());
2736   }
2737 }
2738 
2739 void java_lang_invoke_MemberName::compute_offsets() {
2740   Klass* klass_oop = SystemDictionary::MemberName_klass();
2741   if (klass_oop != NULL) {
2742     compute_offset(_clazz_offset,     klass_oop, vmSymbols::clazz_name(),     vmSymbols::class_signature());
2743     compute_offset(_name_offset,      klass_oop, vmSymbols::name_name(),      vmSymbols::string_signature());
2744     compute_offset(_type_offset,      klass_oop, vmSymbols::type_name(),      vmSymbols::object_signature());
2745     compute_offset(_flags_offset,     klass_oop, vmSymbols::flags_name(),     vmSymbols::int_signature());
2746     compute_offset(_next_offset,      klass_oop, vmSymbols::next_name(),      vmSymbols::java_lang_invoke_MemberName_signature());
2747     MEMBERNAME_INJECTED_FIELDS(INJECTED_FIELD_COMPUTE_OFFSET);
2748   }
2749 }
2750 
2751 void java_lang_invoke_LambdaForm::compute_offsets() {
2752   Klass* klass_oop = SystemDictionary::LambdaForm_klass();
2753   if (klass_oop != NULL) {
2754     compute_offset(_vmentry_offset, klass_oop, vmSymbols::vmentry_name(), vmSymbols::java_lang_invoke_MemberName_signature());
2755   }
2756 }
2757 
2758 oop java_lang_invoke_MethodHandle::type(oop mh) {
2759   return mh->obj_field(_type_offset);
2760 }
2761 
2762 void java_lang_invoke_MethodHandle::set_type(oop mh, oop mtype) {
2763   mh->obj_field_put(_type_offset, mtype);
2764 }
2765 
2766 oop java_lang_invoke_MethodHandle::form(oop mh) {


2798 oop java_lang_invoke_MemberName::type(oop mname) {
2799   assert(is_instance(mname), "wrong type");
2800   return mname->obj_field(_type_offset);
2801 }
2802 
2803 void java_lang_invoke_MemberName::set_type(oop mname, oop type) {
2804   assert(is_instance(mname), "wrong type");
2805   mname->obj_field_put(_type_offset, type);
2806 }
2807 
2808 int java_lang_invoke_MemberName::flags(oop mname) {
2809   assert(is_instance(mname), "wrong type");
2810   return mname->int_field(_flags_offset);
2811 }
2812 
2813 void java_lang_invoke_MemberName::set_flags(oop mname, int flags) {
2814   assert(is_instance(mname), "wrong type");
2815   mname->int_field_put(_flags_offset, flags);
2816 }
2817 
2818 oop java_lang_invoke_MemberName::next(oop mname) {
2819   assert(is_instance(mname), "wrong type");
2820   return mname->obj_field(_next_offset);
2821 }
2822 
2823 Metadata* java_lang_invoke_MemberName::vmtarget(oop mname) {
2824   assert(is_instance(mname), "wrong type");
2825   return (Metadata*)mname->address_field(_vmtarget_offset);
2826 }
2827 
2828 #if INCLUDE_JVMTI
2829 // Can be executed on VM thread only
2830 void java_lang_invoke_MemberName::adjust_vmtarget(oop mname, Metadata* ref) {
2831   assert((is_instance(mname) && (flags(mname) & (MN_IS_METHOD | MN_IS_CONSTRUCTOR)) > 0), "wrong type");
2832   assert(Thread::current()->is_VM_thread(), "not VM thread");
2833   mname->address_field_put(_vmtarget_offset, (address)ref);
2834 }
2835 #endif // INCLUDE_JVMTI
2836 
2837 void java_lang_invoke_MemberName::set_vmtarget(oop mname, Metadata* ref) {
2838   assert(is_instance(mname), "wrong type");
2839   // check the type of the vmtarget
2840   oop dependency = NULL;
2841   if (ref != NULL) {
2842     switch (flags(mname) & (MN_IS_METHOD |


3141 
3142 bool java_lang_System::has_security_manager() {
3143   InstanceKlass* ik = InstanceKlass::cast(SystemDictionary::System_klass());
3144   address addr = ik->static_field_addr(static_security_offset);
3145   if (UseCompressedOops) {
3146     return oopDesc::load_decode_heap_oop((narrowOop *)addr) != NULL;
3147   } else {
3148     return oopDesc::load_decode_heap_oop((oop*)addr) != NULL;
3149   }
3150 }
3151 
3152 int java_lang_Class::_klass_offset;
3153 int java_lang_Class::_array_klass_offset;
3154 int java_lang_Class::_oop_size_offset;
3155 int java_lang_Class::_static_oop_field_count_offset;
3156 int java_lang_Class::_class_loader_offset;
3157 int java_lang_Class::_protection_domain_offset;
3158 int java_lang_Class::_component_mirror_offset;
3159 int java_lang_Class::_init_lock_offset;
3160 int java_lang_Class::_signers_offset;
3161 int java_lang_Class::_classData_offset;
3162 
3163 GrowableArray<Klass*>* java_lang_Class::_fixup_mirror_list = NULL;
3164 
3165 int java_lang_Throwable::backtrace_offset;
3166 int java_lang_Throwable::detailMessage_offset;
3167 int java_lang_Throwable::cause_offset;
3168 int java_lang_Throwable::stackTrace_offset;
3169 int java_lang_Throwable::static_unassigned_stacktrace_offset;
3170 
3171 int java_lang_reflect_AccessibleObject::override_offset;
3172 
3173 int java_lang_reflect_Method::clazz_offset;
3174 int java_lang_reflect_Method::name_offset;
3175 int java_lang_reflect_Method::returnType_offset;
3176 int java_lang_reflect_Method::parameterTypes_offset;
3177 int java_lang_reflect_Method::exceptionTypes_offset;
3178 int java_lang_reflect_Method::slot_offset;
3179 int java_lang_reflect_Method::modifiers_offset;
3180 int java_lang_reflect_Method::signature_offset;
3181 int java_lang_reflect_Method::annotations_offset;
3182 int java_lang_reflect_Method::parameter_annotations_offset;
3183 int java_lang_reflect_Method::annotation_default_offset;
3184 int java_lang_reflect_Method::type_annotations_offset;
3185 
3186 int java_lang_reflect_Constructor::clazz_offset;
3187 int java_lang_reflect_Constructor::parameterTypes_offset;
3188 int java_lang_reflect_Constructor::exceptionTypes_offset;
3189 int java_lang_reflect_Constructor::slot_offset;
3190 int java_lang_reflect_Constructor::modifiers_offset;
3191 int java_lang_reflect_Constructor::signature_offset;
3192 int java_lang_reflect_Constructor::annotations_offset;
3193 int java_lang_reflect_Constructor::parameter_annotations_offset;
3194 int java_lang_reflect_Constructor::type_annotations_offset;
3195 
3196 int java_lang_reflect_Field::clazz_offset;
3197 int java_lang_reflect_Field::name_offset;
3198 int java_lang_reflect_Field::type_offset;
3199 int java_lang_reflect_Field::slot_offset;
3200 int java_lang_reflect_Field::modifiers_offset;
3201 int java_lang_reflect_Field::signature_offset;
3202 int java_lang_reflect_Field::annotations_offset;
3203 int java_lang_reflect_Field::type_annotations_offset;
3204 
3205 int java_lang_reflect_Parameter::name_offset;
3206 int java_lang_reflect_Parameter::modifiers_offset;
3207 int java_lang_reflect_Parameter::index_offset;
3208 int java_lang_reflect_Parameter::executable_offset;
3209 
3210 int java_lang_boxing_object::value_offset;
3211 int java_lang_boxing_object::long_value_offset;
3212 
3213 int java_lang_ref_Reference::referent_offset;
3214 int java_lang_ref_Reference::queue_offset;
3215 int java_lang_ref_Reference::next_offset;
3216 int java_lang_ref_Reference::discovered_offset;
3217 int java_lang_ref_Reference::static_lock_offset;
3218 int java_lang_ref_Reference::static_pending_offset;
3219 int java_lang_ref_Reference::number_of_fake_oop_fields;
3220 
3221 int java_lang_ref_SoftReference::timestamp_offset;
3222 int java_lang_ref_SoftReference::static_clock_offset;
3223 
3224 int java_lang_ClassLoader::parent_offset;
3225 
3226 int java_lang_System::static_in_offset;
3227 int java_lang_System::static_out_offset;
3228 int java_lang_System::static_err_offset;
3229 int java_lang_System::static_security_offset;
3230 
3231 int java_lang_StackTraceElement::declaringClass_offset;
3232 int java_lang_StackTraceElement::methodName_offset;
3233 int java_lang_StackTraceElement::fileName_offset;
3234 int java_lang_StackTraceElement::lineNumber_offset;
3235 
3236 int java_lang_AssertionStatusDirectives::classes_offset;
3237 int java_lang_AssertionStatusDirectives::classEnabled_offset;
3238 int java_lang_AssertionStatusDirectives::packages_offset;
3239 int java_lang_AssertionStatusDirectives::packageEnabled_offset;
3240 int java_lang_AssertionStatusDirectives::deflt_offset;
3241 
3242 int java_nio_Buffer::_limit_offset;
3243 
3244 int java_util_concurrent_locks_AbstractOwnableSynchronizer::_owner_offset = 0;
3245 
3246 int sun_reflect_ConstantPool::_oop_offset;
3247 
3248 int sun_reflect_UnsafeStaticFieldAccessorImpl::_base_offset;
3249 
3250 
3251 // Support for java_lang_StackTraceElement
3252 
3253 void java_lang_StackTraceElement::set_fileName(oop element, oop value) {
3254   element->obj_field_put(fileName_offset, value);
3255 }
3256 
3257 void java_lang_StackTraceElement::set_declaringClass(oop element, oop value) {
3258   element->obj_field_put(declaringClass_offset, value);
3259 }
3260 
3261 void java_lang_StackTraceElement::set_methodName(oop element, oop value) {
3262   element->obj_field_put(methodName_offset, value);
3263 }
3264 
3265 void java_lang_StackTraceElement::set_lineNumber(oop element, int value) {
3266   element->int_field_put(lineNumber_offset, value);
3267 }


3365   java_lang_StackTraceElement::fileName_offset   = java_lang_StackTraceElement::hc_fileName_offset   * x + header;
3366   java_lang_StackTraceElement::lineNumber_offset = java_lang_StackTraceElement::hc_lineNumber_offset * x + header;
3367   java_lang_AssertionStatusDirectives::classes_offset = java_lang_AssertionStatusDirectives::hc_classes_offset * x + header;
3368   java_lang_AssertionStatusDirectives::classEnabled_offset = java_lang_AssertionStatusDirectives::hc_classEnabled_offset * x + header;
3369   java_lang_AssertionStatusDirectives::packages_offset = java_lang_AssertionStatusDirectives::hc_packages_offset * x + header;
3370   java_lang_AssertionStatusDirectives::packageEnabled_offset = java_lang_AssertionStatusDirectives::hc_packageEnabled_offset * x + header;
3371   java_lang_AssertionStatusDirectives::deflt_offset = java_lang_AssertionStatusDirectives::hc_deflt_offset * x + header;
3372 
3373 }
3374 
3375 
3376 // Compute non-hard-coded field offsets of all the classes in this file
3377 void JavaClasses::compute_offsets() {
3378   // java_lang_Class::compute_offsets was called earlier in bootstrap
3379   java_lang_ClassLoader::compute_offsets();
3380   java_lang_Thread::compute_offsets();
3381   java_lang_ThreadGroup::compute_offsets();
3382   java_lang_invoke_MethodHandle::compute_offsets();
3383   java_lang_invoke_DirectMethodHandle::compute_offsets();
3384   java_lang_invoke_MemberName::compute_offsets();
3385   java_lang_invoke_MemberName_ClassData::compute_offsets();
3386   java_lang_invoke_LambdaForm::compute_offsets();
3387   java_lang_invoke_MethodType::compute_offsets();
3388   java_lang_invoke_CallSite::compute_offsets();
3389   java_security_AccessControlContext::compute_offsets();
3390   // Initialize reflection classes. The layouts of these classes
3391   // changed with the new reflection implementation in JDK 1.4, and
3392   // since the Universe doesn't know what JDK version it is until this
3393   // point we defer computation of these offsets until now.
3394   java_lang_reflect_AccessibleObject::compute_offsets();
3395   java_lang_reflect_Method::compute_offsets();
3396   java_lang_reflect_Constructor::compute_offsets();
3397   java_lang_reflect_Field::compute_offsets();
3398   java_nio_Buffer::compute_offsets();
3399   sun_reflect_ConstantPool::compute_offsets();
3400   sun_reflect_UnsafeStaticFieldAccessorImpl::compute_offsets();
3401   java_lang_reflect_Parameter::compute_offsets();
3402 
3403   // generated interpreter code wants to know about the offsets we just computed:
3404   AbstractAssembler::update_delayed_values();
3405 }


< prev index next >