constantPool.hpp revision 13051:a7683f72df68
1/*
2 * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25#ifndef SHARE_VM_OOPS_CONSTANTPOOLOOP_HPP
26#define SHARE_VM_OOPS_CONSTANTPOOLOOP_HPP
27
28#include "oops/arrayOop.hpp"
29#include "oops/cpCache.hpp"
30#include "oops/objArrayOop.hpp"
31#include "oops/symbol.hpp"
32#include "oops/typeArrayOop.hpp"
33#include "runtime/handles.hpp"
34#include "utilities/bytes.hpp"
35#include "utilities/constantTag.hpp"
36
37// A ConstantPool is an array containing class constants as described in the
38// class file.
39//
40// Most of the constant pool entries are written during class parsing, which
41// is safe.  For klass types, the constant pool entry is
42// modified when the entry is resolved.  If a klass constant pool
43// entry is read without a lock, only the resolved state guarantees that
44// the entry in the constant pool is a klass object and not a Symbol*.
45
46class SymbolHashMap;
47
48class CPSlot VALUE_OBJ_CLASS_SPEC {
49 friend class ConstantPool;
50  intptr_t _ptr;
51  enum TagBits  {_pseudo_bit = 1};
52 public:
53
54  CPSlot(intptr_t ptr): _ptr(ptr) {}
55  CPSlot(Symbol* ptr, int tag_bits = 0): _ptr((intptr_t)ptr | tag_bits) {}
56
57  intptr_t value()   { return _ptr; }
58  bool is_pseudo_string() { return (_ptr & _pseudo_bit) != 0; }
59
60  Symbol* get_symbol() {
61    return (Symbol*)(_ptr & ~_pseudo_bit);
62  }
63};
64
65// This represents a JVM_CONSTANT_Class, JVM_CONSTANT_UnresolvedClass, or
66// JVM_CONSTANT_UnresolvedClassInError slot in the constant pool.
67class CPKlassSlot VALUE_OBJ_CLASS_SPEC {
68  // cp->symbol_at(_name_index) gives the name of the class.
69  int _name_index;
70
71  // cp->_resolved_klasses->at(_resolved_klass_index) gives the Klass* for the class.
72  int _resolved_klass_index;
73public:
74  enum {
75    // This is used during constant pool merging where the resolved klass index is
76    // not yet known, and will be computed at a later stage (during a call to
77    // initialize_unresolved_klasses()).
78    _temp_resolved_klass_index = 0xffff
79  };
80  CPKlassSlot(int n, int rk) {
81    _name_index = n;
82    _resolved_klass_index = rk;
83  }
84  int name_index() const {
85    return _name_index;
86  }
87  int resolved_klass_index() const {
88    assert(_resolved_klass_index != _temp_resolved_klass_index, "constant pool merging was incomplete");
89    return _resolved_klass_index;
90  }
91};
92
93class KlassSizeStats;
94
95class ConstantPool : public Metadata {
96  friend class VMStructs;
97  friend class JVMCIVMStructs;
98  friend class BytecodeInterpreter;  // Directly extracts a klass in the pool for fast instanceof/checkcast
99  friend class Universe;             // For null constructor
100 private:
101  Array<u1>*           _tags;        // the tag array describing the constant pool's contents
102  ConstantPoolCache*   _cache;       // the cache holding interpreter runtime information
103  InstanceKlass*       _pool_holder; // the corresponding class
104  Array<u2>*           _operands;    // for variable-sized (InvokeDynamic) nodes, usually empty
105
106  // Consider using an array of compressed klass pointers to
107  // save space on 64-bit platforms.
108  Array<Klass*>*       _resolved_klasses;
109
110  enum {
111    _has_preresolution = 1,           // Flags
112    _on_stack          = 2,
113    _is_shared         = 4
114  };
115
116  int                  _flags;  // old fashioned bit twiddling
117  int                  _length; // number of elements in the array
118
119  union {
120    // set for CDS to restore resolved references
121    int                _resolved_reference_length;
122    // keeps version number for redefined classes (used in backtrace)
123    int                _version;
124  } _saved;
125
126  void set_tags(Array<u1>* tags)               { _tags = tags; }
127  void tag_at_put(int which, jbyte t)          { tags()->at_put(which, t); }
128  void release_tag_at_put(int which, jbyte t)  { tags()->release_at_put(which, t); }
129
130  u1* tag_addr_at(int which) const             { return tags()->adr_at(which); }
131
132  void set_operands(Array<u2>* operands)       { _operands = operands; }
133
134  int flags() const                            { return _flags; }
135  void set_flags(int f)                        { _flags = f; }
136
137 private:
138  intptr_t* base() const { return (intptr_t*) (((char*) this) + sizeof(ConstantPool)); }
139
140  CPSlot slot_at(int which) const {
141    assert(is_within_bounds(which), "index out of bounds");
142    assert(!tag_at(which).is_unresolved_klass() && !tag_at(which).is_unresolved_klass_in_error(), "Corrupted constant pool");
143    // Uses volatile because the klass slot changes without a lock.
144    volatile intptr_t adr = (intptr_t)OrderAccess::load_ptr_acquire(obj_at_addr_raw(which));
145    assert(adr != 0 || which == 0, "cp entry for klass should not be zero");
146    return CPSlot(adr);
147  }
148
149  void slot_at_put(int which, CPSlot s) const {
150    assert(is_within_bounds(which), "index out of bounds");
151    assert(s.value() != 0, "Caught something");
152    *(intptr_t*)&base()[which] = s.value();
153  }
154  intptr_t* obj_at_addr_raw(int which) const {
155    assert(is_within_bounds(which), "index out of bounds");
156    return (intptr_t*) &base()[which];
157  }
158
159  jint* int_at_addr(int which) const {
160    assert(is_within_bounds(which), "index out of bounds");
161    return (jint*) &base()[which];
162  }
163
164  jlong* long_at_addr(int which) const {
165    assert(is_within_bounds(which), "index out of bounds");
166    return (jlong*) &base()[which];
167  }
168
169  jfloat* float_at_addr(int which) const {
170    assert(is_within_bounds(which), "index out of bounds");
171    return (jfloat*) &base()[which];
172  }
173
174  jdouble* double_at_addr(int which) const {
175    assert(is_within_bounds(which), "index out of bounds");
176    return (jdouble*) &base()[which];
177  }
178
179  ConstantPool(Array<u1>* tags);
180  ConstantPool() { assert(DumpSharedSpaces || UseSharedSpaces, "only for CDS"); }
181 public:
182  static ConstantPool* allocate(ClassLoaderData* loader_data, int length, TRAPS);
183
184  bool is_constantPool() const volatile     { return true; }
185
186  Array<u1>* tags() const                   { return _tags; }
187  Array<u2>* operands() const               { return _operands; }
188
189  bool has_preresolution() const            { return (_flags & _has_preresolution) != 0; }
190  void set_has_preresolution() {
191    assert(!is_shared(), "should never be called on shared ConstantPools");
192    _flags |= _has_preresolution;
193  }
194
195  // Redefine classes support.  If a method refering to this constant pool
196  // is on the executing stack, or as a handle in vm code, this constant pool
197  // can't be removed from the set of previous versions saved in the instance
198  // class.
199  bool on_stack() const                      { return (_flags &_on_stack) != 0; }
200  void set_on_stack(const bool value);
201
202  // Faster than MetaspaceObj::is_shared() - used by set_on_stack()
203  bool is_shared() const                     { return (_flags & _is_shared) != 0; }
204
205  // Klass holding pool
206  InstanceKlass* pool_holder() const      { return _pool_holder; }
207  void set_pool_holder(InstanceKlass* k)  { _pool_holder = k; }
208  InstanceKlass** pool_holder_addr()      { return &_pool_holder; }
209
210  // Interpreter runtime support
211  ConstantPoolCache* cache() const        { return _cache; }
212  void set_cache(ConstantPoolCache* cache){ _cache = cache; }
213
214  // Create object cache in the constant pool
215  void initialize_resolved_references(ClassLoaderData* loader_data,
216                                      const intStack& reference_map,
217                                      int constant_pool_map_length,
218                                      TRAPS);
219
220  // resolved strings, methodHandles and callsite objects from the constant pool
221  objArrayOop resolved_references()  const;
222  // mapping resolved object array indexes to cp indexes and back.
223  int object_to_cp_index(int index)         { return reference_map()->at(index); }
224  int cp_to_object_index(int index);
225
226  void set_resolved_klasses(Array<Klass*>* rk)  { _resolved_klasses = rk; }
227  Array<Klass*>* resolved_klasses() const       { return _resolved_klasses; }
228  void allocate_resolved_klasses(ClassLoaderData* loader_data, int num_klasses, TRAPS);
229  void initialize_unresolved_klasses(ClassLoaderData* loader_data, TRAPS);
230
231  // Invokedynamic indexes.
232  // They must look completely different from normal indexes.
233  // The main reason is that byte swapping is sometimes done on normal indexes.
234  // Finally, it is helpful for debugging to tell the two apart.
235  static bool is_invokedynamic_index(int i) { return (i < 0); }
236  static int  decode_invokedynamic_index(int i) { assert(is_invokedynamic_index(i),  ""); return ~i; }
237  static int  encode_invokedynamic_index(int i) { assert(!is_invokedynamic_index(i), ""); return ~i; }
238
239
240  // The invokedynamic points at a CP cache entry.  This entry points back
241  // at the original CP entry (CONSTANT_InvokeDynamic) and also (via f2) at an entry
242  // in the resolved_references array (which provides the appendix argument).
243  int invokedynamic_cp_cache_index(int index) const {
244    assert (is_invokedynamic_index(index), "should be a invokedynamic index");
245    int cache_index = decode_invokedynamic_index(index);
246    return cache_index;
247  }
248  ConstantPoolCacheEntry* invokedynamic_cp_cache_entry_at(int index) const {
249    // decode index that invokedynamic points to.
250    int cp_cache_index = invokedynamic_cp_cache_index(index);
251    return cache()->entry_at(cp_cache_index);
252  }
253
254  // Assembly code support
255  static int tags_offset_in_bytes()         { return offset_of(ConstantPool, _tags); }
256  static int cache_offset_in_bytes()        { return offset_of(ConstantPool, _cache); }
257  static int pool_holder_offset_in_bytes()  { return offset_of(ConstantPool, _pool_holder); }
258  static int resolved_klasses_offset_in_bytes()    { return offset_of(ConstantPool, _resolved_klasses); }
259
260  // Storing constants
261
262  // For temporary use while constructing constant pool
263  void klass_index_at_put(int which, int name_index) {
264    tag_at_put(which, JVM_CONSTANT_ClassIndex);
265    *int_at_addr(which) = name_index;
266  }
267
268  // Anonymous class support:
269  void klass_at_put(int class_index, int name_index, int resolved_klass_index, Klass* k, Symbol* name);
270  void klass_at_put(int class_index, Klass* k);
271
272  void unresolved_klass_at_put(int which, int name_index, int resolved_klass_index) {
273    release_tag_at_put(which, JVM_CONSTANT_UnresolvedClass);
274
275    assert((name_index & 0xffff0000) == 0, "must be");
276    assert((resolved_klass_index & 0xffff0000) == 0, "must be");
277    *int_at_addr(which) =
278      build_int_from_shorts((jushort)resolved_klass_index, (jushort)name_index);
279  }
280
281  void method_handle_index_at_put(int which, int ref_kind, int ref_index) {
282    tag_at_put(which, JVM_CONSTANT_MethodHandle);
283    *int_at_addr(which) = ((jint) ref_index<<16) | ref_kind;
284  }
285
286  void method_type_index_at_put(int which, int ref_index) {
287    tag_at_put(which, JVM_CONSTANT_MethodType);
288    *int_at_addr(which) = ref_index;
289  }
290
291  void invoke_dynamic_at_put(int which, int bootstrap_specifier_index, int name_and_type_index) {
292    tag_at_put(which, JVM_CONSTANT_InvokeDynamic);
293    *int_at_addr(which) = ((jint) name_and_type_index<<16) | bootstrap_specifier_index;
294  }
295
296  void unresolved_string_at_put(int which, Symbol* s) {
297    release_tag_at_put(which, JVM_CONSTANT_String);
298    slot_at_put(which, CPSlot(s));
299  }
300
301  void int_at_put(int which, jint i) {
302    tag_at_put(which, JVM_CONSTANT_Integer);
303    *int_at_addr(which) = i;
304  }
305
306  void long_at_put(int which, jlong l) {
307    tag_at_put(which, JVM_CONSTANT_Long);
308    // *long_at_addr(which) = l;
309    Bytes::put_native_u8((address)long_at_addr(which), *((u8*) &l));
310  }
311
312  void float_at_put(int which, jfloat f) {
313    tag_at_put(which, JVM_CONSTANT_Float);
314    *float_at_addr(which) = f;
315  }
316
317  void double_at_put(int which, jdouble d) {
318    tag_at_put(which, JVM_CONSTANT_Double);
319    // *double_at_addr(which) = d;
320    // u8 temp = *(u8*) &d;
321    Bytes::put_native_u8((address) double_at_addr(which), *((u8*) &d));
322  }
323
324  Symbol** symbol_at_addr(int which) const {
325    assert(is_within_bounds(which), "index out of bounds");
326    return (Symbol**) &base()[which];
327  }
328
329  void symbol_at_put(int which, Symbol* s) {
330    assert(s->refcount() != 0, "should have nonzero refcount");
331    tag_at_put(which, JVM_CONSTANT_Utf8);
332    *symbol_at_addr(which) = s;
333  }
334
335  void string_at_put(int which, int obj_index, oop str);
336
337  // For temporary use while constructing constant pool
338  void string_index_at_put(int which, int string_index) {
339    tag_at_put(which, JVM_CONSTANT_StringIndex);
340    *int_at_addr(which) = string_index;
341  }
342
343  void field_at_put(int which, int class_index, int name_and_type_index) {
344    tag_at_put(which, JVM_CONSTANT_Fieldref);
345    *int_at_addr(which) = ((jint) name_and_type_index<<16) | class_index;
346  }
347
348  void method_at_put(int which, int class_index, int name_and_type_index) {
349    tag_at_put(which, JVM_CONSTANT_Methodref);
350    *int_at_addr(which) = ((jint) name_and_type_index<<16) | class_index;
351  }
352
353  void interface_method_at_put(int which, int class_index, int name_and_type_index) {
354    tag_at_put(which, JVM_CONSTANT_InterfaceMethodref);
355    *int_at_addr(which) = ((jint) name_and_type_index<<16) | class_index;  // Not so nice
356  }
357
358  void name_and_type_at_put(int which, int name_index, int signature_index) {
359    tag_at_put(which, JVM_CONSTANT_NameAndType);
360    *int_at_addr(which) = ((jint) signature_index<<16) | name_index;  // Not so nice
361  }
362
363  // Tag query
364
365  constantTag tag_at(int which) const { return (constantTag)tags()->at_acquire(which); }
366
367  // Fetching constants
368
369  Klass* klass_at(int which, TRAPS) {
370    constantPoolHandle h_this(THREAD, this);
371    return klass_at_impl(h_this, which, true, THREAD);
372  }
373
374  // Version of klass_at that doesn't save the resolution error, called during deopt
375  Klass* klass_at_ignore_error(int which, TRAPS) {
376    constantPoolHandle h_this(THREAD, this);
377    return klass_at_impl(h_this, which, false, THREAD);
378  }
379
380  CPKlassSlot klass_slot_at(int which) const {
381    assert(tag_at(which).is_unresolved_klass() || tag_at(which).is_klass(),
382           "Corrupted constant pool");
383    int value = *int_at_addr(which);
384    int name_index = extract_high_short_from_int(value);
385    int resolved_klass_index = extract_low_short_from_int(value);
386    return CPKlassSlot(name_index, resolved_klass_index);
387  }
388
389  Symbol* klass_name_at(int which) const;  // Returns the name, w/o resolving.
390  int klass_name_index_at(int which) const {
391    return klass_slot_at(which).name_index();
392  }
393
394  Klass* resolved_klass_at(int which) const {  // Used by Compiler
395    guarantee(tag_at(which).is_klass(), "Corrupted constant pool");
396    // Must do an acquire here in case another thread resolved the klass
397    // behind our back, lest we later load stale values thru the oop.
398    CPKlassSlot kslot = klass_slot_at(which);
399    assert(tag_at(kslot.name_index()).is_symbol(), "sanity");
400
401    Klass** adr = resolved_klasses()->adr_at(kslot.resolved_klass_index());
402    return (Klass*)OrderAccess::load_ptr_acquire(adr);
403  }
404
405  // RedefineClasses() API support:
406  Symbol* klass_at_noresolve(int which) { return klass_name_at(which); }
407  void temp_unresolved_klass_at_put(int which, int name_index) {
408    // Used only during constant pool merging for class redefinition. The resolved klass index
409    // will be initialized later by a call to initialize_unresolved_klasses().
410    unresolved_klass_at_put(which, name_index, CPKlassSlot::_temp_resolved_klass_index);
411  }
412
413  jint int_at(int which) {
414    assert(tag_at(which).is_int(), "Corrupted constant pool");
415    return *int_at_addr(which);
416  }
417
418  jlong long_at(int which) {
419    assert(tag_at(which).is_long(), "Corrupted constant pool");
420    // return *long_at_addr(which);
421    u8 tmp = Bytes::get_native_u8((address)&base()[which]);
422    return *((jlong*)&tmp);
423  }
424
425  jfloat float_at(int which) {
426    assert(tag_at(which).is_float(), "Corrupted constant pool");
427    return *float_at_addr(which);
428  }
429
430  jdouble double_at(int which) {
431    assert(tag_at(which).is_double(), "Corrupted constant pool");
432    u8 tmp = Bytes::get_native_u8((address)&base()[which]);
433    return *((jdouble*)&tmp);
434  }
435
436  Symbol* symbol_at(int which) const {
437    assert(tag_at(which).is_utf8(), "Corrupted constant pool");
438    return *symbol_at_addr(which);
439  }
440
441  oop string_at(int which, int obj_index, TRAPS) {
442    constantPoolHandle h_this(THREAD, this);
443    return string_at_impl(h_this, which, obj_index, THREAD);
444  }
445  oop string_at(int which, TRAPS) {
446    int obj_index = cp_to_object_index(which);
447    return string_at(which, obj_index, THREAD);
448  }
449
450  // Version that can be used before string oop array is created.
451  oop uncached_string_at(int which, TRAPS);
452
453  // A "pseudo-string" is an non-string oop that has found its way into
454  // a String entry.
455  // This can happen if the user patches a live
456  // object into a CONSTANT_String entry of an anonymous class.
457  // Method oops internally created for method handles may also
458  // use pseudo-strings to link themselves to related metaobjects.
459
460  bool is_pseudo_string_at(int which) {
461    assert(tag_at(which).is_string(), "Corrupted constant pool");
462    return slot_at(which).is_pseudo_string();
463  }
464
465  oop pseudo_string_at(int which, int obj_index) {
466    assert(is_pseudo_string_at(which), "must be a pseudo-string");
467    oop s = resolved_references()->obj_at(obj_index);
468    return s;
469  }
470
471  oop pseudo_string_at(int which) {
472    assert(is_pseudo_string_at(which), "must be a pseudo-string");
473    int obj_index = cp_to_object_index(which);
474    oop s = resolved_references()->obj_at(obj_index);
475    return s;
476  }
477
478  void pseudo_string_at_put(int which, int obj_index, oop x) {
479    assert(tag_at(which).is_string(), "Corrupted constant pool");
480    Symbol* sym = unresolved_string_at(which);
481    slot_at_put(which, CPSlot(sym, CPSlot::_pseudo_bit));
482    string_at_put(which, obj_index, x);    // this works just fine
483  }
484
485  // only called when we are sure a string entry is already resolved (via an
486  // earlier string_at call.
487  oop resolved_string_at(int which) {
488    assert(tag_at(which).is_string(), "Corrupted constant pool");
489    // Must do an acquire here in case another thread resolved the klass
490    // behind our back, lest we later load stale values thru the oop.
491    // we might want a volatile_obj_at in ObjArrayKlass.
492    int obj_index = cp_to_object_index(which);
493    return resolved_references()->obj_at(obj_index);
494  }
495
496  Symbol* unresolved_string_at(int which) {
497    assert(tag_at(which).is_string(), "Corrupted constant pool");
498    Symbol* sym = slot_at(which).get_symbol();
499    return sym;
500  }
501
502  // Returns an UTF8 for a CONSTANT_String entry at a given index.
503  // UTF8 char* representation was chosen to avoid conversion of
504  // java_lang_Strings at resolved entries into Symbol*s
505  // or vice versa.
506  char* string_at_noresolve(int which);
507
508  jint name_and_type_at(int which) {
509    assert(tag_at(which).is_name_and_type(), "Corrupted constant pool");
510    return *int_at_addr(which);
511  }
512
513  int method_handle_ref_kind_at(int which) {
514    assert(tag_at(which).is_method_handle() ||
515           tag_at(which).is_method_handle_in_error(), "Corrupted constant pool");
516    return extract_low_short_from_int(*int_at_addr(which));  // mask out unwanted ref_index bits
517  }
518  int method_handle_index_at(int which) {
519    assert(tag_at(which).is_method_handle() ||
520           tag_at(which).is_method_handle_in_error(), "Corrupted constant pool");
521    return extract_high_short_from_int(*int_at_addr(which));  // shift out unwanted ref_kind bits
522  }
523  int method_type_index_at(int which) {
524    assert(tag_at(which).is_method_type() ||
525           tag_at(which).is_method_type_in_error(), "Corrupted constant pool");
526    return *int_at_addr(which);
527  }
528
529  // Derived queries:
530  Symbol* method_handle_name_ref_at(int which) {
531    int member = method_handle_index_at(which);
532    return impl_name_ref_at(member, true);
533  }
534  Symbol* method_handle_signature_ref_at(int which) {
535    int member = method_handle_index_at(which);
536    return impl_signature_ref_at(member, true);
537  }
538  int method_handle_klass_index_at(int which) {
539    int member = method_handle_index_at(which);
540    return impl_klass_ref_index_at(member, true);
541  }
542  Symbol* method_type_signature_at(int which) {
543    int sym = method_type_index_at(which);
544    return symbol_at(sym);
545  }
546
547  int invoke_dynamic_name_and_type_ref_index_at(int which) {
548    assert(tag_at(which).is_invoke_dynamic(), "Corrupted constant pool");
549    return extract_high_short_from_int(*int_at_addr(which));
550  }
551  int invoke_dynamic_bootstrap_specifier_index(int which) {
552    assert(tag_at(which).value() == JVM_CONSTANT_InvokeDynamic, "Corrupted constant pool");
553    return extract_low_short_from_int(*int_at_addr(which));
554  }
555  int invoke_dynamic_operand_base(int which) {
556    int bootstrap_specifier_index = invoke_dynamic_bootstrap_specifier_index(which);
557    return operand_offset_at(operands(), bootstrap_specifier_index);
558  }
559  // The first part of the operands array consists of an index into the second part.
560  // Extract a 32-bit index value from the first part.
561  static int operand_offset_at(Array<u2>* operands, int bootstrap_specifier_index) {
562    int n = (bootstrap_specifier_index * 2);
563    assert(n >= 0 && n+2 <= operands->length(), "oob");
564    // The first 32-bit index points to the beginning of the second part
565    // of the operands array.  Make sure this index is in the first part.
566    DEBUG_ONLY(int second_part = build_int_from_shorts(operands->at(0),
567                                                       operands->at(1)));
568    assert(second_part == 0 || n+2 <= second_part, "oob (2)");
569    int offset = build_int_from_shorts(operands->at(n+0),
570                                       operands->at(n+1));
571    // The offset itself must point into the second part of the array.
572    assert(offset == 0 || offset >= second_part && offset <= operands->length(), "oob (3)");
573    return offset;
574  }
575  static void operand_offset_at_put(Array<u2>* operands, int bootstrap_specifier_index, int offset) {
576    int n = bootstrap_specifier_index * 2;
577    assert(n >= 0 && n+2 <= operands->length(), "oob");
578    operands->at_put(n+0, extract_low_short_from_int(offset));
579    operands->at_put(n+1, extract_high_short_from_int(offset));
580  }
581  static int operand_array_length(Array<u2>* operands) {
582    if (operands == NULL || operands->length() == 0)  return 0;
583    int second_part = operand_offset_at(operands, 0);
584    return (second_part / 2);
585  }
586
587#ifdef ASSERT
588  // operand tuples fit together exactly, end to end
589  static int operand_limit_at(Array<u2>* operands, int bootstrap_specifier_index) {
590    int nextidx = bootstrap_specifier_index + 1;
591    if (nextidx == operand_array_length(operands))
592      return operands->length();
593    else
594      return operand_offset_at(operands, nextidx);
595  }
596  int invoke_dynamic_operand_limit(int which) {
597    int bootstrap_specifier_index = invoke_dynamic_bootstrap_specifier_index(which);
598    return operand_limit_at(operands(), bootstrap_specifier_index);
599  }
600#endif //ASSERT
601
602  // layout of InvokeDynamic bootstrap method specifier (in second part of operands array):
603  enum {
604         _indy_bsm_offset  = 0,  // CONSTANT_MethodHandle bsm
605         _indy_argc_offset = 1,  // u2 argc
606         _indy_argv_offset = 2   // u2 argv[argc]
607  };
608
609  // These functions are used in RedefineClasses for CP merge
610
611  int operand_offset_at(int bootstrap_specifier_index) {
612    assert(0 <= bootstrap_specifier_index &&
613           bootstrap_specifier_index < operand_array_length(operands()),
614           "Corrupted CP operands");
615    return operand_offset_at(operands(), bootstrap_specifier_index);
616  }
617  int operand_bootstrap_method_ref_index_at(int bootstrap_specifier_index) {
618    int offset = operand_offset_at(bootstrap_specifier_index);
619    return operands()->at(offset + _indy_bsm_offset);
620  }
621  int operand_argument_count_at(int bootstrap_specifier_index) {
622    int offset = operand_offset_at(bootstrap_specifier_index);
623    int argc = operands()->at(offset + _indy_argc_offset);
624    return argc;
625  }
626  int operand_argument_index_at(int bootstrap_specifier_index, int j) {
627    int offset = operand_offset_at(bootstrap_specifier_index);
628    return operands()->at(offset + _indy_argv_offset + j);
629  }
630  int operand_next_offset_at(int bootstrap_specifier_index) {
631    int offset = operand_offset_at(bootstrap_specifier_index) + _indy_argv_offset
632                   + operand_argument_count_at(bootstrap_specifier_index);
633    return offset;
634  }
635  // Compare a bootsrap specifier in the operands arrays
636  bool compare_operand_to(int bootstrap_specifier_index1, const constantPoolHandle& cp2,
637                          int bootstrap_specifier_index2, TRAPS);
638  // Find a bootsrap specifier in the operands array
639  int find_matching_operand(int bootstrap_specifier_index, const constantPoolHandle& search_cp,
640                            int operands_cur_len, TRAPS);
641  // Resize the operands array with delta_len and delta_size
642  void resize_operands(int delta_len, int delta_size, TRAPS);
643  // Extend the operands array with the length and size of the ext_cp operands
644  void extend_operands(const constantPoolHandle& ext_cp, TRAPS);
645  // Shrink the operands array to a smaller array with new_len length
646  void shrink_operands(int new_len, TRAPS);
647
648
649  int invoke_dynamic_bootstrap_method_ref_index_at(int which) {
650    assert(tag_at(which).is_invoke_dynamic(), "Corrupted constant pool");
651    int op_base = invoke_dynamic_operand_base(which);
652    return operands()->at(op_base + _indy_bsm_offset);
653  }
654  int invoke_dynamic_argument_count_at(int which) {
655    assert(tag_at(which).is_invoke_dynamic(), "Corrupted constant pool");
656    int op_base = invoke_dynamic_operand_base(which);
657    int argc = operands()->at(op_base + _indy_argc_offset);
658    DEBUG_ONLY(int end_offset = op_base + _indy_argv_offset + argc;
659               int next_offset = invoke_dynamic_operand_limit(which));
660    assert(end_offset == next_offset, "matched ending");
661    return argc;
662  }
663  int invoke_dynamic_argument_index_at(int which, int j) {
664    int op_base = invoke_dynamic_operand_base(which);
665    DEBUG_ONLY(int argc = operands()->at(op_base + _indy_argc_offset));
666    assert((uint)j < (uint)argc, "oob");
667    return operands()->at(op_base + _indy_argv_offset + j);
668  }
669
670  // The following methods (name/signature/klass_ref_at, klass_ref_at_noresolve,
671  // name_and_type_ref_index_at) all expect to be passed indices obtained
672  // directly from the bytecode.
673  // If the indices are meant to refer to fields or methods, they are
674  // actually rewritten constant pool cache indices.
675  // The routine remap_instruction_operand_from_cache manages the adjustment
676  // of these values back to constant pool indices.
677
678  // There are also "uncached" versions which do not adjust the operand index; see below.
679
680  // FIXME: Consider renaming these with a prefix "cached_" to make the distinction clear.
681  // In a few cases (the verifier) there are uses before a cpcache has been built,
682  // which are handled by a dynamic check in remap_instruction_operand_from_cache.
683  // FIXME: Remove the dynamic check, and adjust all callers to specify the correct mode.
684
685  // Lookup for entries consisting of (klass_index, name_and_type index)
686  Klass* klass_ref_at(int which, TRAPS);
687  Symbol* klass_ref_at_noresolve(int which);
688  Symbol* name_ref_at(int which)                { return impl_name_ref_at(which, false); }
689  Symbol* signature_ref_at(int which)           { return impl_signature_ref_at(which, false); }
690
691  int klass_ref_index_at(int which)               { return impl_klass_ref_index_at(which, false); }
692  int name_and_type_ref_index_at(int which)       { return impl_name_and_type_ref_index_at(which, false); }
693
694  int remap_instruction_operand_from_cache(int operand);  // operand must be biased by CPCACHE_INDEX_TAG
695
696  constantTag tag_ref_at(int cp_cache_index)      { return impl_tag_ref_at(cp_cache_index, false); }
697
698  // Lookup for entries consisting of (name_index, signature_index)
699  int name_ref_index_at(int which_nt);            // ==  low-order jshort of name_and_type_at(which_nt)
700  int signature_ref_index_at(int which_nt);       // == high-order jshort of name_and_type_at(which_nt)
701
702  BasicType basic_type_for_signature_at(int which) const;
703
704  // Resolve string constants (to prevent allocation during compilation)
705  void resolve_string_constants(TRAPS) {
706    constantPoolHandle h_this(THREAD, this);
707    resolve_string_constants_impl(h_this, CHECK);
708  }
709
710  // CDS support
711  void remove_unshareable_info();
712  void restore_unshareable_info(TRAPS);
713  bool resolve_class_constants(TRAPS);
714  // The ConstantPool vtable is restored by this call when the ConstantPool is
715  // in the shared archive.  See patch_klass_vtables() in metaspaceShared.cpp for
716  // all the gory details.  SA, dtrace and pstack helpers distinguish metadata
717  // by their vtable.
718  void restore_vtable() { guarantee(is_constantPool(), "vtable restored by this call"); }
719
720 private:
721  enum { _no_index_sentinel = -1, _possible_index_sentinel = -2 };
722 public:
723
724  // Resolve late bound constants.
725  oop resolve_constant_at(int index, TRAPS) {
726    constantPoolHandle h_this(THREAD, this);
727    return resolve_constant_at_impl(h_this, index, _no_index_sentinel, THREAD);
728  }
729
730  oop resolve_cached_constant_at(int cache_index, TRAPS) {
731    constantPoolHandle h_this(THREAD, this);
732    return resolve_constant_at_impl(h_this, _no_index_sentinel, cache_index, THREAD);
733  }
734
735  oop resolve_possibly_cached_constant_at(int pool_index, TRAPS) {
736    constantPoolHandle h_this(THREAD, this);
737    return resolve_constant_at_impl(h_this, pool_index, _possible_index_sentinel, THREAD);
738  }
739
740  oop resolve_bootstrap_specifier_at(int index, TRAPS) {
741    constantPoolHandle h_this(THREAD, this);
742    return resolve_bootstrap_specifier_at_impl(h_this, index, THREAD);
743  }
744
745  // Klass name matches name at offset
746  bool klass_name_at_matches(const InstanceKlass* k, int which);
747
748  // Sizing
749  int length() const                   { return _length; }
750  void set_length(int length)          { _length = length; }
751
752  // Tells whether index is within bounds.
753  bool is_within_bounds(int index) const {
754    return 0 <= index && index < length();
755  }
756
757  // Sizing (in words)
758  static int header_size()             {
759    return align_size_up(sizeof(ConstantPool), wordSize) / wordSize;
760  }
761  static int size(int length)          { return align_metadata_size(header_size() + length); }
762  int size() const                     { return size(length()); }
763#if INCLUDE_SERVICES
764  void collect_statistics(KlassSizeStats *sz) const;
765#endif
766
767  friend class ClassFileParser;
768  friend class SystemDictionary;
769
770  // Used by CDS. These classes need to access the private ConstantPool() constructor.
771  template <class T> friend class CppVtableTesterA;
772  template <class T> friend class CppVtableTesterB;
773  template <class T> friend class CppVtableCloner;
774
775  // Used by compiler to prevent classloading.
776  static Method*          method_at_if_loaded      (const constantPoolHandle& this_cp, int which);
777  static bool       has_appendix_at_if_loaded      (const constantPoolHandle& this_cp, int which);
778  static oop            appendix_at_if_loaded      (const constantPoolHandle& this_cp, int which);
779  static bool    has_method_type_at_if_loaded      (const constantPoolHandle& this_cp, int which);
780  static oop         method_type_at_if_loaded      (const constantPoolHandle& this_cp, int which);
781  static Klass*            klass_at_if_loaded      (const constantPoolHandle& this_cp, int which);
782  static Klass*        klass_ref_at_if_loaded      (const constantPoolHandle& this_cp, int which);
783
784  // Routines currently used for annotations (only called by jvm.cpp) but which might be used in the
785  // future by other Java code. These take constant pool indices rather than
786  // constant pool cache indices as do the peer methods above.
787  Symbol* uncached_klass_ref_at_noresolve(int which);
788  Symbol* uncached_name_ref_at(int which)                 { return impl_name_ref_at(which, true); }
789  Symbol* uncached_signature_ref_at(int which)            { return impl_signature_ref_at(which, true); }
790  int       uncached_klass_ref_index_at(int which)          { return impl_klass_ref_index_at(which, true); }
791  int       uncached_name_and_type_ref_index_at(int which)  { return impl_name_and_type_ref_index_at(which, true); }
792
793  // Sharing
794  int pre_resolve_shared_klasses(TRAPS);
795
796  // Debugging
797  const char* printable_name_at(int which) PRODUCT_RETURN0;
798
799#ifdef ASSERT
800  enum { CPCACHE_INDEX_TAG = 0x10000 };  // helps keep CP cache indices distinct from CP indices
801#else
802  enum { CPCACHE_INDEX_TAG = 0 };        // in product mode, this zero value is a no-op
803#endif //ASSERT
804
805  static int decode_cpcache_index(int raw_index, bool invokedynamic_ok = false) {
806    if (invokedynamic_ok && is_invokedynamic_index(raw_index))
807      return decode_invokedynamic_index(raw_index);
808    else
809      return raw_index - CPCACHE_INDEX_TAG;
810  }
811
812 private:
813
814  void set_resolved_references(jobject s) { _cache->set_resolved_references(s); }
815  Array<u2>* reference_map() const        {  return (_cache == NULL) ? NULL :  _cache->reference_map(); }
816  void set_reference_map(Array<u2>* o)    { _cache->set_reference_map(o); }
817
818  // patch JSR 292 resolved references after the class is linked.
819  void patch_resolved_references(GrowableArray<Handle>* cp_patches);
820
821  Symbol* impl_name_ref_at(int which, bool uncached);
822  Symbol* impl_signature_ref_at(int which, bool uncached);
823  int       impl_klass_ref_index_at(int which, bool uncached);
824  int       impl_name_and_type_ref_index_at(int which, bool uncached);
825  constantTag impl_tag_ref_at(int which, bool uncached);
826
827  // Used while constructing constant pool (only by ClassFileParser)
828  jint klass_index_at(int which) {
829    assert(tag_at(which).is_klass_index(), "Corrupted constant pool");
830    return *int_at_addr(which);
831  }
832
833  jint string_index_at(int which) {
834    assert(tag_at(which).is_string_index(), "Corrupted constant pool");
835    return *int_at_addr(which);
836  }
837
838  // Performs the LinkResolver checks
839  static void verify_constant_pool_resolve(const constantPoolHandle& this_cp, Klass* klass, TRAPS);
840
841  // Implementation of methods that needs an exposed 'this' pointer, in order to
842  // handle GC while executing the method
843  static Klass* klass_at_impl(const constantPoolHandle& this_cp, int which,
844                              bool save_resolution_error, TRAPS);
845  static oop string_at_impl(const constantPoolHandle& this_cp, int which, int obj_index, TRAPS);
846
847  static void trace_class_resolution(const constantPoolHandle& this_cp, Klass* k);
848
849  // Resolve string constants (to prevent allocation during compilation)
850  static void resolve_string_constants_impl(const constantPoolHandle& this_cp, TRAPS);
851
852  static oop resolve_constant_at_impl(const constantPoolHandle& this_cp, int index, int cache_index, TRAPS);
853  static oop resolve_bootstrap_specifier_at_impl(const constantPoolHandle& this_cp, int index, TRAPS);
854
855  // Exception handling
856  static void throw_resolution_error(const constantPoolHandle& this_cp, int which, TRAPS);
857  static Symbol* exception_message(const constantPoolHandle& this_cp, int which, constantTag tag, oop pending_exception);
858  static void save_and_throw_exception(const constantPoolHandle& this_cp, int which, constantTag tag, TRAPS);
859
860 public:
861  // Merging ConstantPool* support:
862  bool compare_entry_to(int index1, const constantPoolHandle& cp2, int index2, TRAPS);
863  void copy_cp_to(int start_i, int end_i, const constantPoolHandle& to_cp, int to_i, TRAPS) {
864    constantPoolHandle h_this(THREAD, this);
865    copy_cp_to_impl(h_this, start_i, end_i, to_cp, to_i, THREAD);
866  }
867  static void copy_cp_to_impl(const constantPoolHandle& from_cp, int start_i, int end_i, const constantPoolHandle& to_cp, int to_i, TRAPS);
868  static void copy_entry_to(const constantPoolHandle& from_cp, int from_i, const constantPoolHandle& to_cp, int to_i, TRAPS);
869  static void copy_operands(const constantPoolHandle& from_cp, const constantPoolHandle& to_cp, TRAPS);
870  int  find_matching_entry(int pattern_i, const constantPoolHandle& search_cp, TRAPS);
871  int  version() const                    { return _saved._version; }
872  void set_version(int version)           { _saved._version = version; }
873  void increment_and_save_version(int version) {
874    _saved._version = version >= 0 ? (version + 1) : version;  // keep overflow
875  }
876
877  void set_resolved_reference_length(int length) { _saved._resolved_reference_length = length; }
878  int  resolved_reference_length() const  { return _saved._resolved_reference_length; }
879
880  // Decrease ref counts of symbols that are in the constant pool
881  // when the holder class is unloaded
882  void unreference_symbols();
883
884  // Deallocate constant pool for RedefineClasses
885  void deallocate_contents(ClassLoaderData* loader_data);
886  void release_C_heap_structures();
887
888  // JVMTI accesss - GetConstantPool, RetransformClasses, ...
889  friend class JvmtiConstantPoolReconstituter;
890
891 private:
892  jint cpool_entry_size(jint idx);
893  jint hash_entries_to(SymbolHashMap *symmap, SymbolHashMap *classmap);
894
895  // Copy cpool bytes into byte array.
896  // Returns:
897  //  int > 0, count of the raw cpool bytes that have been copied
898  //        0, OutOfMemory error
899  //       -1, Internal error
900  int  copy_cpool_bytes(int cpool_size,
901                        SymbolHashMap* tbl,
902                        unsigned char *bytes);
903
904 public:
905  // Verify
906  void verify_on(outputStream* st);
907
908  // Printing
909  void print_on(outputStream* st) const;
910  void print_value_on(outputStream* st) const;
911  void print_entry_on(int index, outputStream* st);
912
913  const char* internal_name() const { return "{constant pool}"; }
914
915#ifndef PRODUCT
916  // Compile the world support
917  static void preload_and_initialize_all_classes(ConstantPool* constant_pool, TRAPS);
918#endif
919};
920
921class SymbolHashMapEntry : public CHeapObj<mtSymbol> {
922 private:
923  unsigned int        _hash;   // 32-bit hash for item
924  SymbolHashMapEntry* _next;   // Next element in the linked list for this bucket
925  Symbol*             _symbol; // 1-st part of the mapping: symbol => value
926  u2                  _value;  // 2-nd part of the mapping: symbol => value
927
928 public:
929  unsigned   int hash() const             { return _hash;   }
930  void       set_hash(unsigned int hash)  { _hash = hash;   }
931
932  SymbolHashMapEntry* next() const        { return _next;   }
933  void set_next(SymbolHashMapEntry* next) { _next = next;   }
934
935  Symbol*    symbol() const               { return _symbol; }
936  void       set_symbol(Symbol* sym)      { _symbol = sym;  }
937
938  u2         value() const                {  return _value; }
939  void       set_value(u2 value)          { _value = value; }
940
941  SymbolHashMapEntry(unsigned int hash, Symbol* symbol, u2 value)
942    : _hash(hash), _symbol(symbol), _value(value), _next(NULL) {}
943
944}; // End SymbolHashMapEntry class
945
946
947class SymbolHashMapBucket : public CHeapObj<mtSymbol> {
948
949private:
950  SymbolHashMapEntry*    _entry;
951
952public:
953  SymbolHashMapEntry* entry() const         {  return _entry; }
954  void set_entry(SymbolHashMapEntry* entry) { _entry = entry; }
955  void clear()                              { _entry = NULL;  }
956
957}; // End SymbolHashMapBucket class
958
959
960class SymbolHashMap: public CHeapObj<mtSymbol> {
961
962 private:
963  // Default number of entries in the table
964  enum SymbolHashMap_Constants {
965    _Def_HashMap_Size = 256
966  };
967
968  int                   _table_size;
969  SymbolHashMapBucket*  _buckets;
970
971  void initialize_table(int table_size) {
972    _table_size = table_size;
973    _buckets = NEW_C_HEAP_ARRAY(SymbolHashMapBucket, table_size, mtSymbol);
974    for (int index = 0; index < table_size; index++) {
975      _buckets[index].clear();
976    }
977  }
978
979 public:
980
981  int table_size() const        { return _table_size; }
982
983  SymbolHashMap()               { initialize_table(_Def_HashMap_Size); }
984  SymbolHashMap(int table_size) { initialize_table(table_size); }
985
986  // hash P(31) from Kernighan & Ritchie
987  static unsigned int compute_hash(const char* str, int len) {
988    unsigned int hash = 0;
989    while (len-- > 0) {
990      hash = 31*hash + (unsigned) *str;
991      str++;
992    }
993    return hash;
994  }
995
996  SymbolHashMapEntry* bucket(int i) {
997    return _buckets[i].entry();
998  }
999
1000  void add_entry(Symbol* sym, u2 value);
1001  SymbolHashMapEntry* find_entry(Symbol* sym);
1002
1003  u2 symbol_to_value(Symbol* sym) {
1004    SymbolHashMapEntry *entry = find_entry(sym);
1005    return (entry == NULL) ? 0 : entry->value();
1006  }
1007
1008  ~SymbolHashMap() {
1009    SymbolHashMapEntry* next;
1010    for (int i = 0; i < _table_size; i++) {
1011      for (SymbolHashMapEntry* cur = bucket(i); cur != NULL; cur = next) {
1012        next = cur->next();
1013        delete(cur);
1014      }
1015    }
1016    delete _buckets;
1017  }
1018}; // End SymbolHashMap class
1019
1020#endif // SHARE_VM_OOPS_CONSTANTPOOLOOP_HPP
1021