constantPool.hpp 39.1 KB
Newer Older
D
duke 已提交
1
/*
2
 * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
D
duke 已提交
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
19 20 21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
D
duke 已提交
22 23 24
 *
 */

25 26 27 28
#ifndef SHARE_VM_OOPS_CONSTANTPOOLOOP_HPP
#define SHARE_VM_OOPS_CONSTANTPOOLOOP_HPP

#include "oops/arrayOop.hpp"
29 30
#include "oops/cpCache.hpp"
#include "oops/objArrayOop.hpp"
31
#include "oops/symbol.hpp"
32
#include "oops/typeArrayOop.hpp"
33
#include "runtime/handles.hpp"
34 35 36 37 38 39 40 41 42 43
#include "utilities/constantTag.hpp"
#ifdef TARGET_ARCH_x86
# include "bytes_x86.hpp"
#endif
#ifdef TARGET_ARCH_sparc
# include "bytes_sparc.hpp"
#endif
#ifdef TARGET_ARCH_zero
# include "bytes_zero.hpp"
#endif
44 45 46 47 48 49
#ifdef TARGET_ARCH_arm
# include "bytes_arm.hpp"
#endif
#ifdef TARGET_ARCH_ppc
# include "bytes_ppc.hpp"
#endif
50

D
duke 已提交
51 52 53 54
// A constantPool is an array containing class constants as described in the
// class file.
//
// Most of the constant pool entries are written during class parsing, which
55 56
// is safe.  For klass types, the constant pool entry is
// modified when the entry is resolved.  If a klass constant pool
D
duke 已提交
57
// entry is read without a lock, only the resolved state guarantees that
58
// the entry in the constant pool is a klass object and not a Symbol*.
D
duke 已提交
59 60 61

class SymbolHashMap;

62 63 64 65
class CPSlot VALUE_OBJ_CLASS_SPEC {
  intptr_t _ptr;
 public:
  CPSlot(intptr_t ptr): _ptr(ptr) {}
66
  CPSlot(Klass* ptr): _ptr((intptr_t)ptr) {}
67 68 69
  CPSlot(Symbol* ptr): _ptr((intptr_t)ptr | 1) {}

  intptr_t value()   { return _ptr; }
70 71
  bool is_resolved()   { return (_ptr & 1) == 0; }
  bool is_unresolved() { return (_ptr & 1) == 1; }
72 73

  Symbol* get_symbol() {
74
    assert(is_unresolved(), "bad call");
75 76
    return (Symbol*)(_ptr & ~1);
  }
77 78 79 80
  Klass* get_klass() {
    assert(is_resolved(), "bad call");
    return (Klass*)_ptr;
  }
81 82
};

83
class KlassSizeStats;
84
class ConstantPool : public Metadata {
D
duke 已提交
85 86
  friend class VMStructs;
  friend class BytecodeInterpreter;  // Directly extracts an oop in the pool for fast instanceof/checkcast
87
  friend class Universe;             // For null constructor
D
duke 已提交
88
 private:
89
  Array<u1>*           _tags;        // the tag array describing the constant pool's contents
90 91
  ConstantPoolCache*   _cache;       // the cache holding interpreter runtime information
  InstanceKlass*       _pool_holder; // the corresponding class
92 93 94 95 96 97 98
  Array<u2>*           _operands;    // for variable-sized (InvokeDynamic) nodes, usually empty

  // Array of resolved objects from the constant pool and map from resolved
  // object index to original constant pool index
  jobject              _resolved_references;
  Array<u2>*           _reference_map;

99
  enum {
100 101
    _has_preresolution = 1,           // Flags
    _on_stack          = 2
102
  };
103

104 105
  int                  _flags;  // old fashioned bit twiddling
  int                  _length; // number of elements in the array
106 107 108 109

  union {
    // set for CDS to restore resolved references
    int                _resolved_reference_length;
110 111
    // keeps version number for redefined classes (used in backtrace)
    int                _version;
112 113
  } _saved;

D
duke 已提交
114

115 116 117
  void set_tags(Array<u1>* tags)               { _tags = tags; }
  void tag_at_put(int which, jbyte t)          { tags()->at_put(which, t); }
  void release_tag_at_put(int which, jbyte t)  { tags()->release_at_put(which, t); }
D
duke 已提交
118

119
  void set_operands(Array<u2>* operands)       { _operands = operands; }
120

121 122
  int flags() const                            { return _flags; }
  void set_flags(int f)                        { _flags = f; }
123

D
duke 已提交
124
 private:
125
  intptr_t* base() const { return (intptr_t*) (((char*) this) + sizeof(ConstantPool)); }
D
duke 已提交
126

127 128
  CPSlot slot_at(int which) {
    assert(is_within_bounds(which), "index out of bounds");
129
    // Uses volatile because the klass slot changes without a lock.
130
    volatile intptr_t adr = (intptr_t)OrderAccess::load_ptr_acquire(obj_at_addr_raw(which));
131
    assert(adr != 0 || which == 0, "cp entry for klass should not be zero");
132 133 134 135 136
    return CPSlot(adr);
  }

  void slot_at_put(int which, CPSlot s) const {
    assert(is_within_bounds(which), "index out of bounds");
137
    assert(s.value() != 0, "Caught something");
138 139
    *(intptr_t*)&base()[which] = s.value();
  }
140
  intptr_t* obj_at_addr_raw(int which) const {
141
    assert(is_within_bounds(which), "index out of bounds");
142
    return (intptr_t*) &base()[which];
143 144
  }

D
duke 已提交
145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
  jint* int_at_addr(int which) const {
    assert(is_within_bounds(which), "index out of bounds");
    return (jint*) &base()[which];
  }

  jlong* long_at_addr(int which) const {
    assert(is_within_bounds(which), "index out of bounds");
    return (jlong*) &base()[which];
  }

