constantPool.hpp 38.8 KB
Newer Older
D
duke 已提交
1
/*
2
 * Copyright (c) 1997, 2017, 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;

114
  Monitor*             _lock;
D
duke 已提交
115

116 117 118
  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 已提交
119

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

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

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

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

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

D
duke 已提交
146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
  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];
  }

166 167
  ConstantPool(Array<u1>* tags);
  ConstantPool() { assert(DumpSharedSpaces || UseSharedSpaces, "only for CDS"); }
D
duke 已提交
168
 public:
169 170 171 172 173 174
  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 已提交
175

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

179 180 181 182
  // 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.
183
  bool on_stack() const                      { return (_flags &_on_stack) != 0; }
184 185
  void set_on_stack(const bool value);

D
duke 已提交
186
  // Klass holding pool
187 188 189
  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 已提交
190 191

  // Interpreter runtime support
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 228
  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 已提交
229 230

  // Assembly code support
231 232 233 234
  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 已提交
235 236 237

  // Storing constants

238
  void klass_at_put(int which, Klass* k) {
239
    assert(k != NULL, "resolved class shouldn't be null");
240 241
    assert(is_within_bounds(which), "index out of bounds");
    OrderAccess::release_store_ptr((Klass* volatile *)obj_at_addr_raw(which), k);
D
duke 已提交
242
    // The interpreter assumes when the tag is stored, the klass is resolved
243
    // and the Klass* is a klass rather than a Symbol*, so we need
D
duke 已提交
244 245 246 247 248 249 250 251 252 253 254
    // 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
255
  void unresolved_klass_at_put(int which, Symbol* s) {
D
duke 已提交
256
    release_tag_at_put(which, JVM_CONSTANT_UnresolvedClass);
257
    slot_at_put(which, s);
D
duke 已提交
258 259
  }

260 261 262 263 264 265 266 267 268 269
  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;
  }

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

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

  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));
  }

303 304 305 306 307 308 309
  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 已提交
310
    tag_at_put(which, JVM_CONSTANT_Utf8);
311
    *symbol_at_addr(which) = s;
D
duke 已提交
312 313
  }

314 315
  void string_at_put(int which, int obj_index, oop str) {
    resolved_references()->obj_at_put(obj_index, str);
D
duke 已提交
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 345
  }

  // 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

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

D
duke 已提交
348 349
  // Fetching constants

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

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

357
  Klass* resolved_klass_at(int which) const {  // Used by Compiler
D
duke 已提交
358 359 360
    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.
361
    return CPSlot((Klass*)OrderAccess::load_ptr_acquire(obj_at_addr_raw(which))).get_klass();
D
duke 已提交
362 363 364
  }

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

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

  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);
  }

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

403
  oop string_at(int which, int obj_index, TRAPS) {
D
duke 已提交
404
    constantPoolHandle h_this(THREAD, this);
405 406 407 408 409
    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 已提交
410 411
  }

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

415 416
  // A "pseudo-string" is an non-string oop that has found is way into
  // a String entry.
417
  // Under EnableInvokeDynamic this can happen if the user patches a live
418 419 420 421
  // 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.

422 423 424 425
  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;
  }
426

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

434 435 436 437 438 439 440 441
  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;
  }

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

D
duke 已提交
449 450 451 452 453 454
  // 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.
455
    // we might want a volatile_obj_at in ObjArrayKlass.
456 457
    int obj_index = cp_to_object_index(which);
    return resolved_references()->obj_at(obj_index);
D
duke 已提交
458 459
  }

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

  // Returns an UTF8 for a CONSTANT_String entry at a given index.
  // UTF8 char* representation was chosen to avoid conversion of
468
  // java_lang_Strings at resolved entries into Symbol*s
D
duke 已提交
469
  // or vice versa.
470
  // Caller is responsible for checking for pseudo-strings.
D
duke 已提交
471 472 473 474 475 476 477
  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);
  }

478 479 480 481
 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");
482 483
    return extract_low_short_from_int(*int_at_addr(which));  // mask out unwanted ref_index bits
  }
484 485 486
  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");
487 488
    return extract_high_short_from_int(*int_at_addr(which));  // shift out unwanted ref_kind bits
  }
489 490 491
  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");
492 493
    return *int_at_addr(which);
  }
494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513
 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);
  }

514
  // Derived queries:
515
  Symbol* method_handle_name_ref_at(int which) {
516 517 518
    int member = method_handle_index_at(which);
    return impl_name_ref_at(member, true);
  }
519
  Symbol* method_handle_signature_ref_at(int which) {
520 521 522 523 524 525 526
    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);
  }
527
  Symbol* method_type_signature_at(int which) {
528 529 530
    int sym = method_type_index_at(which);
    return symbol_at(sym);
  }
531

532
  int invoke_dynamic_name_and_type_ref_index_at(int which) {
533
    assert(tag_at(which).is_invoke_dynamic(), "Corrupted constant pool");
534 535 536 537 538 539 540 541 542 543 544 545
    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.
546
  static int operand_offset_at(Array<u2>* operands, int bootstrap_specifier_index) {
547 548 549 550
    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.
551 552
    DEBUG_ONLY(int second_part = build_int_from_shorts(operands->at(0),
                                                       operands->at(1)));
553
    assert(second_part == 0 || n+2 <= second_part, "oob (2)");
554 555
    int offset = build_int_from_shorts(operands->at(n+0),
                                       operands->at(n+1));
556 557 558 559
    // 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;
  }
560
  static void operand_offset_at_put(Array<u2>* operands, int bootstrap_specifier_index, int offset) {
561 562
    int n = bootstrap_specifier_index * 2;
    assert(n >= 0 && n+2 <= operands->length(), "oob");
563 564
    operands->at_put(n+0, extract_low_short_from_int(offset));
    operands->at_put(n+1, extract_high_short_from_int(offset));
565
  }
566
  static int operand_array_length(Array<u2>* operands) {
567 568 569
    if (operands == NULL || operands->length() == 0)  return 0;
    int second_part = operand_offset_at(operands, 0);
    return (second_part / 2);
570
  }
571 572 573

#ifdef ASSERT
  // operand tuples fit together exactly, end to end
574
  static int operand_limit_at(Array<u2>* operands, int bootstrap_specifier_index) {
575 576 577 578 579 580 581 582 583
    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);
584
  }
585
#endif //ASSERT
586

587
  // layout of InvokeDynamic bootstrap method specifier (in second part of operands array):
588 589
  enum {
         _indy_bsm_offset  = 0,  // CONSTANT_MethodHandle bsm
590 591
         _indy_argc_offset = 1,  // u2 argc
         _indy_argv_offset = 2   // u2 argv[argc]
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 633

  // 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);


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

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

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

665 666 667 668 669
  // 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 已提交
670
  // Lookup for entries consisting of (klass_index, name_and_type index)
671
  Klass* klass_ref_at(int which, TRAPS);
672 673 674
  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 已提交
675

676 677
  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 已提交
678 679

  // Lookup for entries consisting of (name_index, signature_index)
680 681
  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 已提交
682 683 684 685 686 687 688 689 690

  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);
  }

691 692 693 694
  // CDS support
  void remove_unshareable_info();
  void restore_unshareable_info(TRAPS);
  bool resolve_class_constants(TRAPS);
695 696 697 698 699
  // 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"); }
700

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

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

  oop resolve_cached_constant_at(int cache_index, TRAPS) {
    constantPoolHandle h_this(THREAD, this);
713 714 715 716 717 718
    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);
719 720
  }

721 722 723 724 725
  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 已提交
726 727 728 729
  // Klass name matches name at offset
  bool klass_name_at_matches(instanceKlassHandle k, int which);

  // Sizing
730 731 732 733 734 735 736 737
  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();
  }

738
  // Sizing (in words)
739 740 741
  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()); }
742 743 744
#if INCLUDE_SERVICES
  void collect_statistics(KlassSizeStats *sz) const;
#endif
D
duke 已提交
745 746 747 748 749

  friend class ClassFileParser;
  friend class SystemDictionary;

  // Used by compiler to prevent classloading.
750 751 752 753 754 755 756
  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 已提交
757 758

  // Routines currently used for annotations (only called by jvm.cpp) but which might be used in the
759
  // future by other Java code. These take constant pool indices rather than
D
duke 已提交
760
  // constant pool cache indices as do the peer methods above.
761 762 763
  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); }
764 765
  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 已提交
766 767 768 769 770 771 772

  // Sharing
  int pre_resolve_shared_klasses(TRAPS);

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

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

779 780 781 782 783 784
  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;
  }
785

D
duke 已提交
786 787
 private:

788 789 790 791 792 793 794
  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);

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

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

  // 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
818 819
  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 已提交
820 821 822 823

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

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

D
duke 已提交
828
 public:
829
  // Merging ConstantPool* support:
D
duke 已提交
830
  bool compare_entry_to(int index1, constantPoolHandle cp2, int index2, TRAPS);
831 832 833 834 835 836
  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);
837
  static void copy_operands(constantPoolHandle from_cp, constantPoolHandle to_cp, TRAPS);
D
duke 已提交
838
  int  find_matching_entry(int pattern_i, constantPoolHandle search_cp, TRAPS);
839 840 841
  int  version() const                    { return _saved._version; }
  void set_version(int version)           { _saved._version = version; }
  void increment_and_save_version(int version) {
842
    _saved._version = version >= 0 ? (version + 1) : version;  // keep overflow
843
  }
844 845 846

  void set_resolved_reference_length(int length) { _saved._resolved_reference_length = length; }
  int  resolved_reference_length() const  { return _saved._resolved_reference_length; }
847 848
  void set_lock(Monitor* lock)            { _lock = lock; }
  Monitor* lock()                         { return _lock; }
D
duke 已提交
849

850 851 852
  // Decrease ref counts of symbols that are in the constant pool
  // when the holder class is unloaded
  void unreference_symbols();
D
duke 已提交
853

854 855 856 857
  // Deallocate constant pool for RedefineClasses
  void deallocate_contents(ClassLoaderData* loader_data);
  void release_C_heap_structures();

D
duke 已提交
858 859 860 861 862 863 864 865 866 867 868 869 870 871 872
  // 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);
873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888

 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 已提交
889 890
};

Z
zgu 已提交
891
class SymbolHashMapEntry : public CHeapObj<mtSymbol> {
D
duke 已提交
892 893 894
 private:
  unsigned int        _hash;   // 32-bit hash for item
  SymbolHashMapEntry* _next;   // Next element in the linked list for this bucket
895
  Symbol*             _symbol; // 1-st part of the mapping: symbol => value
D
duke 已提交
896 897 898 899 900 901 902 903 904
  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;   }

905 906
  Symbol*    symbol() const               { return _symbol; }
  void       set_symbol(Symbol* sym)      { _symbol = sym;  }
D
duke 已提交
907 908 909 910

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

911
  SymbolHashMapEntry(unsigned int hash, Symbol* symbol, u2 value)
D
duke 已提交
912 913 914 915 916
    : _hash(hash), _symbol(symbol), _value(value), _next(NULL) {}

}; // End SymbolHashMapEntry class


Z
zgu 已提交
917
class SymbolHashMapBucket : public CHeapObj<mtSymbol> {
D
duke 已提交
918 919 920 921 922 923 924 925 926 927 928 929

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 已提交
930
class SymbolHashMap: public CHeapObj<mtSymbol> {
D
duke 已提交
931 932 933 934 935 936 937 938 939 940 941 942

 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 已提交
943
    _buckets = NEW_C_HEAP_ARRAY(SymbolHashMapBucket, table_size, mtSymbol);
D
duke 已提交
944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969
    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();
  }

970 971
  void add_entry(Symbol* sym, u2 value);
  SymbolHashMapEntry* find_entry(Symbol* sym);
D
duke 已提交
972

973
  u2 symbol_to_value(Symbol* sym) {
D
duke 已提交
974 975 976 977 978 979 980 981 982 983 984 985
    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);
      }
    }
986
    FREE_C_HEAP_ARRAY(SymbolHashMapBucket, _buckets, mtSymbol);
D
duke 已提交
987 988
  }
}; // End SymbolHashMap class
989 990

#endif // SHARE_VM_OOPS_CONSTANTPOOLOOP_HPP