comparison src/share/vm/classfile/javaClasses.cpp @ 4009:e5928e7dab26

7098528: crash with java -XX:+ExtendedDTraceProbes Reviewed-by: kvn
author never
date Mon, 17 Oct 2011 21:38:29 -0700
parents f08d439fab8c
children a81f60ddab06
comparison
equal deleted inserted replaced
4008:8187c94a9a87 4009:e5928e7dab26
501 int computed_modifiers = k->compute_modifier_flags(CHECK_0); 501 int computed_modifiers = k->compute_modifier_flags(CHECK_0);
502 k->set_modifier_flags(computed_modifiers); 502 k->set_modifier_flags(computed_modifiers);
503 if (SystemDictionary::Class_klass_loaded() && (k->oop_is_instance() || k->oop_is_javaArray())) { 503 if (SystemDictionary::Class_klass_loaded() && (k->oop_is_instance() || k->oop_is_javaArray())) {
504 // Allocate mirror (java.lang.Class instance) 504 // Allocate mirror (java.lang.Class instance)
505 Handle mirror = instanceMirrorKlass::cast(SystemDictionary::Class_klass())->allocate_instance(k, CHECK_0); 505 Handle mirror = instanceMirrorKlass::cast(SystemDictionary::Class_klass())->allocate_instance(k, CHECK_0);
506 // Setup indirections
507 mirror->obj_field_put(_klass_offset, k());
508 k->set_java_mirror(mirror());
509 506
510 instanceMirrorKlass* mk = instanceMirrorKlass::cast(mirror->klass()); 507 instanceMirrorKlass* mk = instanceMirrorKlass::cast(mirror->klass());
511 java_lang_Class::set_oop_size(mirror(), mk->instance_size(k));
512 java_lang_Class::set_static_oop_field_count(mirror(), mk->compute_static_oop_field_count(mirror())); 508 java_lang_Class::set_static_oop_field_count(mirror(), mk->compute_static_oop_field_count(mirror()));
513 509
514 // It might also have a component mirror. This mirror must already exist. 510 // It might also have a component mirror. This mirror must already exist.
515 if (k->oop_is_javaArray()) { 511 if (k->oop_is_javaArray()) {
516 Handle comp_mirror; 512 Handle comp_mirror;
569 if (type != T_VOID) { 565 if (type != T_VOID) {
570 klassOop aklass = Universe::typeArrayKlassObj(type); 566 klassOop aklass = Universe::typeArrayKlassObj(type);
571 assert(aklass != NULL, "correct bootstrap"); 567 assert(aklass != NULL, "correct bootstrap");
572 set_array_klass(java_class, aklass); 568 set_array_klass(java_class, aklass);
573 } 569 }
570 #ifdef ASSERT
574 instanceMirrorKlass* mk = instanceMirrorKlass::cast(SystemDictionary::Class_klass()); 571 instanceMirrorKlass* mk = instanceMirrorKlass::cast(SystemDictionary::Class_klass());
575 java_lang_Class::set_oop_size(java_class, mk->instance_size(oop(NULL))); 572 assert(java_lang_Class::static_oop_field_count(java_class) == 0, "should have been zeroed by allocation");
576 java_lang_Class::set_static_oop_field_count(java_class, 0); 573 #endif
577 return java_class; 574 return java_class;
578 } 575 }
579 576
580 577
581 klassOop java_lang_Class::as_klassOop(oop java_class) { 578 klassOop java_lang_Class::as_klassOop(oop java_class) {
582 //%note memory_2 579 //%note memory_2
583 assert(java_lang_Class::is_instance(java_class), "must be a Class object"); 580 assert(java_lang_Class::is_instance(java_class), "must be a Class object");
584 klassOop k = klassOop(java_class->obj_field(_klass_offset)); 581 klassOop k = klassOop(java_class->obj_field(_klass_offset));
585 assert(k == NULL || k->is_klass(), "type check"); 582 assert(k == NULL || k->is_klass(), "type check");
586 return k; 583 return k;
584 }
585
586
587 void java_lang_Class::set_klass(oop java_class, klassOop klass) {
588 assert(java_lang_Class::is_instance(java_class), "must be a Class object");
589 java_class->obj_field_put(_klass_offset, klass);
587 } 590 }
588 591
589 592
590 void java_lang_Class::print_signature(oop java_class, outputStream* st) { 593 void java_lang_Class::print_signature(oop java_class, outputStream* st) {
591 assert(java_lang_Class::is_instance(java_class), "must be a Class object"); 594 assert(java_lang_Class::is_instance(java_class), "must be a Class object");