Mercurial > hg > truffle
diff 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 |
line wrap: on
line diff
--- a/src/share/vm/classfile/javaClasses.cpp Mon Oct 17 11:00:41 2011 -0700 +++ b/src/share/vm/classfile/javaClasses.cpp Mon Oct 17 21:38:29 2011 -0700 @@ -503,12 +503,8 @@ if (SystemDictionary::Class_klass_loaded() && (k->oop_is_instance() || k->oop_is_javaArray())) { // Allocate mirror (java.lang.Class instance) Handle mirror = instanceMirrorKlass::cast(SystemDictionary::Class_klass())->allocate_instance(k, CHECK_0); - // Setup indirections - mirror->obj_field_put(_klass_offset, k()); - k->set_java_mirror(mirror()); instanceMirrorKlass* mk = instanceMirrorKlass::cast(mirror->klass()); - java_lang_Class::set_oop_size(mirror(), mk->instance_size(k)); java_lang_Class::set_static_oop_field_count(mirror(), mk->compute_static_oop_field_count(mirror())); // It might also have a component mirror. This mirror must already exist. @@ -571,9 +567,10 @@ assert(aklass != NULL, "correct bootstrap"); set_array_klass(java_class, aklass); } +#ifdef ASSERT instanceMirrorKlass* mk = instanceMirrorKlass::cast(SystemDictionary::Class_klass()); - java_lang_Class::set_oop_size(java_class, mk->instance_size(oop(NULL))); - java_lang_Class::set_static_oop_field_count(java_class, 0); + assert(java_lang_Class::static_oop_field_count(java_class) == 0, "should have been zeroed by allocation"); +#endif return java_class; } @@ -587,6 +584,12 @@ } +void java_lang_Class::set_klass(oop java_class, klassOop klass) { + assert(java_lang_Class::is_instance(java_class), "must be a Class object"); + java_class->obj_field_put(_klass_offset, klass); +} + + void java_lang_Class::print_signature(oop java_class, outputStream* st) { assert(java_lang_Class::is_instance(java_class), "must be a Class object"); Symbol* name = NULL;