  jfloat* float_at_addr(int which) const {
    assert(is_within_bounds(which), "index out of bounds");
    return (jfloat*) &base()[which];
  }

  jdouble* double_at_addr(int which) const {
    assert(is_within_bounds(which), "index out of bounds");
    return (jdouble*) &base()[which];
  }

165 166
  ConstantPool(Array<u1>* tags);
  ConstantPool() { assert(DumpSharedSpaces || UseSharedSpaces, "only for CDS"); }
D
duke 已提交
167
 public:
168 169 170 171 172 173
  static ConstantPool* allocate(ClassLoaderData* loader_data, int length, TRAPS);

  bool is_constantPool() const volatile     { return true; }

  Array<u1>* tags() const                   { return _tags; }
  Array<u2>* operands() const               { return _operands; }
D
duke 已提交
174

175 176
  bool has_preresolution() const            { return (_flags & _has_preresolution) != 0; }
  void set_has_preresolution()              { _flags |= _has_preresolution; }
177

178 179 180 181
  // Redefine classes support.  If a method refering to this constant pool
  // is on the executing stack, or as a handle in vm code, this constant pool
  // can't be removed from the set of previous versions saved in the instance
  // class.
182
  bool on_stack() const                      { return (_flags &_on_stack) != 0; }
183 184
  void set_on_stack(const bool value);

D
duke 已提交
185
  // Klass holding pool
186 187 188
  InstanceKlass* pool_holder() const      { return _pool_holder; }
  void set_pool_holder(InstanceKlass* k)  { _pool_holder = k; }
  InstanceKlass** pool_holder_addr()      { return &_pool_holder; }
D
duke 已提交
189 190

  // Interpreter runtime support
191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227
  ConstantPoolCache* cache() const        { return _cache; }
  void set_cache(ConstantPoolCache* cache){ _cache = cache; }

  // Create object cache in the constant pool
  void initialize_resolved_references(ClassLoaderData* loader_data,
                                      intStack reference_map,
                                      int constant_pool_map_length,
                                      TRAPS);

  // resolved strings, methodHandles and callsite objects from the constant pool
  objArrayOop resolved_references()  const;
  // mapping resolved object array indexes to cp indexes and back.
  int object_to_cp_index(int index)         { return _reference_map->at(index); }
  int cp_to_object_index(int index);

  // Invokedynamic indexes.
  // They must look completely different from normal indexes.
  // The main reason is that byte swapping is sometimes done on normal indexes.
  // Finally, it is helpful for debugging to tell the two apart.
  static bool is_invokedynamic_index(int i) { return (i < 0); }
  static int  decode_invokedynamic_index(int i) { assert(is_invokedynamic_index(i),  ""); return ~i; }
  static int  encode_invokedynamic_index(int i) { assert(!is_invokedynamic_index(i), ""); return ~i; }


  // The invokedynamic points at a CP cache entry.  This entry points back
  // at the original CP entry (CONSTANT_InvokeDynamic) and also (via f2) at an entry
  // in the resolved_references array (which provides the appendix argument).
  int invokedynamic_cp_cache_index(int index) const {
    assert (is_invokedynamic_index(index), "should be a invokedynamic index");
    int cache_index = decode_invokedynamic_index(index);
    return cache_index;
  }
  ConstantPoolCacheEntry* invokedynamic_cp_cache_entry_at(int index) const {
    // decode index that invokedynamic points to.
    int cp_cache_index = invokedynamic_cp_cache_index(index);
    return cache()->entry_at(cp_cache_index);
  }
D
duke 已提交
228 229

  // Assembly code support
230 231 232 233
  static int tags_offset_in_bytes()         { return offset_of(ConstantPool, _tags); }
  static int cache_offset_in_bytes()        { return offset_of(ConstantPool, _cache); }
  static int pool_holder_offset_in_bytes()  { return offset_of(ConstantPool, _pool_holder); }
  static int resolved_references_offset_in_bytes() { return offset_of(ConstantPool, _resolved_references); }
D
duke 已提交
234 235 236

  // Storing constants

237
  void klass_at_put(int which, Klass* k) {
238
    assert(k != NULL, "resolved class shouldn't be null");
239 240
    assert(is_within_bounds(which), "index out of bounds");
    OrderAccess::release_store_ptr((Klass* volatile *)obj_at_addr_raw(which), k);
D
duke 已提交
241
    // The interpreter assumes when the tag is stored, the klass is resolved
242
    // and the Klass* is a klass rather than a Symbol*, so we need
D
duke 已提交
243 244 245 246 247 248 249 250 251 252 253
    // hardware store ordering here.
    release_tag_at_put(which, JVM_CONSTANT_Class);
  }

  // For temporary use while constructing constant pool
  void klass_index_at_put(int which, int name_index) {
    tag_at_put(which, JVM_CONSTANT_ClassIndex);
    *int_at_addr(which) = name_index;
  }

  // Temporary until actual use
254
  void unresolved_klass_at_put(int which, Symbol* s) {
D
duke 已提交
255
    release_tag_at_put(which, JVM_CONSTANT_UnresolvedClass);
256
    slot_at_put(which, s);
D
duke 已提交
257 258
  }

259 260 261 262 263 264 265 266 267 268
  void method_handle_index_at_put(int which, int ref_kind, int ref_index) {
    tag_at_put(which, JVM_CONSTANT_MethodHandle);
    *int_at_addr(which) = ((jint) ref_index<<16) | ref_kind;
  }

