equal
deleted
inserted
replaced
565 } |
565 } |
566 } |
566 } |
567 } |
567 } |
568 } |
568 } |
569 create_mirror(k, Handle(NULL), Handle(NULL), CHECK); |
569 create_mirror(k, Handle(NULL), Handle(NULL), CHECK); |
570 |
|
571 if (UseSharedSpaces && k->oop_is_instance()) { |
|
572 // Create resolved_references array in the fresh mirror. |
|
573 instanceKlassHandle ik(k()); |
|
574 ik->constants()->restore_unshareable_info(CHECK); |
|
575 } |
|
576 } |
570 } |
577 |
571 |
578 void java_lang_Class::initialize_mirror_fields(KlassHandle k, |
572 void java_lang_Class::initialize_mirror_fields(KlassHandle k, |
579 Handle mirror, |
573 Handle mirror, |
580 Handle protection_domain, |
574 Handle protection_domain, |
928 } |
922 } |
929 |
923 |
930 the_class_mirror->int_field_put(classRedefinedCount_offset, value); |
924 the_class_mirror->int_field_put(classRedefinedCount_offset, value); |
931 } |
925 } |
932 |
926 |
933 objArrayOop java_lang_Class::resolved_references(oop java_class) { |
|
934 assert(java_lang_Class::is_instance(java_class), ""); |
|
935 assert(resolvedReferences_offset > 0, "must be set"); |
|
936 return objArrayOop(java_class->obj_field(resolvedReferences_offset)); |
|
937 } |
|
938 |
|
939 void java_lang_Class::set_resolved_references(oop java_class, objArrayOop a) { |
|
940 assert(java_lang_Class::is_instance(java_class), ""); |
|
941 assert(resolvedReferences_offset > 0, "must be set"); |
|
942 java_class->obj_field_put(resolvedReferences_offset, a); |
|
943 } |
|
944 |
927 |
945 // Note: JDK1.1 and before had a privateInfo_offset field which was used for the |
928 // Note: JDK1.1 and before had a privateInfo_offset field which was used for the |
946 // platform thread structure, and a eetop offset which was used for thread |
929 // platform thread structure, and a eetop offset which was used for thread |
947 // local storage (and unused by the HotSpot VM). In JDK1.2 the two structures |
930 // local storage (and unused by the HotSpot VM). In JDK1.2 the two structures |
948 // merged, so in the HotSpot VM we just use the eetop field for the thread |
931 // merged, so in the HotSpot VM we just use the eetop field for the thread |
3196 } else { |
3179 } else { |
3197 return oopDesc::load_decode_heap_oop((oop*)addr) != NULL; |
3180 return oopDesc::load_decode_heap_oop((oop*)addr) != NULL; |
3198 } |
3181 } |
3199 } |
3182 } |
3200 |
3183 |
3201 int java_lang_Class::resolvedReferences_offset; |
|
3202 int java_lang_Class::_klass_offset; |
3184 int java_lang_Class::_klass_offset; |
3203 int java_lang_Class::_array_klass_offset; |
3185 int java_lang_Class::_array_klass_offset; |
3204 int java_lang_Class::_oop_size_offset; |
3186 int java_lang_Class::_oop_size_offset; |
3205 int java_lang_Class::_static_oop_field_count_offset; |
3187 int java_lang_Class::_static_oop_field_count_offset; |
3206 int java_lang_Class::_class_loader_offset; |
3188 int java_lang_Class::_class_loader_offset; |
3352 // are not available to determine the offset_of_static_fields. |
3334 // are not available to determine the offset_of_static_fields. |
3353 void JavaClasses::compute_hard_coded_offsets() { |
3335 void JavaClasses::compute_hard_coded_offsets() { |
3354 const int x = heapOopSize; |
3336 const int x = heapOopSize; |
3355 const int header = instanceOopDesc::base_offset_in_bytes(); |
3337 const int header = instanceOopDesc::base_offset_in_bytes(); |
3356 |
3338 |
3357 // Class |
|
3358 java_lang_Class::resolvedReferences_offset = java_lang_Class::hc_resolvedReferences_offset * x + header; |
|
3359 |
|
3360 // Throwable Class |
3339 // Throwable Class |
3361 java_lang_Throwable::backtrace_offset = java_lang_Throwable::hc_backtrace_offset * x + header; |
3340 java_lang_Throwable::backtrace_offset = java_lang_Throwable::hc_backtrace_offset * x + header; |
3362 java_lang_Throwable::detailMessage_offset = java_lang_Throwable::hc_detailMessage_offset * x + header; |
3341 java_lang_Throwable::detailMessage_offset = java_lang_Throwable::hc_detailMessage_offset * x + header; |
3363 java_lang_Throwable::cause_offset = java_lang_Throwable::hc_cause_offset * x + header; |
3342 java_lang_Throwable::cause_offset = java_lang_Throwable::hc_cause_offset * x + header; |
3364 java_lang_Throwable::stackTrace_offset = java_lang_Throwable::hc_stackTrace_offset * x + header; |
3343 java_lang_Throwable::stackTrace_offset = java_lang_Throwable::hc_stackTrace_offset * x + header; |
3553 CHECK_OFFSET("java/lang/String", java_lang_String, hash, "I"); |
3532 CHECK_OFFSET("java/lang/String", java_lang_String, hash, "I"); |
3554 } |
3533 } |
3555 |
3534 |
3556 // java.lang.Class |
3535 // java.lang.Class |
3557 |
3536 |
3558 CHECK_OFFSET("java/lang/Class", java_lang_Class, resolvedReferences, "[Ljava/lang/Object;"); |
3537 // Fake fields |
|
3538 // CHECK_OFFSET("java/lang/Class", java_lang_Class, klass); // %%% this needs to be checked |
|
3539 // CHECK_OFFSET("java/lang/Class", java_lang_Class, array_klass); // %%% this needs to be checked |
3559 |
3540 |
3560 // java.lang.Throwable |
3541 // java.lang.Throwable |
3561 |
3542 |
3562 CHECK_OFFSET("java/lang/Throwable", java_lang_Throwable, backtrace, "Ljava/lang/Object;"); |
3543 CHECK_OFFSET("java/lang/Throwable", java_lang_Throwable, backtrace, "Ljava/lang/Object;"); |
3563 CHECK_OFFSET("java/lang/Throwable", java_lang_Throwable, detailMessage, "Ljava/lang/String;"); |
3544 CHECK_OFFSET("java/lang/Throwable", java_lang_Throwable, detailMessage, "Ljava/lang/String;"); |