comparison src/share/vm/oops/constantPoolOop.cpp @ 1910:d1896d1dda3e

6981788: GC map generator sometimes picks up the wrong kind of instruction operand Summary: Distinguish pool indexes from cache indexes in recently changed code. Reviewed-by: never
author jrose
date Sat, 30 Oct 2010 11:45:35 -0700
parents d257356e35f0
children 3b2dea75431e
comparison
equal deleted inserted replaced
1909:d2e35ffae982 1910:d1896d1dda3e
263 263
264 int constantPoolOopDesc::impl_name_and_type_ref_index_at(int which, bool uncached) { 264 int constantPoolOopDesc::impl_name_and_type_ref_index_at(int which, bool uncached) {
265 int i = which; 265 int i = which;
266 if (!uncached && cache() != NULL) { 266 if (!uncached && cache() != NULL) {
267 if (constantPoolCacheOopDesc::is_secondary_index(which)) { 267 if (constantPoolCacheOopDesc::is_secondary_index(which)) {
268 // Invokedynamic indexes are always processed in native order 268 // Invokedynamic index.
269 // so there is no question of reading a native u2 in Java order here.
270 int pool_index = cache()->main_entry_at(which)->constant_pool_index(); 269 int pool_index = cache()->main_entry_at(which)->constant_pool_index();
271 if (tag_at(pool_index).is_invoke_dynamic()) 270 if (tag_at(pool_index).is_invoke_dynamic())
272 pool_index = invoke_dynamic_name_and_type_ref_index_at(pool_index); 271 pool_index = invoke_dynamic_name_and_type_ref_index_at(pool_index);
273 assert(tag_at(pool_index).is_name_and_type(), ""); 272 assert(tag_at(pool_index).is_name_and_type(), "");
274 return pool_index; 273 return pool_index;