  void method_type_index_at_put(int which, int ref_index) {
    tag_at_put(which, JVM_CONSTANT_MethodType);
    *int_at_addr(which) = ref_index;
  }

269
  void invoke_dynamic_at_put(int which, int bootstrap_specifier_index, int name_and_type_index) {
270
    tag_at_put(which, JVM_CONSTANT_InvokeDynamic);
271
    *int_at_addr(which) = ((jint) name_and_type_index<<16) | bootstrap_specifier_index;
272
  }
273

274
  void unresolved_string_at_put(int which, Symbol* s) {
275 276
    release_tag_at_put(which, JVM_CONSTANT_String);
    *symbol_at_addr(which) = s;
D
duke 已提交
277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301
  }

  void int_at_put(int which, jint i) {
    tag_at_put(which, JVM_CONSTANT_Integer);
    *int_at_addr(which) = i;
  }

  void long_at_put(int which, jlong l) {
    tag_at_put(which, JVM_CONSTANT_Long);
    // *long_at_addr(which) = l;
    Bytes::put_native_u8((address)long_at_addr(which), *((u8*) &l));
  }

  void float_at_put(int which, jfloat f) {
    tag_at_put(which, JVM_CONSTANT_Float);
    *float_at_addr(which) = f;
  }

  void double_at_put(int which, jdouble d) {
    tag_at_put(which, JVM_CONSTANT_Double);
    // *double_at_addr(which) = d;
    // u8 temp = *(u8*) &d;
    Bytes::put_native_u8((address) double_at_addr(which), *((u8*) &d));
  }

302 303 304 305 306 307 308
  Symbol** symbol_at_addr(int which) const {
    assert(is_within_bounds(which), "index out of bounds");
    return (Symbol**) &base()[which];
  }

  void symbol_at_put(int which, Symbol* s) {
    assert(s->refcount() != 0, "should have nonzero refcount");
D
duke 已提交
309
    tag_at_put(which, JVM_CONSTANT_Utf8);
310
    *symbol_at_addr(which) = s;
D
duke 已提交
311 312
  }

313 314
  void string_at_put(int which, int obj_index, oop str) {
    resolved_references()->obj_at_put(obj_index, str);
D
duke 已提交
315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344
  }

  // For temporary use while constructing constant pool
  void string_index_at_put(int which, int string_index) {
    tag_at_put(which, JVM_CONSTANT_StringIndex);
    *int_at_addr(which) = string_index;
  }

  void field_at_put(int which, int class_index, int name_and_type_index) {
    tag_at_put(which, JVM_CONSTANT_Fieldref);
    *int_at_addr(which) = ((jint) name_and_type_index<<16) | class_index;
  }

  void method_at_put(int which, int class_index, int name_and_type_index) {
    tag_at_put(which, JVM_CONSTANT_Methodref);
    *int_at_addr(which) = ((jint) name_and_type_index<<16) | class_index;
  }

  void interface_method_at_put(int which, int class_index, int name_and_type_index) {
    tag_at_put(which, JVM_CONSTANT_InterfaceMethodref);
    *int_at_addr(which) = ((jint) name_and_type_index<<16) | class_index;  // Not so nice
  }

  void name_and_type_at_put(int which, int name_index, int signature_index) {
    tag_at_put(which, JVM_CONSTANT_NameAndType);
    *int_at_addr(which) = ((jint) signature_index<<16) | name_index;  // Not so nice
  }

  // Tag query

345
  constantTag tag_at(int which) const { return (constantTag)tags()->at_acquire(which); }
346

D
duke 已提交
347 348
  // Fetching constants

349
  Klass* klass_at(int which, TRAPS) {
D
duke 已提交
350 351 352 353
    constantPoolHandle h_this(THREAD, this);
    return klass_at_impl(h_this, which, CHECK_NULL);
  }

354
  Symbol* klass_name_at(int which);  // Returns the name, w/o resolving.
D
duke 已提交
355

356
  Klass* resolved_klass_at(int which) const {  // Used by Compiler
D
duke 已提交
357 358 359
    guarantee(tag_at(which).is_klass(), "Corrupted constant pool");
    // Must do an acquire here in case another thread resolved the klass
    // behind our back, lest we later load stale values thru the oop.
360
    return CPSlot((Klass*)OrderAccess::load_ptr_acquire(obj_at_addr_raw(which))).get_klass();
D
duke 已提交
361 362 363
  }

  // This method should only be used with a cpool lock or during parsing or gc
364
  Symbol* unresolved_klass_at(int which) {     // Temporary until actual use
365
    Symbol* s = CPSlot((Symbol*)OrderAccess::load_ptr_acquire(obj_at_addr_raw(which))).get_symbol();
D
duke 已提交
366 367 368 369 370 371
    // check that the klass is still unresolved.
    assert(tag_at(which).is_unresolved_klass(), "Corrupted constant pool");
    return s;
  }

  // RedefineClasses() API support:
372
  Symbol* klass_at_noresolve(int which) { return klass_name_at(which); }
D
duke 已提交
373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396

  jint int_at(int which) {
    assert(tag_at(which).is_int(), "Corrupted constant pool");
    return *int_at_addr(which);
  }

  jlong long_at(int which) {
    assert(tag_at(which).is_long(), "Corrupted constant pool");
    // return *long_at_addr(which);
    u8 tmp = Bytes::get_native_u8((address)&base()[which]);
    return *((jlong*)&tmp);
  }

  jfloat float_at(int which) {
    assert(tag_at(which).is_float(), "Corrupted constant pool");
    return *float_at_addr(which);
  }

