src/share/vm/oops/constantPoolKlass.cpp

changeset 2268
3b2dea75431e
parent 2068
7fcd5f39bd7a
child 2314
f95d63e2154a
     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

mercurial