comparison src/share/vm/prims/jvmtiTagMap.cpp @ 1142:4ce7240d622c

6914300: ciEnv should export all well known classes Reviewed-by: kvn, twisti
author never
date Wed, 06 Jan 2010 14:22:39 -0800
parents 148e5441d916
children c18cbe5936b8
comparison
equal deleted inserted replaced
1140:1f6d42899c3a 1142:4ce7240d622c
577 } 577 }
578 578
579 // If the object is a java.lang.Class then return the klassOop, 579 // If the object is a java.lang.Class then return the klassOop,
580 // otherwise return the original object 580 // otherwise return the original object
581 static inline oop klassOop_if_java_lang_Class(oop o) { 581 static inline oop klassOop_if_java_lang_Class(oop o) {
582 if (o->klass() == SystemDictionary::class_klass()) { 582 if (o->klass() == SystemDictionary::Class_klass()) {
583 if (!java_lang_Class::is_primitive(o)) { 583 if (!java_lang_Class::is_primitive(o)) {
584 o = (oop)java_lang_Class::as_klassOop(o); 584 o = (oop)java_lang_Class::as_klassOop(o);
585 assert(o != NULL, "class for non-primitive mirror must exist"); 585 assert(o != NULL, "class for non-primitive mirror must exist");
586 } 586 }
587 } 587 }
642 if (_o == o) { 642 if (_o == o) {
643 _klass = _o->klass(); 643 _klass = _o->klass();
644 } else { 644 } else {
645 // if the object represents a runtime class then use the 645 // if the object represents a runtime class then use the
646 // tag for java.lang.Class 646 // tag for java.lang.Class
647 _klass = SystemDictionary::class_klass(); 647 _klass = SystemDictionary::Class_klass();
648 } 648 }
649 _klass_tag = tag_for(tag_map, _klass); 649 _klass_tag = tag_for(tag_map, _klass);
650 } 650 }
651 651
652 ~CallbackWrapper() { 652 ~CallbackWrapper() {
745 _referrer_tag_p = &_referrer_obj_tag; 745 _referrer_tag_p = &_referrer_obj_tag;
746 746
747 // get referrer class tag. 747 // get referrer class tag.
748 klassOop k = (_referrer == referrer) ? // Check if referrer is a class... 748 klassOop k = (_referrer == referrer) ? // Check if referrer is a class...
749 _referrer->klass() // No, just get its class 749 _referrer->klass() // No, just get its class
750 : SystemDictionary::class_klass(); // Yes, its class is Class 750 : SystemDictionary::Class_klass(); // Yes, its class is Class
751 _referrer_klass_tag = tag_for(tag_map, k); 751 _referrer_klass_tag = tag_for(tag_map, k);
752 } 752 }
753 } 753 }
754 754
755 ~TwoOopCallbackWrapper() { 755 ~TwoOopCallbackWrapper() {
1124 static jint invoke_string_value_callback(jvmtiStringPrimitiveValueCallback cb, 1124 static jint invoke_string_value_callback(jvmtiStringPrimitiveValueCallback cb,
1125 CallbackWrapper* wrapper, 1125 CallbackWrapper* wrapper,
1126 oop str, 1126 oop str,
1127 void* user_data) 1127 void* user_data)
1128 { 1128 {
1129 assert(str->klass() == SystemDictionary::string_klass(), "not a string"); 1129 assert(str->klass() == SystemDictionary::String_klass(), "not a string");
1130 1130
1131 // get the string value and length 1131 // get the string value and length
1132 // (string value may be offset from the base) 1132 // (string value may be offset from the base)
1133 int s_len = java_lang_String::length(str); 1133 int s_len = java_lang_String::length(str);
1134 typeArrayOop s_value = java_lang_String::value(str); 1134 typeArrayOop s_value = java_lang_String::value(str);
1184 void* user_data) 1184 void* user_data)
1185 { 1185 {
1186 // for static fields only the index will be set 1186 // for static fields only the index will be set
1187 static jvmtiHeapReferenceInfo reference_info = { 0 }; 1187 static jvmtiHeapReferenceInfo reference_info = { 0 };
1188 1188
1189 assert(obj->klass() == SystemDictionary::class_klass(), "not a class"); 1189 assert(obj->klass() == SystemDictionary::Class_klass(), "not a class");
1190 if (java_lang_Class::is_primitive(obj)) { 1190 if (java_lang_Class::is_primitive(obj)) {
1191 return 0; 1191 return 0;
1192 } 1192 }
1193 klassOop k = java_lang_Class::as_klassOop(obj); 1193 klassOop k = java_lang_Class::as_klassOop(obj);
1194 Klass* klass = k->klass_part(); 1194 Klass* klass = k->klass_part();
1496 1496
1497 // for objects and classes we report primitive fields if callback provided 1497 // for objects and classes we report primitive fields if callback provided
1498 if (callbacks()->primitive_field_callback != NULL && obj->is_instance()) { 1498 if (callbacks()->primitive_field_callback != NULL && obj->is_instance()) {
1499 jint res; 1499 jint res;
1500 jvmtiPrimitiveFieldCallback cb = callbacks()->primitive_field_callback; 1500 jvmtiPrimitiveFieldCallback cb = callbacks()->primitive_field_callback;
1501 if (obj->klass() == SystemDictionary::class_klass()) { 1501 if (obj->klass() == SystemDictionary::Class_klass()) {
1502 res = invoke_primitive_field_callback_for_static_fields(&wrapper, 1502 res = invoke_primitive_field_callback_for_static_fields(&wrapper,
1503 obj, 1503 obj,
1504 cb, 1504 cb,
1505 (void*)user_data()); 1505 (void*)user_data());
1506 } else { 1506 } else {
1513 } 1513 }
1514 1514
1515 // string callback 1515 // string callback
1516 if (!is_array && 1516 if (!is_array &&
1517 callbacks()->string_primitive_value_callback != NULL && 1517 callbacks()->string_primitive_value_callback != NULL &&
1518 obj->klass() == SystemDictionary::string_klass()) { 1518 obj->klass() == SystemDictionary::String_klass()) {
1519 jint res = invoke_string_value_callback( 1519 jint res = invoke_string_value_callback(
1520 callbacks()->string_primitive_value_callback, 1520 callbacks()->string_primitive_value_callback,
1521 &wrapper, 1521 &wrapper,
1522 obj, 1522 obj,
1523 (void*)user_data() ); 1523 (void*)user_data() );
2379 return (!(res & JVMTI_VISIT_ABORT)); 2379 return (!(res & JVMTI_VISIT_ABORT));
2380 } 2380 }
2381 2381
2382 // invoke the string value callback 2382 // invoke the string value callback
2383 inline bool CallbackInvoker::report_string_value(oop str) { 2383 inline bool CallbackInvoker::report_string_value(oop str) {
2384 assert(str->klass() == SystemDictionary::string_klass(), "not a string"); 2384 assert(str->klass() == SystemDictionary::String_klass(), "not a string");
2385 2385
2386 AdvancedHeapWalkContext* context = advanced_context(); 2386 AdvancedHeapWalkContext* context = advanced_context();
2387 assert(context->string_primitive_value_callback() != NULL, "no callback"); 2387 assert(context->string_primitive_value_callback() != NULL, "no callback");
2388 2388
2389 // apply class filter 2389 // apply class filter
2926 // get the java mirror 2926 // get the java mirror
2927 oop mirror = klass->java_mirror(); 2927 oop mirror = klass->java_mirror();
2928 2928
2929 // super (only if something more interesting than java.lang.Object) 2929 // super (only if something more interesting than java.lang.Object)
2930 klassOop java_super = ik->java_super(); 2930 klassOop java_super = ik->java_super();
2931 if (java_super != NULL && java_super != SystemDictionary::object_klass()) { 2931 if (java_super != NULL && java_super != SystemDictionary::Object_klass()) {
2932 oop super = Klass::cast(java_super)->java_mirror(); 2932 oop super = Klass::cast(java_super)->java_mirror();
2933 if (!CallbackInvoker::report_superclass_reference(mirror, super)) { 2933 if (!CallbackInvoker::report_superclass_reference(mirror, super)) {
2934 return false; 2934 return false;
2935 } 2935 }
2936 } 2936 }
3068 } 3068 }
3069 } 3069 }
3070 3070
3071 // if the object is a java.lang.String 3071 // if the object is a java.lang.String
3072 if (is_reporting_string_values() && 3072 if (is_reporting_string_values() &&
3073 o->klass() == SystemDictionary::string_klass()) { 3073 o->klass() == SystemDictionary::String_klass()) {
3074 if (!CallbackInvoker::report_string_value(o)) { 3074 if (!CallbackInvoker::report_string_value(o)) {
3075 return false; 3075 return false;
3076 } 3076 }
3077 } 3077 }
3078 return true; 3078 return true;
3253 assert(!ObjectMarker::visited(o), "can't visit same object more than once"); 3253 assert(!ObjectMarker::visited(o), "can't visit same object more than once");
3254 ObjectMarker::mark(o); 3254 ObjectMarker::mark(o);
3255 3255
3256 // instance 3256 // instance
3257 if (o->is_instance()) { 3257 if (o->is_instance()) {
3258 if (o->klass() == SystemDictionary::class_klass()) { 3258 if (o->klass() == SystemDictionary::Class_klass()) {
3259 o = klassOop_if_java_lang_Class(o); 3259 o = klassOop_if_java_lang_Class(o);
3260 if (o->is_klass()) { 3260 if (o->is_klass()) {
3261 // a java.lang.Class 3261 // a java.lang.Class
3262 return iterate_over_class(klassOop(o)); 3262 return iterate_over_class(klassOop(o));
3263 } 3263 }