  jdouble double_at(int which) {
    assert(tag_at(which).is_double(), "Corrupted constant pool");
    u8 tmp = Bytes::get_native_u8((address)&base()[which]);
    return *((jdouble*)&tmp);
  }

397
  Symbol* symbol_at(int which) {
D
duke 已提交
398
    assert(tag_at(which).is_utf8(), "Corrupted constant pool");
399
    return *symbol_at_addr(which);
D
duke 已提交
400 401
  }

402
  oop string_at(int which, int obj_index, TRAPS) {
D
duke 已提交
403
    constantPoolHandle h_this(THREAD, this);
404 405 406 407 408
    return string_at_impl(h_this, which, obj_index, THREAD);
  }
  oop string_at(int which, TRAPS) {
    int obj_index = cp_to_object_index(which);
    return string_at(which, obj_index, THREAD);
D
duke 已提交
409 410
  }

411 412 413
  // Version that can be used before string oop array is created.
  oop uncached_string_at(int which, TRAPS);

414 415
  // A "pseudo-string" is an non-string oop that has found is way into
  // a String entry.
416
  // Under EnableInvokeDynamic this can happen if the user patches a live
417 418 419 420
  // object into a CONSTANT_String entry of an anonymous class.
  // Method oops internally created for method handles may also
  // use pseudo-strings to link themselves to related metaobjects.

421 422 423 424
  bool is_pseudo_string_at(int which) {
    // A pseudo string is a string that doesn't have a symbol in the cpSlot
    return unresolved_string_at(which) == NULL;
  }
425

426
  oop pseudo_string_at(int which, int obj_index) {
427
    assert(tag_at(which).is_string(), "Corrupted constant pool");
428 429 430
    assert(unresolved_string_at(which) == NULL, "shouldn't have symbol");
    oop s = resolved_references()->obj_at(obj_index);
    return s;
431 432
  }

433 434 435 436 437 438 439 440
  oop pseudo_string_at(int which) {
    assert(tag_at(which).is_string(), "Corrupted constant pool");
    assert(unresolved_string_at(which) == NULL, "shouldn't have symbol");
    int obj_index = cp_to_object_index(which);
    oop s = resolved_references()->obj_at(obj_index);
    return s;
  }

441
  void pseudo_string_at_put(int which, int obj_index, oop x) {
442
    assert(EnableInvokeDynamic, "");
443
    assert(tag_at(which).is_string(), "Corrupted constant pool");
444
    unresolved_string_at_put(which, NULL); // indicates patched string
445
    string_at_put(which, obj_index, x);    // this works just fine
446 447
  }

D
duke 已提交
448 449 450 451 452 453
  // only called when we are sure a string entry is already resolved (via an
  // earlier string_at call.
  oop resolved_string_at(int which) {
    assert(tag_at(which).is_string(), "Corrupted constant pool");
    // Must do an acquire here in case another thread resolved the klass
    // behind our back, lest we later load stale values thru the oop.
454
    // we might want a volatile_obj_at in ObjArrayKlass.
455 456
    int obj_index = cp_to_object_index(which);
    return resolved_references()->obj_at(obj_index);
D
duke 已提交
457 458
  }

459 460 461
  Symbol* unresolved_string_at(int which) {
    assert(tag_at(which).is_string(), "Corrupted constant pool");
    Symbol* s = *symbol_at_addr(which);
D
duke 已提交
462 463 464 465 466
    return s;
  }

  // Returns an UTF8 for a CONSTANT_String entry at a given index.
  // UTF8 char* representation was chosen to avoid conversion of
467
  // java_lang_Strings at resolved entries into Symbol*s
D
duke 已提交
468
  // or vice versa.
469
  // Caller is responsible for checking for pseudo-strings.
D
duke 已提交
470 471 472 473 474 475 476
  char* string_at_noresolve(int which);

