1.1 --- a/src/share/vm/oops/constantPoolKlass.cpp Sat Oct 30 12:19:07 2010 -0700 1.2 +++ b/src/share/vm/oops/constantPoolKlass.cpp Sat Oct 30 13:08:23 2010 -0700 1.3 @@ -1,5 +1,5 @@ 1.4 /* 1.5 - * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved. 1.6 + * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. 1.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 1.8 * 1.9 * This code is free software; you can redistribute it and/or modify it 1.10 @@ -34,6 +34,7 @@ 1.11 c->set_length(length); 1.12 c->set_tags(NULL); 1.13 c->set_cache(NULL); 1.14 + c->set_operands(NULL); 1.15 c->set_pool_holder(NULL); 1.16 c->set_flags(0); 1.17 // only set to non-zero if constant pool is merged by RedefineClasses 1.18 @@ -92,6 +93,7 @@ 1.19 // gc of constant pool instance variables 1.20 MarkSweep::mark_and_push(cp->tags_addr()); 1.21 MarkSweep::mark_and_push(cp->cache_addr()); 1.22 + MarkSweep::mark_and_push(cp->operands_addr()); 1.23 MarkSweep::mark_and_push(cp->pool_holder_addr()); 1.24 } 1.25 } 1.26 @@ -118,6 +120,7 @@ 1.27 // gc of constant pool instance variables 1.28 PSParallelCompact::mark_and_push(cm, cp->tags_addr()); 1.29 PSParallelCompact::mark_and_push(cm, cp->cache_addr()); 1.30 + PSParallelCompact::mark_and_push(cm, cp->operands_addr()); 1.31 PSParallelCompact::mark_and_push(cm, cp->pool_holder_addr()); 1.32 } 1.33 } 1.34 @@ -146,6 +149,7 @@ 1.35 } 1.36 MarkSweep::adjust_pointer(cp->tags_addr()); 1.37 MarkSweep::adjust_pointer(cp->cache_addr()); 1.38 + MarkSweep::adjust_pointer(cp->operands_addr()); 1.39 MarkSweep::adjust_pointer(cp->pool_holder_addr()); 1.40 return size; 1.41 } 1.42 @@ -173,6 +177,7 @@ 1.43 } 1.44 blk->do_oop(cp->tags_addr()); 1.45 blk->do_oop(cp->cache_addr()); 1.46 + blk->do_oop(cp->operands_addr()); 1.47 blk->do_oop(cp->pool_holder_addr()); 1.48 return size; 1.49 } 1.50 @@ -205,6 +210,8 @@ 1.51 blk->do_oop(addr); 1.52 addr = cp->cache_addr(); 1.53 blk->do_oop(addr); 1.54 + addr = cp->operands_addr(); 1.55 + blk->do_oop(addr); 1.56 addr = cp->pool_holder_addr(); 1.57 blk->do_oop(addr); 1.58 return size; 1.59 @@ -232,6 +239,7 @@ 1.60 } 1.61 PSParallelCompact::adjust_pointer(cp->tags_addr()); 1.62 PSParallelCompact::adjust_pointer(cp->cache_addr()); 1.63 + PSParallelCompact::adjust_pointer(cp->operands_addr()); 1.64 PSParallelCompact::adjust_pointer(cp->pool_holder_addr()); 1.65 return cp->object_size(); 1.66 } 1.67 @@ -262,6 +270,8 @@ 1.68 PSParallelCompact::adjust_pointer(p, beg_addr, end_addr); 1.69 p = cp->cache_addr(); 1.70 PSParallelCompact::adjust_pointer(p, beg_addr, end_addr); 1.71 + p = cp->operands_addr(); 1.72 + PSParallelCompact::adjust_pointer(p, beg_addr, end_addr); 1.73 p = cp->pool_holder_addr(); 1.74 PSParallelCompact::adjust_pointer(p, beg_addr, end_addr); 1.75 1.76 @@ -363,8 +373,18 @@ 1.77 st->print("signature_index=%d", cp->method_type_index_at(index)); 1.78 break; 1.79 case JVM_CONSTANT_InvokeDynamic : 1.80 - st->print("bootstrap_method_index=%d", cp->invoke_dynamic_bootstrap_method_ref_index_at(index)); 1.81 - st->print(" name_and_type_index=%d", cp->invoke_dynamic_name_and_type_ref_index_at(index)); 1.82 + { 1.83 + st->print("bootstrap_method_index=%d", cp->invoke_dynamic_bootstrap_method_ref_index_at(index)); 1.84 + st->print(" name_and_type_index=%d", cp->invoke_dynamic_name_and_type_ref_index_at(index)); 1.85 + int argc = cp->invoke_dynamic_argument_count_at(index); 1.86 + if (argc > 0) { 1.87 + for (int arg_i = 0; arg_i < argc; arg_i++) { 1.88 + int arg = cp->invoke_dynamic_argument_index_at(index, arg_i); 1.89 + st->print((arg_i == 0 ? " arguments={%d" : ", %d"), arg); 1.90 + } 1.91 + st->print("}"); 1.92 + } 1.93 + } 1.94 break; 1.95 default: 1.96 ShouldNotReachHere(); 1.97 @@ -381,6 +401,7 @@ 1.98 st->print("constant pool [%d]", cp->length()); 1.99 if (cp->has_pseudo_string()) st->print("/pseudo_string"); 1.100 if (cp->has_invokedynamic()) st->print("/invokedynamic"); 1.101 + if (cp->operands() != NULL) st->print("/operands[%d]", cp->operands()->length()); 1.102 cp->print_address_on(st); 1.103 st->print(" for "); 1.104 cp->pool_holder()->print_value_on(st); 1.105 @@ -440,6 +461,10 @@ 1.106 guarantee(cp->cache()->is_perm(), "should be in permspace"); 1.107 guarantee(cp->cache()->is_constantPoolCache(), "should be constant pool cache"); 1.108 } 1.109 + if (cp->operands() != NULL) { 1.110 + guarantee(cp->operands()->is_perm(), "should be in permspace"); 1.111 + guarantee(cp->operands()->is_typeArray(), "should be type array"); 1.112 + } 1.113 if (cp->pool_holder() != NULL) { 1.114 // Note: pool_holder() can be NULL in temporary constant pools 1.115 // used during constant pool merging