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