  jint name_and_type_at(int which) {
    assert(tag_at(which).is_name_and_type(), "Corrupted constant pool");
    return *int_at_addr(which);
  }

477 478 479 480
 private:
  int method_handle_ref_kind_at(int which, bool error_ok) {
    assert(tag_at(which).is_method_handle() ||
           (error_ok && tag_at(which).is_method_handle_in_error()), "Corrupted constant pool");
481 482
    return extract_low_short_from_int(*int_at_addr(which));  // mask out unwanted ref_index bits
  }
483 484 485
  int method_handle_index_at(int which, bool error_ok) {
    assert(tag_at(which).is_method_handle() ||
           (error_ok && tag_at(which).is_method_handle_in_error()), "Corrupted constant pool");
486 487
    return extract_high_short_from_int(*int_at_addr(which));  // shift out unwanted ref_kind bits
  }
488 489 490
  int method_type_index_at(int which, bool error_ok) {
    assert(tag_at(which).is_method_type() ||
           (error_ok && tag_at(which).is_method_type_in_error()), "Corrupted constant pool");
491 492
    return *int_at_addr(which);
  }
493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512
 public:
  int method_handle_ref_kind_at(int which) {
    return method_handle_ref_kind_at(which, false);
  }
  int method_handle_ref_kind_at_error_ok(int which) {
    return method_handle_ref_kind_at(which, true);
  }
  int method_handle_index_at(int which) {
    return method_handle_index_at(which, false);
  }
  int method_handle_index_at_error_ok(int which) {
    return method_handle_index_at(which, true);
  }
  int method_type_index_at(int which) {
    return method_type_index_at(which, false);
  }
  int method_type_index_at_error_ok(int which) {
    return method_type_index_at(which, true);
  }

513
  // Derived queries:
514
  Symbol* method_handle_name_ref_at(int which) {
515 516 517
    int member = method_handle_index_at(which);
    return impl_name_ref_at(member, true);
  }
518
  Symbol* method_handle_signature_ref_at(int which) {
519 520 521 522 523 524 525
    int member = method_handle_index_at(which);
    return impl_signature_ref_at(member, true);
  }
  int method_handle_klass_index_at(int which) {
    int member = method_handle_index_at(which);
    return impl_klass_ref_index_at(member, true);
  }
526
  Symbol* method_type_signature_at(int which) {
527 528 529
    int sym = method_type_index_at(which);
    return symbol_at(sym);
  }
530

531
  int invoke_dynamic_name_and_type_ref_index_at(int which) {
532
    assert(tag_at(which).is_invoke_dynamic(), "Corrupted constant pool");
533 534 535 536 537 538 539 540 541 542 543 544
    return extract_high_short_from_int(*int_at_addr(which));
  }
  int invoke_dynamic_bootstrap_specifier_index(int which) {
    assert(tag_at(which).value() == JVM_CONSTANT_InvokeDynamic, "Corrupted constant pool");
    return extract_low_short_from_int(*int_at_addr(which));
  }
  int invoke_dynamic_operand_base(int which) {
    int bootstrap_specifier_index = invoke_dynamic_bootstrap_specifier_index(which);
    return operand_offset_at(operands(), bootstrap_specifier_index);
  }
  // The first part of the operands array consists of an index into the second part.
  // Extract a 32-bit index value from the first part.
545
  static int operand_offset_at(Array<u2>* operands, int bootstrap_specifier_index) {
546 547 548 549
    int n = (bootstrap_specifier_index * 2);
    assert(n >= 0 && n+2 <= operands->length(), "oob");
    // The first 32-bit index points to the beginning of the second part
    // of the operands array.  Make sure this index is in the first part.
550 551
    DEBUG_ONLY(int second_part = build_int_from_shorts(operands->at(0),
                                                       operands->at(1)));
552
    assert(second_part == 0 || n+2 <= second_part, "oob (2)");
553 554
    int offset = build_int_from_shorts(operands->at(n+0),
                                       operands->at(n+1));
555 556 557 558
    // The offset itself must point into the second part of the array.
    assert(offset == 0 || offset >= second_part && offset <= operands->length(), "oob (3)");
    return offset;
  }
559
  static void operand_offset_at_put(Array<u2>* operands, int bootstrap_specifier_index, int offset) {
560 561
    int n = bootstrap_specifier_index * 2;
    assert(n >= 0 && n+2 <= operands->length(), "oob");
562 563
    operands->at_put(n+0, extract_low_short_from_int(offset));
    operands->at_put(n+1, extract_high_short_from_int(offset));
564
  }
565
  static int operand_array_length(Array<u2>* operands) {
566 567 568
    if (operands == NULL || operands->length() == 0)  return 0;
    int second_part = operand_offset_at(operands, 0);
    return (second_part / 2);
569
  }
570 571 572

#ifdef ASSERT
  // operand tuples fit together exactly, end to end
573
  static int operand_limit_at(Array<u2>* operands, int bootstrap_specifier_index) {
574 575 576 577 578 579 580 581 582
    int nextidx = bootstrap_specifier_index + 1;
    if (nextidx == operand_array_length(operands))
      return operands->length();
    else
      return operand_offset_at(operands, nextidx);
  }
  int invoke_dynamic_operand_limit(int which) {
    int bootstrap_specifier_index = invoke_dynamic_bootstrap_specifier_index(which);
    return operand_limit_at(operands(), bootstrap_specifier_index);
583
  }
584
#endif //ASSERT
585

586
  // layout of InvokeDynamic bootstrap method specifier (in second part of operands array):
587 588
  enum {
         _indy_bsm_offset  = 0,  // CONSTANT_MethodHandle bsm
589 590
         _indy_argc_offset = 1,  // u2 argc
         _indy_argv_offset = 2   // u2 argv[argc]
591
  };
592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632

  // These functions are used in RedefineClasses for CP merge

  int operand_offset_at(int bootstrap_specifier_index) {
    assert(0 <= bootstrap_specifier_index &&
           bootstrap_specifier_index < operand_array_length(operands()),
           "Corrupted CP operands");
    return operand_offset_at(operands(), bootstrap_specifier_index);
  }
  int operand_bootstrap_method_ref_index_at(int bootstrap_specifier_index) {
    int offset = operand_offset_at(bootstrap_specifier_index);
    return operands()->at(offset + _indy_bsm_offset);
  }
  int operand_argument_count_at(int bootstrap_specifier_index) {
    int offset = operand_offset_at(bootstrap_specifier_index);
    int argc = operands()->at(offset + _indy_argc_offset);
    return argc;
  }
  int operand_argument_index_at(int bootstrap_specifier_index, int j) {
    int offset = operand_offset_at(bootstrap_specifier_index);
    return operands()->at(offset + _indy_argv_offset + j);
  }
  int operand_next_offset_at(int bootstrap_specifier_index) {
    int offset = operand_offset_at(bootstrap_specifier_index) + _indy_argv_offset
                   + operand_argument_count_at(bootstrap_specifier_index);
    return offset;
  }
  // Compare a bootsrap specifier in the operands arrays
  bool compare_operand_to(int bootstrap_specifier_index1, constantPoolHandle cp2,
                          int bootstrap_specifier_index2, TRAPS);
  // Find a bootsrap specifier in the operands array
  int find_matching_operand(int bootstrap_specifier_index, constantPoolHandle search_cp,
                            int operands_cur_len, TRAPS);
  // Resize the operands array with delta_len and delta_size
  void resize_operands(int delta_len, int delta_size, TRAPS);
  // Extend the operands array with the length and size of the ext_cp operands
  void extend_operands(constantPoolHandle ext_cp, TRAPS);
  // Shrink the operands array to a smaller array with new_len length
  void shrink_operands(int new_len, TRAPS);


633 634
  int invoke_dynamic_bootstrap_method_ref_index_at(int which) {
    assert(tag_at(which).is_invoke_dynamic(), "Corrupted constant pool");
635
    int op_base = invoke_dynamic_operand_base(which);
636
    return operands()->at(op_base + _indy_bsm_offset);
637 638 639
  }
  int invoke_dynamic_argument_count_at(int which) {
    assert(tag_at(which).is_invoke_dynamic(), "Corrupted constant pool");
640
    int op_base = invoke_dynamic_operand_base(which);
641
    int argc = operands()->at(op_base + _indy_argc_offset);
642 643 644
    DEBUG_ONLY(int end_offset = op_base + _indy_argv_offset + argc;
               int next_offset = invoke_dynamic_operand_limit(which));
    assert(end_offset == next_offset, "matched ending");
645 646 647
    return argc;
  }
  int invoke_dynamic_argument_index_at(int which, int j) {
648
    int op_base = invoke_dynamic_operand_base(which);
649
    DEBUG_ONLY(int argc = operands()->at(op_base + _indy_argc_offset));
650
    assert((uint)j < (uint)argc, "oob");
651
    return operands()->at(op_base + _indy_argv_offset + j);
652
  }
653

654
  // The following methods (name/signature/klass_ref_at, klass_ref_at_noresolve,
655
  // name_and_type_ref_index_at) all expect to be passed indices obtained
656
  // directly from the bytecode.
657
  // If the indices are meant to refer to fields or methods, they are
658
  // actually rewritten constant pool cache indices.
659 660
  // The routine remap_instruction_operand_from_cache manages the adjustment
  // of these values back to constant pool indices.
661

662
  // There are also "uncached" versions which do not adjust the operand index; see below.
D
duke 已提交
663

664 665 666 667 668
  // FIXME: Consider renaming these with a prefix "cached_" to make the distinction clear.
  // In a few cases (the verifier) there are uses before a cpcache has been built,
  // which are handled by a dynamic check in remap_instruction_operand_from_cache.
  // FIXME: Remove the dynamic check, and adjust all callers to specify the correct mode.

D
duke 已提交
669
  // Lookup for entries consisting of (klass_index, name_and_type index)
670
  Klass* klass_ref_at(int which, TRAPS);
671 672 673
  Symbol* klass_ref_at_noresolve(int which);
  Symbol* name_ref_at(int which)                { return impl_name_ref_at(which, false); }
  Symbol* signature_ref_at(int which)           { return impl_signature_ref_at(which, false); }
D
duke 已提交
674

675 676
  int klass_ref_index_at(int which)               { return impl_klass_ref_index_at(which, false); }
  int name_and_type_ref_index_at(int which)       { return impl_name_and_type_ref_index_at(which, false); }
D
duke 已提交
677 678

