Mercurial > hg > truffle
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"); |