constantPool.hpp revision 7418:ef7449e07592
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, true, THREAD);
340  }
341
342  // Version of klass_at that doesn't save the resolution error, called during deopt
343  Klass* klass_at_ignore_error(int which, TRAPS) {
344    constantPoolHandle h_this(THREAD, this);
345    return klass_at_impl(h_this, which, false, THREAD);
346  }
347
348  Symbol* klass_name_at(int which);  // Returns the name, w/o resolving.
349
350  Klass* resolved_klass_at(int which) const {  // Used by Compiler
351    guarantee(tag_at(which).is_klass(), "Corrupted constant pool");
352    // Must do an acquire here in case another thread resolved the klass
353    // behind our back, lest we later load stale values thru the oop.
354    return CPSlot((Klass*)OrderAccess::load_ptr_acquire(obj_at_addr_raw(which))).get_klass();
355  }
356
357  // RedefineClasses() API support:
358  Symbol* klass_at_noresolve(int which) { return klass_name_at(which); }
359
360  jint int_at(int which) {
361    assert(tag_at(which).is_int(), "Corrupted constant pool");
362    return *int_at_addr(which);
363  }
364
365  jlong long_at(int which) {
366    assert(tag_at(which).is_long(), "Corrupted constant pool");
367    // return *long_at_addr(which);
368    u8 tmp = Bytes::get_native_u8((address)&base()[which]);
369    return *((jlong*)&tmp);
370  }
371
372  jfloat float_at(int which) {
373    assert(tag_at(which).is_float(), "Corrupted constant pool");
374    return *float_at_addr(which);
375  }
376
377  jdouble double_at(int which) {
378    assert(tag_at(which).is_double(), "Corrupted constant pool");
379    u8 tmp = Bytes::get_native_u8((address)&base()[which]);
380    return *((jdouble*)&tmp);
381  }
382
383  Symbol* symbol_at(int which) {
384    assert(tag_at(which).is_utf8(), "Corrupted constant pool");
385    return *symbol_at_addr(which);
386  }
387
388  oop string_at(int which, int obj_index, TRAPS) {
389    constantPoolHandle h_this(THREAD, this);
390    return string_at_impl(h_this, which, obj_index, THREAD);
391  }
392  oop string_at(int which, TRAPS) {
393    int obj_index = cp_to_object_index(which);
394    return string_at(which, obj_index, THREAD);
395  }
396
397  // Version that can be used before string oop array is created.
398  oop uncached_string_at(int which, TRAPS);
399
400  // A "pseudo-string" is an non-string oop that has found its way into
401  // a String entry.
402  // This can happen if the user patches a live
403  // object into a CONSTANT_String entry of an anonymous class.
404  // Method oops internally created for method handles may also
405  // use pseudo-strings to link themselves to related metaobjects.
406
407  bool is_pseudo_string_at(int which) {
408    // A pseudo string is a string that doesn't have a symbol in the cpSlot
409    return unresolved_string_at(which) == NULL;
410  }
411
412  oop pseudo_string_at(int which, int obj_index) {
413    assert(tag_at(which).is_string(), "Corrupted constant pool");
414    assert(unresolved_string_at(which) == NULL, "shouldn't have symbol");
415    oop s = resolved_references()->obj_at(obj_index);
416    return s;
417  }
418
419  oop pseudo_string_at(int which) {
420    assert(tag_at(which).is_string(), "Corrupted constant pool");
421    assert(unresolved_string_at(which) == NULL, "shouldn't have symbol");
422    int obj_index = cp_to_object_index(which);
423    oop s = resolved_references()->obj_at(obj_index);
424    return s;
425  }
426
427  void pseudo_string_at_put(int which, int obj_index, oop x) {
428    assert(tag_at(which).is_string(), "Corrupted constant pool");
429    unresolved_string_at_put(which, NULL); // indicates patched string
430    string_at_put(which, obj_index, x);    // this works just fine
431  }
432
433  // only called when we are sure a string entry is already resolved (via an
434  // earlier string_at call.
435  oop resolved_string_at(int which) {
436    assert(tag_at(which).is_string(), "Corrupted constant pool");
437    // Must do an acquire here in case another thread resolved the klass
438    // behind our back, lest we later load stale values thru the oop.
439    // we might want a volatile_obj_at in ObjArrayKlass.
440    int obj_index = cp_to_object_index(which);
441    return resolved_references()->obj_at(obj_index);
442  }
443
444  Symbol* unresolved_string_at(int which) {
445    assert(tag_at(which).is_string(), "Corrupted constant pool");
446    Symbol* s = *symbol_at_addr(which);
447    return s;
448  }
449
450  // Returns an UTF8 for a CONSTANT_String entry at a given index.
451  // UTF8 char* representation was chosen to avoid conversion of
452  // java_lang_Strings at resolved entries into Symbol*s
453  // or vice versa.
454  // Caller is responsible for checking for pseudo-strings.
455  char* string_at_noresolve(int which);
456
457  jint name_and_type_at(int which) {
458    assert(tag_at(which).is_name_and_type(), "Corrupted constant pool");
459    return *int_at_addr(which);
460  }
461
462 private:
463  int method_handle_ref_kind_at(int which, bool error_ok) {
464    assert(tag_at(which).is_method_handle() ||
465           (error_ok && tag_at(which).is_method_handle_in_error()), "Corrupted constant pool");
466    return extract_low_short_from_int(*int_at_addr(which));  // mask out unwanted ref_index bits
467  }
468  int method_handle_index_at(int which, bool error_ok) {
469    assert(tag_at(which).is_method_handle() ||
470           (error_ok && tag_at(which).is_method_handle_in_error()), "Corrupted constant pool");
471    return extract_high_short_from_int(*int_at_addr(which));  // shift out unwanted ref_kind bits
472  }
473  int method_type_index_at(int which, bool error_ok) {
474    assert(tag_at(which).is_method_type() ||
475           (error_ok && tag_at(which).is_method_type_in_error()), "Corrupted constant pool");
476    return *int_at_addr(which);
477  }
478 public:
479  int method_handle_ref_kind_at(int which) {
480    return method_handle_ref_kind_at(which, false);
481  }
482  int method_handle_ref_kind_at_error_ok(int which) {
483    return method_handle_ref_kind_at(which, true);
484  }
485  int method_handle_index_at(int which) {
486    return method_handle_index_at(which, false);
487  }
488  int method_handle_index_at_error_ok(int which) {
489    return method_handle_index_at(which, true);
490  }
491  int method_type_index_at(int which) {
492    return method_type_index_at(which, false);
493  }
494  int method_type_index_at_error_ok(int which) {
495    return method_type_index_at(which, true);
496  }
497
498  // Derived queries:
499  Symbol* method_handle_name_ref_at(int which) {
500    int member = method_handle_index_at(which);
501    return impl_name_ref_at(member, true);
502  }
503  Symbol* method_handle_signature_ref_at(int which) {
504    int member = method_handle_index_at(which);
505    return impl_signature_ref_at(member, true);
506  }
507  int method_handle_klass_index_at(int which) {
508    int member = method_handle_index_at(which);
509    return impl_klass_ref_index_at(member, true);
510  }
511  Symbol* method_type_signature_at(int which) {
512    int sym = method_type_index_at(which);
513    return symbol_at(sym);
514  }
515
516  int invoke_dynamic_name_and_type_ref_index_at(int which) {
517    assert(tag_at(which).is_invoke_dynamic(), "Corrupted constant pool");
518    return extract_high_short_from_int(*int_at_addr(which));
519  }
520  int invoke_dynamic_bootstrap_specifier_index(int which) {
521    assert(tag_at(which).value() == JVM_CONSTANT_InvokeDynamic, "Corrupted constant pool");
522    return extract_low_short_from_int(*int_at_addr(which));
523  }
524  int invoke_dynamic_operand_base(int which) {
525    int bootstrap_specifier_index = invoke_dynamic_bootstrap_specifier_index(which);
526    return operand_offset_at(operands(), bootstrap_specifier_index);
527  }
528  // The first part of the operands array consists of an index into the second part.
529  // Extract a 32-bit index value from the first part.
530  static int operand_offset_at(Array<u2>* operands, int bootstrap_specifier_index) {
531    int n = (bootstrap_specifier_index * 2);
532    assert(n >= 0 && n+2 <= operands->length(), "oob");
533    // The first 32-bit index points to the beginning of the second part
534    // of the operands array.  Make sure this index is in the first part.
535    DEBUG_ONLY(int second_part = build_int_from_shorts(operands->at(0),
536                                                       operands->at(1)));
537    assert(second_part == 0 || n+2 <= second_part, "oob (2)");
538    int offset = build_int_from_shorts(operands->at(n+0),
539                                       operands->at(n+1));
540    // The offset itself must point into the second part of the array.
541    assert(offset == 0 || offset >= second_part && offset <= operands->length(), "oob (3)");
542    return offset;
543  }
544  static void operand_offset_at_put(Array<u2>* operands, int bootstrap_specifier_index, int offset) {
545    int n = bootstrap_specifier_index * 2;
546    assert(n >= 0 && n+2 <= operands->length(), "oob");
547    operands->at_put(n+0, extract_low_short_from_int(offset));
548    operands->at_put(n+1, extract_high_short_from_int(offset));
549  }
550  static int operand_array_length(Array<u2>* operands) {
551    if (operands == NULL || operands->length() == 0)  return 0;
552    int second_part = operand_offset_at(operands, 0);
553    return (second_part / 2);
554  }
555
556#ifdef ASSERT
557  // operand tuples fit together exactly, end to end
558  static int operand_limit_at(Array<u2>* operands, int bootstrap_specifier_index) {
559    int nextidx = bootstrap_specifier_index + 1;
560    if (nextidx == operand_array_length(operands))
561      return operands->length();
562    else
563      return operand_offset_at(operands, nextidx);
564  }
565  int invoke_dynamic_operand_limit(int which) {
566    int bootstrap_specifier_index = invoke_dynamic_bootstrap_specifier_index(which);
567    return operand_limit_at(operands(), bootstrap_specifier_index);
568  }
569#endif //ASSERT
570
571  // layout of InvokeDynamic bootstrap method specifier (in second part of operands array):
572  enum {
573         _indy_bsm_offset  = 0,  // CONSTANT_MethodHandle bsm
574         _indy_argc_offset = 1,  // u2 argc
575         _indy_argv_offset = 2   // u2 argv[argc]
576  };
577
578  // These functions are used in RedefineClasses for CP merge
579
580  int operand_offset_at(int bootstrap_specifier_index) {
581    assert(0 <= bootstrap_specifier_index &&
582           bootstrap_specifier_index < operand_array_length(operands()),
583           "Corrupted CP operands");
584    return operand_offset_at(operands(), bootstrap_specifier_index);
585  }
586  int operand_bootstrap_method_ref_index_at(int bootstrap_specifier_index) {
587    int offset = operand_offset_at(bootstrap_specifier_index);
588    return operands()->at(offset + _indy_bsm_offset);
589  }
590  int operand_argument_count_at(int bootstrap_specifier_index) {
591    int offset = operand_offset_at(bootstrap_specifier_index);
592    int argc = operands()->at(offset + _indy_argc_offset);
593    return argc;
594  }
595  int operand_argument_index_at(int bootstrap_specifier_index, int j) {
596    int offset = operand_offset_at(bootstrap_specifier_index);
597    return operands()->at(offset + _indy_argv_offset + j);
598  }
599  int operand_next_offset_at(int bootstrap_specifier_index) {
600    int offset = operand_offset_at(bootstrap_specifier_index) + _indy_argv_offset
601                   + operand_argument_count_at(bootstrap_specifier_index);
602    return offset;
603  }
604  // Compare a bootsrap specifier in the operands arrays
605  bool compare_operand_to(int bootstrap_specifier_index1, constantPoolHandle cp2,
606                          int bootstrap_specifier_index2, TRAPS);
607  // Find a bootsrap specifier in the operands array
608  int find_matching_operand(int bootstrap_specifier_index, constantPoolHandle search_cp,
609                            int operands_cur_len, TRAPS);
610  // Resize the operands array with delta_len and delta_size
611  void resize_operands(int delta_len, int delta_size, TRAPS);
612  // Extend the operands array with the length and size of the ext_cp operands
613  void extend_operands(constantPoolHandle ext_cp, TRAPS);
614  // Shrink the operands array to a smaller array with new_len length
615  void shrink_operands(int new_len, TRAPS);
616
617
618  int invoke_dynamic_bootstrap_method_ref_index_at(int which) {
619    assert(tag_at(which).is_invoke_dynamic(), "Corrupted constant pool");
620    int op_base = invoke_dynamic_operand_base(which);
621    return operands()->at(op_base + _indy_bsm_offset);
622  }
623  int invoke_dynamic_argument_count_at(int which) {
624    assert(tag_at(which).is_invoke_dynamic(), "Corrupted constant pool");
625    int op_base = invoke_dynamic_operand_base(which);
626    int argc = operands()->at(op_base + _indy_argc_offset);
627    DEBUG_ONLY(int end_offset = op_base + _indy_argv_offset + argc;
628               int next_offset = invoke_dynamic_operand_limit(which));
629    assert(end_offset == next_offset, "matched ending");
630    return argc;
631  }
632  int invoke_dynamic_argument_index_at(int which, int j) {
633    int op_base = invoke_dynamic_operand_base(which);
634    DEBUG_ONLY(int argc = operands()->at(op_base + _indy_argc_offset));
635    assert((uint)j < (uint)argc, "oob");
636    return operands()->at(op_base + _indy_argv_offset + j);
637  }
638
639  // The following methods (name/signature/klass_ref_at, klass_ref_at_noresolve,
640  // name_and_type_ref_index_at) all expect to be passed indices obtained
641  // directly from the bytecode.
642  // If the indices are meant to refer to fields or methods, they are
643  // actually rewritten constant pool cache indices.
644  // The routine remap_instruction_operand_from_cache manages the adjustment
645  // of these values back to constant pool indices.
646
647  // There are also "uncached" versions which do not adjust the operand index; see below.
648
649  // FIXME: Consider renaming these with a prefix "cached_" to make the distinction clear.
650  // In a few cases (the verifier) there are uses before a cpcache has been built,
651  // which are handled by a dynamic check in remap_instruction_operand_from_cache.
652  // FIXME: Remove the dynamic check, and adjust all callers to specify the correct mode.
653
654  // Lookup for entries consisting of (klass_index, name_and_type index)
655  Klass* klass_ref_at(int which, TRAPS);
656  Symbol* klass_ref_at_noresolve(int which);
657  Symbol* name_ref_at(int which)                { return impl_name_ref_at(which, false); }
658  Symbol* signature_ref_at(int which)           { return impl_signature_ref_at(which, false); }
659
660  int klass_ref_index_at(int which)               { return impl_klass_ref_index_at(which, false); }
661  int name_and_type_ref_index_at(int which)       { return impl_name_and_type_ref_index_at(which, false); }
662
663  // Lookup for entries consisting of (name_index, signature_index)
664  int name_ref_index_at(int which_nt);            // ==  low-order jshort of name_and_type_at(which_nt)
665  int signature_ref_index_at(int which_nt);       // == high-order jshort of name_and_type_at(which_nt)
666
667  BasicType basic_type_for_signature_at(int which);
668
669  // Resolve string constants (to prevent allocation during compilation)
670  void resolve_string_constants(TRAPS) {
671    constantPoolHandle h_this(THREAD, this);
672    resolve_string_constants_impl(h_this, CHECK);
673  }
674
675  // CDS support
676  void remove_unshareable_info();
677  void restore_unshareable_info(TRAPS);
678  bool resolve_class_constants(TRAPS);
679  // The ConstantPool vtable is restored by this call when the ConstantPool is
680  // in the shared archive.  See patch_klass_vtables() in metaspaceShared.cpp for
681  // all the gory details.  SA, dtrace and pstack helpers distinguish metadata
682  // by their vtable.
683  void restore_vtable() { guarantee(is_constantPool(), "vtable restored by this call"); }
684
685 private:
686  enum { _no_index_sentinel = -1, _possible_index_sentinel = -2 };
687 public:
688
689  // Resolve late bound constants.
690  oop resolve_constant_at(int index, TRAPS) {
691    constantPoolHandle h_this(THREAD, this);
692    return resolve_constant_at_impl(h_this, index, _no_index_sentinel, THREAD);
693  }
694
695  oop resolve_cached_constant_at(int cache_index, TRAPS) {
696    constantPoolHandle h_this(THREAD, this);
697    return resolve_constant_at_impl(h_this, _no_index_sentinel, cache_index, THREAD);
698  }
699
700  oop resolve_possibly_cached_constant_at(int pool_index, TRAPS) {
701    constantPoolHandle h_this(THREAD, this);
702    return resolve_constant_at_impl(h_this, pool_index, _possible_index_sentinel, THREAD);
703  }
704
705  oop resolve_bootstrap_specifier_at(int index, TRAPS) {
706    constantPoolHandle h_this(THREAD, this);
707    return resolve_bootstrap_specifier_at_impl(h_this, index, THREAD);
708  }
709
710  // Klass name matches name at offset
711  bool klass_name_at_matches(instanceKlassHandle k, int which);
712
713  // Sizing
714  int length() const                   { return _length; }
715  void set_length(int length)          { _length = length; }
716
717  // Tells whether index is within bounds.
718  bool is_within_bounds(int index) const {
719    return 0 <= index && index < length();
720  }
721
722  // Sizing (in words)
723  static int header_size()             { return sizeof(ConstantPool)/HeapWordSize; }
724  static int size(int length)          { return align_object_size(header_size() + length); }
725  int size() const                     { return size(length()); }
726#if INCLUDE_SERVICES
727  void collect_statistics(KlassSizeStats *sz) const;
728#endif
729
730  friend class ClassFileParser;
731  friend class SystemDictionary;
732
733  // Used by compiler to prevent classloading.
734  static Method*          method_at_if_loaded      (constantPoolHandle this_cp, int which);
735  static bool       has_appendix_at_if_loaded      (constantPoolHandle this_cp, int which);
736  static oop            appendix_at_if_loaded      (constantPoolHandle this_cp, int which);
737  static bool    has_method_type_at_if_loaded      (constantPoolHandle this_cp, int which);
738  static oop         method_type_at_if_loaded      (constantPoolHandle this_cp, int which);
739  static Klass*            klass_at_if_loaded      (constantPoolHandle this_cp, int which);
740  static Klass*        klass_ref_at_if_loaded      (constantPoolHandle this_cp, int which);
741
742  // Routines currently used for annotations (only called by jvm.cpp) but which might be used in the
743  // future by other Java code. These take constant pool indices rather than
744  // constant pool cache indices as do the peer methods above.
745  Symbol* uncached_klass_ref_at_noresolve(int which);
746  Symbol* uncached_name_ref_at(int which)                 { return impl_name_ref_at(which, true); }
747  Symbol* uncached_signature_ref_at(int which)            { return impl_signature_ref_at(which, true); }
748  int       uncached_klass_ref_index_at(int which)          { return impl_klass_ref_index_at(which, true); }
749  int       uncached_name_and_type_ref_index_at(int which)  { return impl_name_and_type_ref_index_at(which, true); }
750
751  // Sharing
752  int pre_resolve_shared_klasses(TRAPS);
753
754  // Debugging
755  const char* printable_name_at(int which) PRODUCT_RETURN0;
756
757#ifdef ASSERT
758  enum { CPCACHE_INDEX_TAG = 0x10000 };  // helps keep CP cache indices distinct from CP indices
759#else
760  enum { CPCACHE_INDEX_TAG = 0 };        // in product mode, this zero value is a no-op
761#endif //ASSERT
762
763  static int decode_cpcache_index(int raw_index, bool invokedynamic_ok = false) {
764    if (invokedynamic_ok && is_invokedynamic_index(raw_index))
765      return decode_invokedynamic_index(raw_index);
766    else
767      return raw_index - CPCACHE_INDEX_TAG;
768  }
769
770 private:
771
772  void set_resolved_references(jobject s) { _resolved_references = s; }
773  Array<u2>* reference_map() const        { return _reference_map; }
774  void set_reference_map(Array<u2>* o)    { _reference_map = o; }
775
776  // patch JSR 292 resolved references after the class is linked.
777  void patch_resolved_references(GrowableArray<Handle>* cp_patches);
778
779  Symbol* impl_name_ref_at(int which, bool uncached);
780  Symbol* impl_signature_ref_at(int which, bool uncached);
781  int       impl_klass_ref_index_at(int which, bool uncached);
782  int       impl_name_and_type_ref_index_at(int which, bool uncached);
783
784  int remap_instruction_operand_from_cache(int operand);  // operand must be biased by CPCACHE_INDEX_TAG
785
786  // Used while constructing constant pool (only by ClassFileParser)
787  jint klass_index_at(int which) {
788    assert(tag_at(which).is_klass_index(), "Corrupted constant pool");
789    return *int_at_addr(which);
790  }
791
792  jint string_index_at(int which) {
793    assert(tag_at(which).is_string_index(), "Corrupted constant pool");
794    return *int_at_addr(which);
795  }
796
797  // Performs the LinkResolver checks
798  static void verify_constant_pool_resolve(constantPoolHandle this_cp, KlassHandle klass, TRAPS);
799
800  // Implementation of methods that needs an exposed 'this' pointer, in order to
801  // handle GC while executing the method
802  static Klass* klass_at_impl(constantPoolHandle this_cp, int which,
803                              bool save_resolution_error, TRAPS);
804  static oop string_at_impl(constantPoolHandle this_cp, int which, int obj_index, TRAPS);
805
806  static void trace_class_resolution(constantPoolHandle this_cp, KlassHandle k);
807
808  // Resolve string constants (to prevent allocation during compilation)
809  static void resolve_string_constants_impl(constantPoolHandle this_cp, TRAPS);
810
811  static oop resolve_constant_at_impl(constantPoolHandle this_cp, int index, int cache_index, TRAPS);
812  static oop resolve_bootstrap_specifier_at_impl(constantPoolHandle this_cp, int index, TRAPS);
813
814  // Exception handling
815  static void throw_resolution_error(constantPoolHandle this_cp, int which, TRAPS);
816  static Symbol* exception_message(constantPoolHandle this_cp, int which, constantTag tag, oop pending_exception);
817  static void save_and_throw_exception(constantPoolHandle this_cp, int which, constantTag tag, TRAPS);
818
819 public:
820  // Merging ConstantPool* support:
821  bool compare_entry_to(int index1, constantPoolHandle cp2, int index2, TRAPS);
822  void copy_cp_to(int start_i, int end_i, constantPoolHandle to_cp, int to_i, TRAPS) {
823    constantPoolHandle h_this(THREAD, this);
824    copy_cp_to_impl(h_this, start_i, end_i, to_cp, to_i, THREAD);
825  }
826  static void copy_cp_to_impl(constantPoolHandle from_cp, int start_i, int end_i, constantPoolHandle to_cp, int to_i, TRAPS);
827  static void copy_entry_to(constantPoolHandle from_cp, int from_i, constantPoolHandle to_cp, int to_i, TRAPS);
828  static void copy_operands(constantPoolHandle from_cp, constantPoolHandle to_cp, TRAPS);
829  int  find_matching_entry(int pattern_i, constantPoolHandle search_cp, TRAPS);
830  int  version() const                    { return _saved._version; }
831  void set_version(int version)           { _saved._version = version; }
832  void increment_and_save_version(int version) {
833    _saved._version = version >= 0 ? (version + 1) : version;  // keep overflow
834  }
835
836  void set_resolved_reference_length(int length) { _saved._resolved_reference_length = length; }
837  int  resolved_reference_length() const  { return _saved._resolved_reference_length; }
838
839  // Decrease ref counts of symbols that are in the constant pool
840  // when the holder class is unloaded
841  void unreference_symbols();
842
843  // Deallocate constant pool for RedefineClasses
844  void deallocate_contents(ClassLoaderData* loader_data);
845  void release_C_heap_structures();
846
847  // JVMTI accesss - GetConstantPool, RetransformClasses, ...
848  friend class JvmtiConstantPoolReconstituter;
849
850 private:
851  jint cpool_entry_size(jint idx);
852  jint hash_entries_to(SymbolHashMap *symmap, SymbolHashMap *classmap);
853
854  // Copy cpool bytes into byte array.
855  // Returns:
856  //  int > 0, count of the raw cpool bytes that have been copied
857  //        0, OutOfMemory error
858  //       -1, Internal error
859  int  copy_cpool_bytes(int cpool_size,
860                        SymbolHashMap* tbl,
861                        unsigned char *bytes);
862
863 public:
864  // Verify
865  void verify_on(outputStream* st);
866
867  // Printing
868  void print_on(outputStream* st) const;
869  void print_value_on(outputStream* st) const;
870  void print_entry_on(int index, outputStream* st);
871
872  const char* internal_name() const { return "{constant pool}"; }
873
874#ifndef PRODUCT
875  // Compile the world support
876  static void preload_and_initialize_all_classes(ConstantPool* constant_pool, TRAPS);
877#endif
878};
879
880class SymbolHashMapEntry : public CHeapObj<mtSymbol> {
881 private:
882  unsigned int        _hash;   // 32-bit hash for item
883  SymbolHashMapEntry* _next;   // Next element in the linked list for this bucket
884  Symbol*             _symbol; // 1-st part of the mapping: symbol => value
885  u2                  _value;  // 2-nd part of the mapping: symbol => value
886
887 public:
888  unsigned   int hash() const             { return _hash;   }
889  void       set_hash(unsigned int hash)  { _hash = hash;   }
890
891  SymbolHashMapEntry* next() const        { return _next;   }
892  void set_next(SymbolHashMapEntry* next) { _next = next;   }
893
894  Symbol*    symbol() const               { return _symbol; }
895  void       set_symbol(Symbol* sym)      { _symbol = sym;  }
896
897  u2         value() const                {  return _value; }
898  void       set_value(u2 value)          { _value = value; }
899
900  SymbolHashMapEntry(unsigned int hash, Symbol* symbol, u2 value)
901    : _hash(hash), _symbol(symbol), _value(value), _next(NULL) {}
902
903}; // End SymbolHashMapEntry class
904
905
906class SymbolHashMapBucket : public CHeapObj<mtSymbol> {
907
908private:
909  SymbolHashMapEntry*    _entry;
910
911public:
912  SymbolHashMapEntry* entry() const         {  return _entry; }
913  void set_entry(SymbolHashMapEntry* entry) { _entry = entry; }
914  void clear()                              { _entry = NULL;  }
915
916}; // End SymbolHashMapBucket class
917
918
919class SymbolHashMap: public CHeapObj<mtSymbol> {
920
921 private:
922  // Default number of entries in the table
923  enum SymbolHashMap_Constants {
924    _Def_HashMap_Size = 256
925  };
926
927  int                   _table_size;
928  SymbolHashMapBucket*  _buckets;
929
930  void initialize_table(int table_size) {
931    _table_size = table_size;
932    _buckets = NEW_C_HEAP_ARRAY(SymbolHashMapBucket, table_size, mtSymbol);
933    for (int index = 0; index < table_size; index++) {
934      _buckets[index].clear();
935    }
936  }
937
938 public:
939
940  int table_size() const        { return _table_size; }
941
942  SymbolHashMap()               { initialize_table(_Def_HashMap_Size); }
943  SymbolHashMap(int table_size) { initialize_table(table_size); }
944
945  // hash P(31) from Kernighan & Ritchie
946  static unsigned int compute_hash(const char* str, int len) {
947    unsigned int hash = 0;
948    while (len-- > 0) {
949      hash = 31*hash + (unsigned) *str;
950      str++;
951    }
952    return hash;
953  }
954
955  SymbolHashMapEntry* bucket(int i) {
956    return _buckets[i].entry();
957  }
958
959  void add_entry(Symbol* sym, u2 value);
960  SymbolHashMapEntry* find_entry(Symbol* sym);
961
962  u2 symbol_to_value(Symbol* sym) {
963    SymbolHashMapEntry *entry = find_entry(sym);
964    return (entry == NULL) ? 0 : entry->value();
965  }
966
967  ~SymbolHashMap() {
968    SymbolHashMapEntry* next;
969    for (int i = 0; i < _table_size; i++) {
970      for (SymbolHashMapEntry* cur = bucket(i); cur != NULL; cur = next) {
971        next = cur->next();
972        delete(cur);
973      }
974    }
975    delete _buckets;
976  }
977}; // End SymbolHashMap class
978
979#endif // SHARE_VM_OOPS_CONSTANTPOOLOOP_HPP
980