  // Lookup for entries consisting of (name_index, signature_index)
679 680
  int name_ref_index_at(int which_nt);            // ==  low-order jshort of name_and_type_at(which_nt)
  int signature_ref_index_at(int which_nt);       // == high-order jshort of name_and_type_at(which_nt)
D
duke 已提交
681 682 683 684 685 686 687 688 689

  BasicType basic_type_for_signature_at(int which);

  // Resolve string constants (to prevent allocation during compilation)
  void resolve_string_constants(TRAPS) {
    constantPoolHandle h_this(THREAD, this);
    resolve_string_constants_impl(h_this, CHECK);
  }

690 691 692 693
  // CDS support
  void remove_unshareable_info();
  void restore_unshareable_info(TRAPS);
  bool resolve_class_constants(TRAPS);
694 695 696 697 698
  // The ConstantPool vtable is restored by this call when the ConstantPool is
  // in the shared archive.  See patch_klass_vtables() in metaspaceShared.cpp for
  // all the gory details.  SA, dtrace and pstack helpers distinguish metadata
  // by their vtable.
  void restore_vtable() { guarantee(is_constantPool(), "vtable restored by this call"); }
699

700 701 702 703
 private:
  enum { _no_index_sentinel = -1, _possible_index_sentinel = -2 };
 public:

704 705 706
  // Resolve late bound constants.
  oop resolve_constant_at(int index, TRAPS) {
    constantPoolHandle h_this(THREAD, this);
707
    return resolve_constant_at_impl(h_this, index, _no_index_sentinel, THREAD);
708 709 710 711
  }

  oop resolve_cached_constant_at(int cache_index, TRAPS) {
    constantPoolHandle h_this(THREAD, this);
712 713 714 715 716 717
    return resolve_constant_at_impl(h_this, _no_index_sentinel, cache_index, THREAD);
  }

  oop resolve_possibly_cached_constant_at(int pool_index, TRAPS) {
    constantPoolHandle h_this(THREAD, this);
    return resolve_constant_at_impl(h_this, pool_index, _possible_index_sentinel, THREAD);
718 719
  }

720 721 722 723 724
  oop resolve_bootstrap_specifier_at(int index, TRAPS) {
    constantPoolHandle h_this(THREAD, this);
    return resolve_bootstrap_specifier_at_impl(h_this, index, THREAD);
  }

D
duke 已提交
725 726 727 728
  // Klass name matches name at offset
  bool klass_name_at_matches(instanceKlassHandle k, int which);

  // Sizing
729 730 731 732 733 734 735 736
  int length() const                   { return _length; }
  void set_length(int length)          { _length = length; }

  // Tells whether index is within bounds.
  bool is_within_bounds(int index) const {
    return 0 <= index && index < length();
  }

737
  // Sizing (in words)
738 739 740
  static int header_size()             { return sizeof(ConstantPool)/HeapWordSize; }
  static int size(int length)          { return align_object_size(header_size() + length); }
  int size() const                     { return size(length()); }
741 742 743
#if INCLUDE_SERVICES
  void collect_statistics(KlassSizeStats *sz) const;
#endif
D
duke 已提交
744 745 746 747 748

  friend class ClassFileParser;
  friend class SystemDictionary;

  // Used by compiler to prevent classloading.
749 750 751 752 753 754 755
  static Method*          method_at_if_loaded      (constantPoolHandle this_oop, int which);
  static bool       has_appendix_at_if_loaded      (constantPoolHandle this_oop, int which);
  static oop            appendix_at_if_loaded      (constantPoolHandle this_oop, int which);
  static bool    has_method_type_at_if_loaded      (constantPoolHandle this_oop, int which);
  static oop         method_type_at_if_loaded      (constantPoolHandle this_oop, int which);
  static Klass*            klass_at_if_loaded      (constantPoolHandle this_oop, int which);
  static Klass*        klass_ref_at_if_loaded      (constantPoolHandle this_oop, int which);
D
duke 已提交
756 757

