# HG changeset patch # User jrose # Date 1275089031 25200 # Node ID beb77f0d41b306d791d475939ddb6589cd60c369 # Parent 87fc6aca31abdfd9a025e95e5653f3b34013fec0 6957004: MethodComparator uses the wrong CP index accessor Summary: Change two uses of get_index_u2 to get_index_u2_cpcache; also tweak some debugging print functions Reviewed-by: kvn diff -r 87fc6aca31ab -r beb77f0d41b3 src/share/vm/oops/constantPoolKlass.cpp --- a/src/share/vm/oops/constantPoolKlass.cpp Thu May 27 22:01:55 2010 -0700 +++ b/src/share/vm/oops/constantPoolKlass.cpp Fri May 28 16:23:51 2010 -0700 @@ -310,15 +310,12 @@ Klass::oop_print_on(obj, st); constantPoolOop cp = constantPoolOop(obj); if (cp->flags() != 0) { - st->print(" - flags : 0x%x", cp->flags()); + st->print(" - flags: 0x%x", cp->flags()); if (cp->has_pseudo_string()) st->print(" has_pseudo_string"); if (cp->has_invokedynamic()) st->print(" has_invokedynamic"); st->cr(); } - - // Temp. remove cache so we can do lookups with original indicies. - constantPoolCacheHandle cache (THREAD, cp->cache()); - cp->set_cache(NULL); + st->print_cr(" - cache: " INTPTR_FORMAT, cp->cache()); for (int index = 1; index < cp->length(); index++) { // Index 0 is unused st->print(" - %3d : ", index); @@ -334,8 +331,8 @@ case JVM_CONSTANT_Fieldref : case JVM_CONSTANT_Methodref : case JVM_CONSTANT_InterfaceMethodref : - st->print("klass_index=%d", cp->klass_ref_index_at(index)); - st->print(" name_and_type_index=%d", cp->name_and_type_ref_index_at(index)); + st->print("klass_index=%d", cp->uncached_klass_ref_index_at(index)); + st->print(" name_and_type_index=%d", cp->uncached_name_and_type_ref_index_at(index)); break; case JVM_CONSTANT_UnresolvedString : case JVM_CONSTANT_String : @@ -382,9 +379,6 @@ st->cr(); } st->cr(); - - // Restore cache - cp->set_cache(cache()); } #endif @@ -398,6 +392,9 @@ cp->print_address_on(st); st->print(" for "); cp->pool_holder()->print_value_on(st); + if (cp->cache() != NULL) { + st->print(" cache=" PTR_FORMAT, cp->cache()); + } } const char* constantPoolKlass::internal_name() const { diff -r 87fc6aca31ab -r beb77f0d41b3 src/share/vm/oops/methodKlass.cpp --- a/src/share/vm/oops/methodKlass.cpp Thu May 27 22:01:55 2010 -0700 +++ b/src/share/vm/oops/methodKlass.cpp Fri May 28 16:23:51 2010 -0700 @@ -237,7 +237,7 @@ Klass::oop_print_on(obj, st); methodOop m = methodOop(obj); // get the effect of PrintOopAddress, always, for methods: - st->print (" - this oop: "INTPTR_FORMAT, (intptr_t)m); + st->print_cr(" - this oop: "INTPTR_FORMAT, (intptr_t)m); st->print (" - method holder: "); m->method_holder()->print_value_on(st); st->cr(); st->print (" - constants: "INTPTR_FORMAT" ", (address)m->constants()); m->constants()->print_value_on(st); st->cr(); diff -r 87fc6aca31ab -r beb77f0d41b3 src/share/vm/prims/methodComparator.cpp --- a/src/share/vm/prims/methodComparator.cpp Thu May 27 22:01:55 2010 -0700 +++ b/src/share/vm/prims/methodComparator.cpp Fri May 28 16:23:51 2010 -0700 @@ -149,8 +149,8 @@ case Bytecodes::_invokestatic : // fall through case Bytecodes::_invokedynamic : // fall through case Bytecodes::_invokeinterface : { - u2 cpci_old = _s_old->has_index_u4() ? _s_old->get_index_u4() : _s_old->get_index_u2(); - u2 cpci_new = _s_new->has_index_u4() ? _s_new->get_index_u4() : _s_new->get_index_u2(); + int cpci_old = _s_old->has_index_u4() ? _s_old->get_index_u4() : _s_old->get_index_u2_cpcache(); + int cpci_new = _s_new->has_index_u4() ? _s_new->get_index_u4() : _s_new->get_index_u2_cpcache(); // Check if the names of classes, field/method names and signatures at these indexes // are the same. Indices which are really into constantpool cache (rather than constant // pool itself) are accepted by the constantpool query routines below.