Mercurial > hg > graal-jvmci-8
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 } |