  // Routines currently used for annotations (only called by jvm.cpp) but which might be used in the
758
  // future by other Java code. These take constant pool indices rather than
D
duke 已提交
759
  // constant pool cache indices as do the peer methods above.
760 761 762
  Symbol* uncached_klass_ref_at_noresolve(int which);
  Symbol* uncached_name_ref_at(int which)                 { return impl_name_ref_at(which, true); }
  Symbol* uncached_signature_ref_at(int which)            { return impl_signature_ref_at(which, true); }
763 764
  int       uncached_klass_ref_index_at(int which)          { return impl_klass_ref_index_at(which, true); }
  int       uncached_name_and_type_ref_index_at(int which)  { return impl_name_and_type_ref_index_at(which, true); }
D
duke 已提交
765 766 767 768 769 770 771

  // Sharing
  int pre_resolve_shared_klasses(TRAPS);

  // Debugging
  const char* printable_name_at(int which) PRODUCT_RETURN0;

772 773
#ifdef ASSERT
  enum { CPCACHE_INDEX_TAG = 0x10000 };  // helps keep CP cache indices distinct from CP indices
774 775
#else
  enum { CPCACHE_INDEX_TAG = 0 };        // in product mode, this zero value is a no-op
776 777
#endif //ASSERT

778 779 780 781 782 783
  static int decode_cpcache_index(int raw_index, bool invokedynamic_ok = false) {
    if (invokedynamic_ok && is_invokedynamic_index(raw_index))
      return decode_invokedynamic_index(raw_index);
    else
      return raw_index - CPCACHE_INDEX_TAG;
  }
784

D
duke 已提交
785 786
 private:

787 788 789 790 791 792 793
  void set_resolved_references(jobject s) { _resolved_references = s; }
  Array<u2>* reference_map() const        { return _reference_map; }
  void set_reference_map(Array<u2>* o)    { _reference_map = o; }

  // patch JSR 292 resolved references after the class is linked.
  void patch_resolved_references(GrowableArray<Handle>* cp_patches);

794 795
  Symbol* impl_name_ref_at(int which, bool uncached);
  Symbol* impl_signature_ref_at(int which, bool uncached);
796 797 798
  int       impl_klass_ref_index_at(int which, bool uncached);
  int       impl_name_and_type_ref_index_at(int which, bool uncached);

799
  int remap_instruction_operand_from_cache(int operand);  // operand must be biased by CPCACHE_INDEX_TAG
D
duke 已提交
800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816

  // Used while constructing constant pool (only by ClassFileParser)
  jint klass_index_at(int which) {
    assert(tag_at(which).is_klass_index(), "Corrupted constant pool");
    return *int_at_addr(which);
  }

  jint string_index_at(int which) {
    assert(tag_at(which).is_string_index(), "Corrupted constant pool");
    return *int_at_addr(which);
  }

  // Performs the LinkResolver checks
  static void verify_constant_pool_resolve(constantPoolHandle this_oop, KlassHandle klass, TRAPS);

  // Implementation of methods that needs an exposed 'this' pointer, in order to
  // handle GC while executing the method
817 818
  static Klass* klass_at_impl(constantPoolHandle this_oop, int which, TRAPS);
  static oop string_at_impl(constantPoolHandle this_oop, int which, int obj_index, TRAPS);
D
duke 已提交
819 820 821 822

  // Resolve string constants (to prevent allocation during compilation)
  static void resolve_string_constants_impl(constantPoolHandle this_oop, TRAPS);

823
  static oop resolve_constant_at_impl(constantPoolHandle this_oop, int index, int cache_index, TRAPS);
824
  static void save_and_throw_exception(constantPoolHandle this_oop, int which, int tag_value, TRAPS);
825
  static oop resolve_bootstrap_specifier_at_impl(constantPoolHandle this_oop, int index, TRAPS);
826

D
duke 已提交
827
 public:
828
  // Merging ConstantPool* support:
D
duke 已提交
829
  bool compare_entry_to(int index1, constantPoolHandle cp2, int index2, TRAPS);
830 831 832 833 834 835
  void copy_cp_to(int start_i, int end_i, constantPoolHandle to_cp, int to_i, TRAPS) {
    constantPoolHandle h_this(THREAD, this);
    copy_cp_to_impl(h_this, start_i, end_i, to_cp, to_i, THREAD);
  }
  static void copy_cp_to_impl(constantPoolHandle from_cp, int start_i, int end_i, constantPoolHandle to_cp, int to_i, TRAPS);
  static void copy_entry_to(constantPoolHandle from_cp, int from_i, constantPoolHandle to_cp, int to_i, TRAPS);
836
  static void copy_operands(constantPoolHandle from_cp, constantPoolHandle to_cp, TRAPS);
D
duke 已提交
837
  int  find_matching_entry(int pattern_i, constantPoolHandle search_cp, TRAPS);
838 839 840
  int  version() const                    { return _saved._version; }
  void set_version(int version)           { _saved._version = version; }
  void increment_and_save_version(int version) {
841
    _saved._version = version >= 0 ? (version + 1) : version;  // keep overflow
842
  }
843 844 845

  void set_resolved_reference_length(int length) { _saved._resolved_reference_length = length; }
  int  resolved_reference_length() const  { return _saved._resolved_reference_length; }
846 847 848 849 850 851 852 853 854 855 856

  // lock() may return null -- constant pool updates may happen before this lock is
  // initialized, because the _pool_holder has not been fully initialized and
  // has not been registered into the system dictionary. In this case, no other
  // thread can be modifying this constantpool, so no synchronization is
  // necessary.
  //
  // Use cplock() like this:
  //    oop cplock = cp->lock();
  //    ObjectLocker ol(cplock , THREAD, cplock != NULL);
  oop lock();
D
duke 已提交
857

858 859 860
  // Decrease ref counts of symbols that are in the constant pool
  // when the holder class is unloaded
  void unreference_symbols();
D
duke 已提交
861

862 863 864 865
  // Deallocate constant pool for RedefineClasses
  void deallocate_contents(ClassLoaderData* loader_data);
  void release_C_heap_structures();

D
duke 已提交
866 867 868 869 870 871 872 873 874 875 876 877 878 879 880
  // JVMTI accesss - GetConstantPool, RetransformClasses, ...
  friend class JvmtiConstantPoolReconstituter;

 private:
  jint cpool_entry_size(jint idx);
  jint hash_entries_to(SymbolHashMap *symmap, SymbolHashMap *classmap);

  // Copy cpool bytes into byte array.
  // Returns:
  //  int > 0, count of the raw cpool bytes that have been copied
  //        0, OutOfMemory error
  //       -1, Internal error
  int  copy_cpool_bytes(int cpool_size,
                        SymbolHashMap* tbl,
                        unsigned char *bytes);
881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896

 public:
  // Verify
  void verify_on(outputStream* st);

  // Printing
  void print_on(outputStream* st) const;
  void print_value_on(outputStream* st) const;
  void print_entry_on(int index, outputStream* st);

  const char* internal_name() const { return "{constant pool}"; }

#ifndef PRODUCT
  // Compile the world support
  static void preload_and_initialize_all_classes(ConstantPool* constant_pool, TRAPS);
#endif
D
duke 已提交
897 898
};

Z
zgu 已提交
899
class SymbolHashMapEntry : public CHeapObj<mtSymbol> {
D
duke 已提交
900 901 902
 private:
  unsigned int        _hash;   // 32-bit hash for item
  SymbolHashMapEntry* _next;   // Next element in the linked list for this bucket
903
  Symbol*             _symbol; // 1-st part of the mapping: symbol => value
D
duke 已提交
904 905 906 907 908 909 910 911 912
  u2                  _value;  // 2-nd part of the mapping: symbol => value

 public:
  unsigned   int hash() const             { return _hash;   }
  void       set_hash(unsigned int hash)  { _hash = hash;   }

  SymbolHashMapEntry* next() const        { return _next;   }
  void set_next(SymbolHashMapEntry* next) { _next = next;   }

913 914
  Symbol*    symbol() const               { return _symbol; }
  void       set_symbol(Symbol* sym)      { _symbol = sym;  }
D
duke 已提交
915 916 917 918

  u2         value() const                {  return _value; }
  void       set_value(u2 value)          { _value = value; }

919
  SymbolHashMapEntry(unsigned int hash, Symbol* symbol, u2 value)
D
duke 已提交
920 921 922 923 924
    : _hash(hash), _symbol(symbol), _value(value), _next(NULL) {}

}; // End SymbolHashMapEntry class


Z
zgu 已提交
925
class SymbolHashMapBucket : public CHeapObj<mtSymbol> {
D
duke 已提交
926 927 928 929 930 931 932 933 934 935 936 937

private:
  SymbolHashMapEntry*    _entry;

public:
  SymbolHashMapEntry* entry() const         {  return _entry; }
  void set_entry(SymbolHashMapEntry* entry) { _entry = entry; }
  void clear()                              { _entry = NULL;  }

}; // End SymbolHashMapBucket class


Z
zgu 已提交
938
class SymbolHashMap: public CHeapObj<mtSymbol> {
D
duke 已提交
939 940 941 942 943 944 945 946 947 948 949 950

 private:
  // Default number of entries in the table
  enum SymbolHashMap_Constants {
    _Def_HashMap_Size = 256
  };

  int                   _table_size;
  SymbolHashMapBucket*  _buckets;

  void initialize_table(int table_size) {
    _table_size = table_size;
Z
zgu 已提交
951
    _buckets = NEW_C_HEAP_ARRAY(SymbolHashMapBucket, table_size, mtSymbol);
D
duke 已提交
952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977
    for (int index = 0; index < table_size; index++) {
      _buckets[index].clear();
    }
  }

 public:

  int table_size() const        { return _table_size; }

  SymbolHashMap()               { initialize_table(_Def_HashMap_Size); }
  SymbolHashMap(int table_size) { initialize_table(table_size); }

  // hash P(31) from Kernighan & Ritchie
  static unsigned int compute_hash(const char* str, int len) {
    unsigned int hash = 0;
    while (len-- > 0) {
      hash = 31*hash + (unsigned) *str;
      str++;
    }
    return hash;
  }

  SymbolHashMapEntry* bucket(int i) {
    return _buckets[i].entry();
  }

978 979
  void add_entry(Symbol* sym, u2 value);
  SymbolHashMapEntry* find_entry(Symbol* sym);
D
duke 已提交
980

981
  u2 symbol_to_value(Symbol* sym) {
D
duke 已提交
982 983 984 985 986 987 988 989 990 991 992 993 994 995 996
    SymbolHashMapEntry *entry = find_entry(sym);
    return (entry == NULL) ? 0 : entry->value();
  }

  ~SymbolHashMap() {
    SymbolHashMapEntry* next;
    for (int i = 0; i < _table_size; i++) {
      for (SymbolHashMapEntry* cur = bucket(i); cur != NULL; cur = next) {
        next = cur->next();
        delete(cur);
      }
    }
    delete _buckets;
  }
}; // End SymbolHashMap class
997 998

#endif // SHARE_VM_OOPS_CONSTANTPOOLOOP_HPP