classFileParser.cpp revision 8413:92457dfb91bd
1/*
2 * Copyright (c) 1997, 2015, 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#include "precompiled.hpp"
26#include "classfile/classFileParser.hpp"
27#include "classfile/classLoader.hpp"
28#include "classfile/classLoaderData.inline.hpp"
29#include "classfile/defaultMethods.hpp"
30#include "classfile/javaClasses.inline.hpp"
31#include "classfile/symbolTable.hpp"
32#include "classfile/systemDictionary.hpp"
33#include "classfile/verificationType.hpp"
34#include "classfile/verifier.hpp"
35#include "classfile/vmSymbols.hpp"
36#include "gc/shared/gcLocker.hpp"
37#include "memory/allocation.hpp"
38#include "memory/metadataFactory.hpp"
39#include "memory/oopFactory.hpp"
40#include "memory/referenceType.hpp"
41#include "memory/resourceArea.hpp"
42#include "memory/universe.inline.hpp"
43#include "oops/constantPool.hpp"
44#include "oops/fieldStreams.hpp"
45#include "oops/instanceKlass.hpp"
46#include "oops/instanceMirrorKlass.hpp"
47#include "oops/klass.inline.hpp"
48#include "oops/klassVtable.hpp"
49#include "oops/method.hpp"
50#include "oops/symbol.hpp"
51#include "prims/jvm.h"
52#include "prims/jvmtiExport.hpp"
53#include "prims/jvmtiThreadState.hpp"
54#include "runtime/javaCalls.hpp"
55#include "runtime/perfData.hpp"
56#include "runtime/reflection.hpp"
57#include "runtime/signature.hpp"
58#include "runtime/timer.hpp"
59#include "services/classLoadingService.hpp"
60#include "services/threadService.hpp"
61#include "utilities/array.hpp"
62#include "utilities/exceptions.hpp"
63#include "utilities/globalDefinitions.hpp"
64#include "utilities/macros.hpp"
65#include "utilities/ostream.hpp"
66#include "utilities/resourceHash.hpp"
67#if INCLUDE_CDS
68#include "classfile/systemDictionaryShared.hpp"
69#endif
70
71// We generally try to create the oops directly when parsing, rather than
72// allocating temporary data structures and copying the bytes twice. A
73// temporary area is only needed when parsing utf8 entries in the constant
74// pool and when parsing line number tables.
75
76// We add assert in debug mode when class format is not checked.
77
78#define JAVA_CLASSFILE_MAGIC              0xCAFEBABE
79#define JAVA_MIN_SUPPORTED_VERSION        45
80#define JAVA_MAX_SUPPORTED_VERSION        52
81#define JAVA_MAX_SUPPORTED_MINOR_VERSION  0
82
83// Used for two backward compatibility reasons:
84// - to check for new additions to the class file format in JDK1.5
85// - to check for bug fixes in the format checker in JDK1.5
86#define JAVA_1_5_VERSION                  49
87
88// Used for backward compatibility reasons:
89// - to check for javac bug fixes that happened after 1.5
90// - also used as the max version when running in jdk6
91#define JAVA_6_VERSION                    50
92
93// Used for backward compatibility reasons:
94// - to check NameAndType_info signatures more aggressively
95#define JAVA_7_VERSION                    51
96
97// Extension method support.
98#define JAVA_8_VERSION                    52
99
100void ClassFileParser::parse_constant_pool_entries(int length, TRAPS) {
101  // Use a local copy of ClassFileStream. It helps the C++ compiler to optimize
102  // this function (_current can be allocated in a register, with scalar
103  // replacement of aggregates). The _current pointer is copied back to
104  // stream() when this function returns. DON'T call another method within
105  // this method that uses stream().
106  ClassFileStream* cfs0 = stream();
107  ClassFileStream cfs1 = *cfs0;
108  ClassFileStream* cfs = &cfs1;
109#ifdef ASSERT
110  assert(cfs->allocated_on_stack(),"should be local");
111  u1* old_current = cfs0->current();
112#endif
113  Handle class_loader(THREAD, _loader_data->class_loader());
114
115  // Used for batching symbol allocations.
116  const char* names[SymbolTable::symbol_alloc_batch_size];
117  int lengths[SymbolTable::symbol_alloc_batch_size];
118  int indices[SymbolTable::symbol_alloc_batch_size];
119  unsigned int hashValues[SymbolTable::symbol_alloc_batch_size];
120  int names_count = 0;
121
122  // parsing  Index 0 is unused
123  for (int index = 1; index < length; index++) {
124    // Each of the following case guarantees one more byte in the stream
125    // for the following tag or the access_flags following constant pool,
126    // so we don't need bounds-check for reading tag.
127    u1 tag = cfs->get_u1_fast();
128    switch (tag) {
129      case JVM_CONSTANT_Class :
130        {
131          cfs->guarantee_more(3, CHECK);  // name_index, tag/access_flags
132          u2 name_index = cfs->get_u2_fast();
133          _cp->klass_index_at_put(index, name_index);
134        }
135        break;
136      case JVM_CONSTANT_Fieldref :
137        {
138          cfs->guarantee_more(5, CHECK);  // class_index, name_and_type_index, tag/access_flags
139          u2 class_index = cfs->get_u2_fast();
140          u2 name_and_type_index = cfs->get_u2_fast();
141          _cp->field_at_put(index, class_index, name_and_type_index);
142        }
143        break;
144      case JVM_CONSTANT_Methodref :
145        {
146          cfs->guarantee_more(5, CHECK);  // class_index, name_and_type_index, tag/access_flags
147          u2 class_index = cfs->get_u2_fast();
148          u2 name_and_type_index = cfs->get_u2_fast();
149          _cp->method_at_put(index, class_index, name_and_type_index);
150        }
151        break;
152      case JVM_CONSTANT_InterfaceMethodref :
153        {
154          cfs->guarantee_more(5, CHECK);  // class_index, name_and_type_index, tag/access_flags
155          u2 class_index = cfs->get_u2_fast();
156          u2 name_and_type_index = cfs->get_u2_fast();
157          _cp->interface_method_at_put(index, class_index, name_and_type_index);
158        }
159        break;
160      case JVM_CONSTANT_String :
161        {
162          cfs->guarantee_more(3, CHECK);  // string_index, tag/access_flags
163          u2 string_index = cfs->get_u2_fast();
164          _cp->string_index_at_put(index, string_index);
165        }
166        break;
167      case JVM_CONSTANT_MethodHandle :
168      case JVM_CONSTANT_MethodType :
169        if (_major_version < Verifier::INVOKEDYNAMIC_MAJOR_VERSION) {
170          classfile_parse_error(
171            "Class file version does not support constant tag %u in class file %s",
172            tag, CHECK);
173        }
174        if (tag == JVM_CONSTANT_MethodHandle) {
175          cfs->guarantee_more(4, CHECK);  // ref_kind, method_index, tag/access_flags
176          u1 ref_kind = cfs->get_u1_fast();
177          u2 method_index = cfs->get_u2_fast();
178          _cp->method_handle_index_at_put(index, ref_kind, method_index);
179        } else if (tag == JVM_CONSTANT_MethodType) {
180          cfs->guarantee_more(3, CHECK);  // signature_index, tag/access_flags
181          u2 signature_index = cfs->get_u2_fast();
182          _cp->method_type_index_at_put(index, signature_index);
183        } else {
184          ShouldNotReachHere();
185        }
186        break;
187      case JVM_CONSTANT_InvokeDynamic :
188        {
189          if (_major_version < Verifier::INVOKEDYNAMIC_MAJOR_VERSION) {
190            classfile_parse_error(
191              "Class file version does not support constant tag %u in class file %s",
192              tag, CHECK);
193          }
194          cfs->guarantee_more(5, CHECK);  // bsm_index, nt, tag/access_flags
195          u2 bootstrap_specifier_index = cfs->get_u2_fast();
196          u2 name_and_type_index = cfs->get_u2_fast();
197          if (_max_bootstrap_specifier_index < (int) bootstrap_specifier_index)
198            _max_bootstrap_specifier_index = (int) bootstrap_specifier_index;  // collect for later
199          _cp->invoke_dynamic_at_put(index, bootstrap_specifier_index, name_and_type_index);
200        }
201        break;
202      case JVM_CONSTANT_Integer :
203        {
204          cfs->guarantee_more(5, CHECK);  // bytes, tag/access_flags
205          u4 bytes = cfs->get_u4_fast();
206          _cp->int_at_put(index, (jint) bytes);
207        }
208        break;
209      case JVM_CONSTANT_Float :
210        {
211          cfs->guarantee_more(5, CHECK);  // bytes, tag/access_flags
212          u4 bytes = cfs->get_u4_fast();
213          _cp->float_at_put(index, *(jfloat*)&bytes);
214        }
215        break;
216      case JVM_CONSTANT_Long :
217        // A mangled type might cause you to overrun allocated memory
218        guarantee_property(index+1 < length,
219                           "Invalid constant pool entry %u in class file %s",
220                           index, CHECK);
221        {
222          cfs->guarantee_more(9, CHECK);  // bytes, tag/access_flags
223          u8 bytes = cfs->get_u8_fast();
224          _cp->long_at_put(index, bytes);
225        }
226        index++;   // Skip entry following eigth-byte constant, see JVM book p. 98
227        break;
228      case JVM_CONSTANT_Double :
229        // A mangled type might cause you to overrun allocated memory
230        guarantee_property(index+1 < length,
231                           "Invalid constant pool entry %u in class file %s",
232                           index, CHECK);
233        {
234          cfs->guarantee_more(9, CHECK);  // bytes, tag/access_flags
235          u8 bytes = cfs->get_u8_fast();
236          _cp->double_at_put(index, *(jdouble*)&bytes);
237        }
238        index++;   // Skip entry following eigth-byte constant, see JVM book p. 98
239        break;
240      case JVM_CONSTANT_NameAndType :
241        {
242          cfs->guarantee_more(5, CHECK);  // name_index, signature_index, tag/access_flags
243          u2 name_index = cfs->get_u2_fast();
244          u2 signature_index = cfs->get_u2_fast();
245          _cp->name_and_type_at_put(index, name_index, signature_index);
246        }
247        break;
248      case JVM_CONSTANT_Utf8 :
249        {
250          cfs->guarantee_more(2, CHECK);  // utf8_length
251          u2  utf8_length = cfs->get_u2_fast();
252          u1* utf8_buffer = cfs->get_u1_buffer();
253          assert(utf8_buffer != NULL, "null utf8 buffer");
254          // Got utf8 string, guarantee utf8_length+1 bytes, set stream position forward.
255          cfs->guarantee_more(utf8_length+1, CHECK);  // utf8 string, tag/access_flags
256          cfs->skip_u1_fast(utf8_length);
257
258          // Before storing the symbol, make sure it's legal
259          if (_need_verify) {
260            verify_legal_utf8((unsigned char*)utf8_buffer, utf8_length, CHECK);
261          }
262
263          if (has_cp_patch_at(index)) {
264            Handle patch = clear_cp_patch_at(index);
265            guarantee_property(java_lang_String::is_instance(patch()),
266                               "Illegal utf8 patch at %d in class file %s",
267                               index, CHECK);
268            char* str = java_lang_String::as_utf8_string(patch());
269            // (could use java_lang_String::as_symbol instead, but might as well batch them)
270            utf8_buffer = (u1*) str;
271            utf8_length = (int) strlen(str);
272          }
273
274          unsigned int hash;
275          Symbol* result = SymbolTable::lookup_only((char*)utf8_buffer, utf8_length, hash);
276          if (result == NULL) {
277            names[names_count] = (char*)utf8_buffer;
278            lengths[names_count] = utf8_length;
279            indices[names_count] = index;
280            hashValues[names_count++] = hash;
281            if (names_count == SymbolTable::symbol_alloc_batch_size) {
282              SymbolTable::new_symbols(_loader_data, _cp, names_count, names, lengths, indices, hashValues, CHECK);
283              names_count = 0;
284            }
285          } else {
286            _cp->symbol_at_put(index, result);
287          }
288        }
289        break;
290      default:
291        classfile_parse_error(
292          "Unknown constant tag %u in class file %s", tag, CHECK);
293        break;
294    }
295  }
296
297  // Allocate the remaining symbols
298  if (names_count > 0) {
299    SymbolTable::new_symbols(_loader_data, _cp, names_count, names, lengths, indices, hashValues, CHECK);
300  }
301
302  // Copy _current pointer of local copy back to stream().
303#ifdef ASSERT
304  assert(cfs0->current() == old_current, "non-exclusive use of stream()");
305#endif
306  cfs0->set_current(cfs1.current());
307}
308
309bool inline valid_cp_range(int index, int length) { return (index > 0 && index < length); }
310
311inline Symbol* check_symbol_at(constantPoolHandle cp, int index) {
312  if (valid_cp_range(index, cp->length()) && cp->tag_at(index).is_utf8())
313    return cp->symbol_at(index);
314  else
315    return NULL;
316}
317
318PRAGMA_DIAG_PUSH
319PRAGMA_FORMAT_NONLITERAL_IGNORED
320void ClassFileParser::report_assert_property_failure(const char* msg, TRAPS) {
321  ResourceMark rm(THREAD);
322  fatal(err_msg(msg, _class_name->as_C_string()));
323}
324
325void ClassFileParser::report_assert_property_failure(const char* msg, int index, TRAPS) {
326  ResourceMark rm(THREAD);
327  fatal(err_msg(msg, index, _class_name->as_C_string()));
328}
329PRAGMA_DIAG_POP
330
331constantPoolHandle ClassFileParser::parse_constant_pool(TRAPS) {
332  ClassFileStream* cfs = stream();
333  constantPoolHandle nullHandle;
334
335  cfs->guarantee_more(3, CHECK_(nullHandle)); // length, first cp tag
336  u2 length = cfs->get_u2_fast();
337  guarantee_property(
338    length >= 1, "Illegal constant pool size %u in class file %s",
339    length, CHECK_(nullHandle));
340  ConstantPool* constant_pool = ConstantPool::allocate(_loader_data, length,
341                                                        CHECK_(nullHandle));
342  _cp = constant_pool; // save in case of errors
343  constantPoolHandle cp (THREAD, constant_pool);
344
345  // parsing constant pool entries
346  parse_constant_pool_entries(length, CHECK_(nullHandle));
347
348  int index = 1;  // declared outside of loops for portability
349
350  // first verification pass - validate cross references and fixup class and string constants
351  for (index = 1; index < length; index++) {          // Index 0 is unused
352    jbyte tag = cp->tag_at(index).value();
353    switch (tag) {
354      case JVM_CONSTANT_Class :
355        ShouldNotReachHere();     // Only JVM_CONSTANT_ClassIndex should be present
356        break;
357      case JVM_CONSTANT_Fieldref :
358        // fall through
359      case JVM_CONSTANT_Methodref :
360        // fall through
361      case JVM_CONSTANT_InterfaceMethodref : {
362        if (!_need_verify) break;
363        int klass_ref_index = cp->klass_ref_index_at(index);
364        int name_and_type_ref_index = cp->name_and_type_ref_index_at(index);
365        check_property(valid_klass_reference_at(klass_ref_index),
366                       "Invalid constant pool index %u in class file %s",
367                       klass_ref_index,
368                       CHECK_(nullHandle));
369        check_property(valid_cp_range(name_and_type_ref_index, length) &&
370                       cp->tag_at(name_and_type_ref_index).is_name_and_type(),
371                       "Invalid constant pool index %u in class file %s",
372                       name_and_type_ref_index,
373                       CHECK_(nullHandle));
374        break;
375      }
376      case JVM_CONSTANT_String :
377        ShouldNotReachHere();     // Only JVM_CONSTANT_StringIndex should be present
378        break;
379      case JVM_CONSTANT_Integer :
380        break;
381      case JVM_CONSTANT_Float :
382        break;
383      case JVM_CONSTANT_Long :
384      case JVM_CONSTANT_Double :
385        index++;
386        check_property(
387          (index < length && cp->tag_at(index).is_invalid()),
388          "Improper constant pool long/double index %u in class file %s",
389          index, CHECK_(nullHandle));
390        break;
391      case JVM_CONSTANT_NameAndType : {
392        if (!_need_verify) break;
393        int name_ref_index = cp->name_ref_index_at(index);
394        int signature_ref_index = cp->signature_ref_index_at(index);
395        check_property(valid_symbol_at(name_ref_index),
396                 "Invalid constant pool index %u in class file %s",
397                 name_ref_index, CHECK_(nullHandle));
398        check_property(valid_symbol_at(signature_ref_index),
399                 "Invalid constant pool index %u in class file %s",
400                 signature_ref_index, CHECK_(nullHandle));
401        break;
402      }
403      case JVM_CONSTANT_Utf8 :
404        break;
405      case JVM_CONSTANT_UnresolvedClass :         // fall-through
406      case JVM_CONSTANT_UnresolvedClassInError:
407        ShouldNotReachHere();     // Only JVM_CONSTANT_ClassIndex should be present
408        break;
409      case JVM_CONSTANT_ClassIndex :
410        {
411          int class_index = cp->klass_index_at(index);
412          check_property(valid_symbol_at(class_index),
413                 "Invalid constant pool index %u in class file %s",
414                 class_index, CHECK_(nullHandle));
415          cp->unresolved_klass_at_put(index, cp->symbol_at(class_index));
416        }
417        break;
418      case JVM_CONSTANT_StringIndex :
419        {
420          int string_index = cp->string_index_at(index);
421          check_property(valid_symbol_at(string_index),
422                 "Invalid constant pool index %u in class file %s",
423                 string_index, CHECK_(nullHandle));
424          Symbol* sym = cp->symbol_at(string_index);
425          cp->unresolved_string_at_put(index, sym);
426        }
427        break;
428      case JVM_CONSTANT_MethodHandle :
429        {
430          int ref_index = cp->method_handle_index_at(index);
431          check_property(
432            valid_cp_range(ref_index, length),
433              "Invalid constant pool index %u in class file %s",
434              ref_index, CHECK_(nullHandle));
435          constantTag tag = cp->tag_at(ref_index);
436          int ref_kind  = cp->method_handle_ref_kind_at(index);
437          switch (ref_kind) {
438          case JVM_REF_getField:
439          case JVM_REF_getStatic:
440          case JVM_REF_putField:
441          case JVM_REF_putStatic:
442            check_property(
443              tag.is_field(),
444              "Invalid constant pool index %u in class file %s (not a field)",
445              ref_index, CHECK_(nullHandle));
446            break;
447          case JVM_REF_invokeVirtual:
448          case JVM_REF_newInvokeSpecial:
449            check_property(
450              tag.is_method(),
451              "Invalid constant pool index %u in class file %s (not a method)",
452              ref_index, CHECK_(nullHandle));
453            break;
454          case JVM_REF_invokeStatic:
455          case JVM_REF_invokeSpecial:
456            check_property(tag.is_method() ||
457                           ((_major_version >= JAVA_8_VERSION) && tag.is_interface_method()),
458               "Invalid constant pool index %u in class file %s (not a method)",
459               ref_index, CHECK_(nullHandle));
460             break;
461          case JVM_REF_invokeInterface:
462            check_property(
463              tag.is_interface_method(),
464              "Invalid constant pool index %u in class file %s (not an interface method)",
465              ref_index, CHECK_(nullHandle));
466            break;
467          default:
468            classfile_parse_error(
469              "Bad method handle kind at constant pool index %u in class file %s",
470              index, CHECK_(nullHandle));
471          }
472          // Keep the ref_index unchanged.  It will be indirected at link-time.
473        }
474        break;
475      case JVM_CONSTANT_MethodType :
476        {
477          int ref_index = cp->method_type_index_at(index);
478          check_property(valid_symbol_at(ref_index),
479                 "Invalid constant pool index %u in class file %s",
480                 ref_index, CHECK_(nullHandle));
481        }
482        break;
483      case JVM_CONSTANT_InvokeDynamic :
484        {
485          int name_and_type_ref_index = cp->invoke_dynamic_name_and_type_ref_index_at(index);
486          check_property(valid_cp_range(name_and_type_ref_index, length) &&
487                         cp->tag_at(name_and_type_ref_index).is_name_and_type(),
488                         "Invalid constant pool index %u in class file %s",
489                         name_and_type_ref_index,
490                         CHECK_(nullHandle));
491          // bootstrap specifier index must be checked later, when BootstrapMethods attr is available
492          break;
493        }
494      default:
495        fatal(err_msg("bad constant pool tag value %u",
496                      cp->tag_at(index).value()));
497        ShouldNotReachHere();
498        break;
499    } // end of switch
500  } // end of for
501
502  if (_cp_patches != NULL) {
503    // need to treat this_class specially...
504    int this_class_index;
505    {
506      cfs->guarantee_more(8, CHECK_(nullHandle));  // flags, this_class, super_class, infs_len
507      u1* mark = cfs->current();
508      u2 flags         = cfs->get_u2_fast();
509      this_class_index = cfs->get_u2_fast();
510      cfs->set_current(mark);  // revert to mark
511    }
512
513    for (index = 1; index < length; index++) {          // Index 0 is unused
514      if (has_cp_patch_at(index)) {
515        guarantee_property(index != this_class_index,
516                           "Illegal constant pool patch to self at %d in class file %s",
517                           index, CHECK_(nullHandle));
518        patch_constant_pool(cp, index, cp_patch_at(index), CHECK_(nullHandle));
519      }
520    }
521  }
522
523  if (!_need_verify) {
524    return cp;
525  }
526
527  // second verification pass - checks the strings are of the right format.
528  // but not yet to the other entries
529  for (index = 1; index < length; index++) {
530    jbyte tag = cp->tag_at(index).value();
531    switch (tag) {
532      case JVM_CONSTANT_UnresolvedClass: {
533        Symbol*  class_name = cp->klass_name_at(index);
534        // check the name, even if _cp_patches will overwrite it
535        verify_legal_class_name(class_name, CHECK_(nullHandle));
536        break;
537      }
538      case JVM_CONSTANT_NameAndType: {
539        if (_need_verify && _major_version >= JAVA_7_VERSION) {
540          int sig_index = cp->signature_ref_index_at(index);
541          int name_index = cp->name_ref_index_at(index);
542          Symbol*  name = cp->symbol_at(name_index);
543          Symbol*  sig = cp->symbol_at(sig_index);
544          if (sig->byte_at(0) == JVM_SIGNATURE_FUNC) {
545            verify_legal_method_signature(name, sig, CHECK_(nullHandle));
546          } else {
547            verify_legal_field_signature(name, sig, CHECK_(nullHandle));
548          }
549        }
550        break;
551      }
552      case JVM_CONSTANT_InvokeDynamic:
553      case JVM_CONSTANT_Fieldref:
554      case JVM_CONSTANT_Methodref:
555      case JVM_CONSTANT_InterfaceMethodref: {
556        int name_and_type_ref_index = cp->name_and_type_ref_index_at(index);
557        // already verified to be utf8
558        int name_ref_index = cp->name_ref_index_at(name_and_type_ref_index);
559        // already verified to be utf8
560        int signature_ref_index = cp->signature_ref_index_at(name_and_type_ref_index);
561        Symbol*  name = cp->symbol_at(name_ref_index);
562        Symbol*  signature = cp->symbol_at(signature_ref_index);
563        if (tag == JVM_CONSTANT_Fieldref) {
564          verify_legal_field_name(name, CHECK_(nullHandle));
565          if (_need_verify && _major_version >= JAVA_7_VERSION) {
566            // Signature is verified above, when iterating NameAndType_info.
567            // Need only to be sure it's the right type.
568            if (signature->byte_at(0) == JVM_SIGNATURE_FUNC) {
569              throwIllegalSignature(
570                  "Field", name, signature, CHECK_(nullHandle));
571            }
572          } else {
573            verify_legal_field_signature(name, signature, CHECK_(nullHandle));
574          }
575        } else {
576          verify_legal_method_name(name, CHECK_(nullHandle));
577          if (_need_verify && _major_version >= JAVA_7_VERSION) {
578            // Signature is verified above, when iterating NameAndType_info.
579            // Need only to be sure it's the right type.
580            if (signature->byte_at(0) != JVM_SIGNATURE_FUNC) {
581              throwIllegalSignature(
582                  "Method", name, signature, CHECK_(nullHandle));
583            }
584          } else {
585            verify_legal_method_signature(name, signature, CHECK_(nullHandle));
586          }
587          if (tag == JVM_CONSTANT_Methodref) {
588            // 4509014: If a class method name begins with '<', it must be "<init>".
589            assert(name != NULL, "method name in constant pool is null");
590            unsigned int name_len = name->utf8_length();
591            assert(name_len > 0, "bad method name");  // already verified as legal name
592            if (name->byte_at(0) == '<') {
593              if (name != vmSymbols::object_initializer_name()) {
594                classfile_parse_error(
595                  "Bad method name at constant pool index %u in class file %s",
596                  name_ref_index, CHECK_(nullHandle));
597              }
598            }
599          }
600        }
601        break;
602      }
603      case JVM_CONSTANT_MethodHandle: {
604        int ref_index = cp->method_handle_index_at(index);
605        int ref_kind  = cp->method_handle_ref_kind_at(index);
606        switch (ref_kind) {
607        case JVM_REF_invokeVirtual:
608        case JVM_REF_invokeStatic:
609        case JVM_REF_invokeSpecial:
610        case JVM_REF_newInvokeSpecial:
611          {
612            int name_and_type_ref_index = cp->name_and_type_ref_index_at(ref_index);
613            int name_ref_index = cp->name_ref_index_at(name_and_type_ref_index);
614            Symbol*  name = cp->symbol_at(name_ref_index);
615            if (ref_kind == JVM_REF_newInvokeSpecial) {
616              if (name != vmSymbols::object_initializer_name()) {
617                classfile_parse_error(
618                  "Bad constructor name at constant pool index %u in class file %s",
619                  name_ref_index, CHECK_(nullHandle));
620              }
621            } else {
622              if (name == vmSymbols::object_initializer_name()) {
623                classfile_parse_error(
624                  "Bad method name at constant pool index %u in class file %s",
625                  name_ref_index, CHECK_(nullHandle));
626              }
627            }
628          }
629          break;
630          // Other ref_kinds are already fully checked in previous pass.
631        }
632        break;
633      }
634      case JVM_CONSTANT_MethodType: {
635        Symbol* no_name = vmSymbols::type_name(); // place holder
636        Symbol*  signature = cp->method_type_signature_at(index);
637        verify_legal_method_signature(no_name, signature, CHECK_(nullHandle));
638        break;
639      }
640      case JVM_CONSTANT_Utf8: {
641        assert(cp->symbol_at(index)->refcount() != 0, "count corrupted");
642      }
643    }  // end of switch
644  }  // end of for
645
646  return cp;
647}
648
649
650void ClassFileParser::patch_constant_pool(constantPoolHandle cp, int index, Handle patch, TRAPS) {
651  BasicType patch_type = T_VOID;
652
653  switch (cp->tag_at(index).value()) {
654
655  case JVM_CONSTANT_UnresolvedClass :
656    // Patching a class means pre-resolving it.
657    // The name in the constant pool is ignored.
658    if (java_lang_Class::is_instance(patch())) {
659      guarantee_property(!java_lang_Class::is_primitive(patch()),
660                         "Illegal class patch at %d in class file %s",
661                         index, CHECK);
662      cp->klass_at_put(index, java_lang_Class::as_Klass(patch()));
663    } else {
664      guarantee_property(java_lang_String::is_instance(patch()),
665                         "Illegal class patch at %d in class file %s",
666                         index, CHECK);
667      Symbol* name = java_lang_String::as_symbol(patch(), CHECK);
668      cp->unresolved_klass_at_put(index, name);
669    }
670    break;
671
672  case JVM_CONSTANT_String :
673    // skip this patch and don't clear it.  Needs the oop array for resolved
674    // references to be created first.
675    return;
676
677  case JVM_CONSTANT_Integer : patch_type = T_INT;    goto patch_prim;
678  case JVM_CONSTANT_Float :   patch_type = T_FLOAT;  goto patch_prim;
679  case JVM_CONSTANT_Long :    patch_type = T_LONG;   goto patch_prim;
680  case JVM_CONSTANT_Double :  patch_type = T_DOUBLE; goto patch_prim;
681  patch_prim:
682    {
683      jvalue value;
684      BasicType value_type = java_lang_boxing_object::get_value(patch(), &value);
685      guarantee_property(value_type == patch_type,
686                         "Illegal primitive patch at %d in class file %s",
687                         index, CHECK);
688      switch (value_type) {
689      case T_INT:    cp->int_at_put(index,   value.i); break;
690      case T_FLOAT:  cp->float_at_put(index, value.f); break;
691      case T_LONG:   cp->long_at_put(index,  value.j); break;
692      case T_DOUBLE: cp->double_at_put(index, value.d); break;
693      default:       assert(false, "");
694      }
695    }
696    break;
697
698  default:
699    // %%% TODO: put method handles into CONSTANT_InterfaceMethodref, etc.
700    guarantee_property(!has_cp_patch_at(index),
701                       "Illegal unexpected patch at %d in class file %s",
702                       index, CHECK);
703    return;
704  }
705
706  // On fall-through, mark the patch as used.
707  clear_cp_patch_at(index);
708}
709
710
711class NameSigHash: public ResourceObj {
712 public:
713  Symbol*       _name;       // name
714  Symbol*       _sig;        // signature
715  NameSigHash*  _next;       // Next entry in hash table
716};
717
718
719#define HASH_ROW_SIZE 256
720
721unsigned int hash(Symbol* name, Symbol* sig) {
722  unsigned int raw_hash = 0;
723  raw_hash += ((unsigned int)(uintptr_t)name) >> (LogHeapWordSize + 2);
724  raw_hash += ((unsigned int)(uintptr_t)sig) >> LogHeapWordSize;
725
726  return (raw_hash + (unsigned int)(uintptr_t)name) % HASH_ROW_SIZE;
727}
728
729
730void initialize_hashtable(NameSigHash** table) {
731  memset((void*)table, 0, sizeof(NameSigHash*) * HASH_ROW_SIZE);
732}
733
734// Return false if the name/sig combination is found in table.
735// Return true if no duplicate is found. And name/sig is added as a new entry in table.
736// The old format checker uses heap sort to find duplicates.
737// NOTE: caller should guarantee that GC doesn't happen during the life cycle
738// of table since we don't expect Symbol*'s to move.
739bool put_after_lookup(Symbol* name, Symbol* sig, NameSigHash** table) {
740  assert(name != NULL, "name in constant pool is NULL");
741
742  // First lookup for duplicates
743  int index = hash(name, sig);
744  NameSigHash* entry = table[index];
745  while (entry != NULL) {
746    if (entry->_name == name && entry->_sig == sig) {
747      return false;
748    }
749    entry = entry->_next;
750  }
751
752  // No duplicate is found, allocate a new entry and fill it.
753  entry = new NameSigHash();
754  entry->_name = name;
755  entry->_sig = sig;
756
757  // Insert into hash table
758  entry->_next = table[index];
759  table[index] = entry;
760
761  return true;
762}
763
764
765Array<Klass*>* ClassFileParser::parse_interfaces(int length,
766                                                 Handle protection_domain,
767                                                 Symbol* class_name,
768                                                 bool* has_default_methods,
769                                                 TRAPS) {
770  if (length == 0) {
771    _local_interfaces = Universe::the_empty_klass_array();
772  } else {
773    ClassFileStream* cfs = stream();
774    assert(length > 0, "only called for length>0");
775    _local_interfaces = MetadataFactory::new_array<Klass*>(_loader_data, length, NULL, CHECK_NULL);
776
777    int index;
778    for (index = 0; index < length; index++) {
779      u2 interface_index = cfs->get_u2(CHECK_NULL);
780      KlassHandle interf;
781      check_property(
782        valid_klass_reference_at(interface_index),
783        "Interface name has bad constant pool index %u in class file %s",
784        interface_index, CHECK_NULL);
785      if (_cp->tag_at(interface_index).is_klass()) {
786        interf = KlassHandle(THREAD, _cp->resolved_klass_at(interface_index));
787      } else {
788        Symbol*  unresolved_klass  = _cp->klass_name_at(interface_index);
789
790        // Don't need to check legal name because it's checked when parsing constant pool.
791        // But need to make sure it's not an array type.
792        guarantee_property(unresolved_klass->byte_at(0) != JVM_SIGNATURE_ARRAY,
793                           "Bad interface name in class file %s", CHECK_NULL);
794        Handle class_loader(THREAD, _loader_data->class_loader());
795
796        // Call resolve_super so classcircularity is checked
797        Klass* k = SystemDictionary::resolve_super_or_fail(class_name,
798                      unresolved_klass, class_loader, protection_domain,
799                      false, CHECK_NULL);
800        interf = KlassHandle(THREAD, k);
801      }
802
803      if (!interf()->is_interface()) {
804        THROW_MSG_(vmSymbols::java_lang_IncompatibleClassChangeError(), "Implementing class", NULL);
805      }
806      if (InstanceKlass::cast(interf())->has_default_methods()) {
807        *has_default_methods = true;
808      }
809      _local_interfaces->at_put(index, interf());
810    }
811
812    if (!_need_verify || length <= 1) {
813      return _local_interfaces;
814    }
815
816    // Check if there's any duplicates in interfaces
817    ResourceMark rm(THREAD);
818    NameSigHash** interface_names = NEW_RESOURCE_ARRAY_IN_THREAD(
819      THREAD, NameSigHash*, HASH_ROW_SIZE);
820    initialize_hashtable(interface_names);
821    bool dup = false;
822    {
823      debug_only(No_Safepoint_Verifier nsv;)
824      for (index = 0; index < length; index++) {
825        Klass* k = _local_interfaces->at(index);
826        Symbol* name = InstanceKlass::cast(k)->name();
827        // If no duplicates, add (name, NULL) in hashtable interface_names.
828        if (!put_after_lookup(name, NULL, interface_names)) {
829          dup = true;
830          break;
831        }
832      }
833    }
834    if (dup) {
835      classfile_parse_error("Duplicate interface name in class file %s", CHECK_NULL);
836    }
837  }
838  return _local_interfaces;
839}
840
841
842void ClassFileParser::verify_constantvalue(int constantvalue_index, int signature_index, TRAPS) {
843  // Make sure the constant pool entry is of a type appropriate to this field
844  guarantee_property(
845    (constantvalue_index > 0 &&
846      constantvalue_index < _cp->length()),
847    "Bad initial value index %u in ConstantValue attribute in class file %s",
848    constantvalue_index, CHECK);
849  constantTag value_type = _cp->tag_at(constantvalue_index);
850  switch ( _cp->basic_type_for_signature_at(signature_index) ) {
851    case T_LONG:
852      guarantee_property(value_type.is_long(), "Inconsistent constant value type in class file %s", CHECK);
853      break;
854    case T_FLOAT:
855      guarantee_property(value_type.is_float(), "Inconsistent constant value type in class file %s", CHECK);
856      break;
857    case T_DOUBLE:
858      guarantee_property(value_type.is_double(), "Inconsistent constant value type in class file %s", CHECK);
859      break;
860    case T_BYTE: case T_CHAR: case T_SHORT: case T_BOOLEAN: case T_INT:
861      guarantee_property(value_type.is_int(), "Inconsistent constant value type in class file %s", CHECK);
862      break;
863    case T_OBJECT:
864      guarantee_property((_cp->symbol_at(signature_index)->equals("Ljava/lang/String;")
865                         && value_type.is_string()),
866                         "Bad string initial value in class file %s", CHECK);
867      break;
868    default:
869      classfile_parse_error(
870        "Unable to set initial value %u in class file %s",
871        constantvalue_index, CHECK);
872  }
873}
874
875
876// Parse attributes for a field.
877void ClassFileParser::parse_field_attributes(u2 attributes_count,
878                                             bool is_static, u2 signature_index,
879                                             u2* constantvalue_index_addr,
880                                             bool* is_synthetic_addr,
881                                             u2* generic_signature_index_addr,
882                                             ClassFileParser::FieldAnnotationCollector* parsed_annotations,
883                                             TRAPS) {
884  ClassFileStream* cfs = stream();
885  assert(attributes_count > 0, "length should be greater than 0");
886  u2 constantvalue_index = 0;
887  u2 generic_signature_index = 0;
888  bool is_synthetic = false;
889  u1* runtime_visible_annotations = NULL;
890  int runtime_visible_annotations_length = 0;
891  u1* runtime_invisible_annotations = NULL;
892  int runtime_invisible_annotations_length = 0;
893  u1* runtime_visible_type_annotations = NULL;
894  int runtime_visible_type_annotations_length = 0;
895  u1* runtime_invisible_type_annotations = NULL;
896  int runtime_invisible_type_annotations_length = 0;
897  bool runtime_invisible_annotations_exists = false;
898  bool runtime_invisible_type_annotations_exists = false;
899  while (attributes_count--) {
900    cfs->guarantee_more(6, CHECK);  // attribute_name_index, attribute_length
901    u2 attribute_name_index = cfs->get_u2_fast();
902    u4 attribute_length = cfs->get_u4_fast();
903    check_property(valid_symbol_at(attribute_name_index),
904                   "Invalid field attribute index %u in class file %s",
905                   attribute_name_index,
906                   CHECK);
907    Symbol* attribute_name = _cp->symbol_at(attribute_name_index);
908    if (is_static && attribute_name == vmSymbols::tag_constant_value()) {
909      // ignore if non-static
910      if (constantvalue_index != 0) {
911        classfile_parse_error("Duplicate ConstantValue attribute in class file %s", CHECK);
912      }
913      check_property(
914        attribute_length == 2,
915        "Invalid ConstantValue field attribute length %u in class file %s",
916        attribute_length, CHECK);
917      constantvalue_index = cfs->get_u2(CHECK);
918      if (_need_verify) {
919        verify_constantvalue(constantvalue_index, signature_index, CHECK);
920      }
921    } else if (attribute_name == vmSymbols::tag_synthetic()) {
922      if (attribute_length != 0) {
923        classfile_parse_error(
924          "Invalid Synthetic field attribute length %u in class file %s",
925          attribute_length, CHECK);
926      }
927      is_synthetic = true;
928    } else if (attribute_name == vmSymbols::tag_deprecated()) { // 4276120
929      if (attribute_length != 0) {
930        classfile_parse_error(
931          "Invalid Deprecated field attribute length %u in class file %s",
932          attribute_length, CHECK);
933      }
934    } else if (_major_version >= JAVA_1_5_VERSION) {
935      if (attribute_name == vmSymbols::tag_signature()) {
936        if (attribute_length != 2) {
937          classfile_parse_error(
938            "Wrong size %u for field's Signature attribute in class file %s",
939            attribute_length, CHECK);
940        }
941        generic_signature_index = parse_generic_signature_attribute(CHECK);
942      } else if (attribute_name == vmSymbols::tag_runtime_visible_annotations()) {
943        if (runtime_visible_annotations != NULL) {
944          classfile_parse_error(
945            "Multiple RuntimeVisibleAnnotations attributes for field in class file %s", CHECK);
946        }
947        runtime_visible_annotations_length = attribute_length;
948        runtime_visible_annotations = cfs->get_u1_buffer();
949        assert(runtime_visible_annotations != NULL, "null visible annotations");
950        parse_annotations(runtime_visible_annotations,
951                          runtime_visible_annotations_length,
952                          parsed_annotations,
953                          CHECK);
954        cfs->skip_u1(runtime_visible_annotations_length, CHECK);
955      } else if (attribute_name == vmSymbols::tag_runtime_invisible_annotations()) {
956        if (runtime_invisible_annotations_exists) {
957          classfile_parse_error(
958            "Multiple RuntimeInvisibleAnnotations attributes for field in class file %s", CHECK);
959        }
960        runtime_invisible_annotations_exists = true;
961        if (PreserveAllAnnotations) {
962          runtime_invisible_annotations_length = attribute_length;
963          runtime_invisible_annotations = cfs->get_u1_buffer();
964          assert(runtime_invisible_annotations != NULL, "null invisible annotations");
965        }
966        cfs->skip_u1(attribute_length, CHECK);
967      } else if (attribute_name == vmSymbols::tag_runtime_visible_type_annotations()) {
968        if (runtime_visible_type_annotations != NULL) {
969          classfile_parse_error(
970            "Multiple RuntimeVisibleTypeAnnotations attributes for field in class file %s", CHECK);
971        }
972        runtime_visible_type_annotations_length = attribute_length;
973        runtime_visible_type_annotations = cfs->get_u1_buffer();
974        assert(runtime_visible_type_annotations != NULL, "null visible type annotations");
975        cfs->skip_u1(runtime_visible_type_annotations_length, CHECK);
976      } else if (attribute_name == vmSymbols::tag_runtime_invisible_type_annotations()) {
977        if (runtime_invisible_type_annotations_exists) {
978          classfile_parse_error(
979            "Multiple RuntimeInvisibleTypeAnnotations attributes for field in class file %s", CHECK);
980        } else {
981          runtime_invisible_type_annotations_exists = true;
982        }
983        if (PreserveAllAnnotations) {
984          runtime_invisible_type_annotations_length = attribute_length;
985          runtime_invisible_type_annotations = cfs->get_u1_buffer();
986          assert(runtime_invisible_type_annotations != NULL, "null invisible type annotations");
987        }
988        cfs->skip_u1(attribute_length, CHECK);
989      } else {
990        cfs->skip_u1(attribute_length, CHECK);  // Skip unknown attributes
991      }
992    } else {
993      cfs->skip_u1(attribute_length, CHECK);  // Skip unknown attributes
994    }
995  }
996
997  *constantvalue_index_addr = constantvalue_index;
998  *is_synthetic_addr = is_synthetic;
999  *generic_signature_index_addr = generic_signature_index;
1000  AnnotationArray* a = assemble_annotations(runtime_visible_annotations,
1001                                            runtime_visible_annotations_length,
1002                                            runtime_invisible_annotations,
1003                                            runtime_invisible_annotations_length,
1004                                            CHECK);
1005  parsed_annotations->set_field_annotations(a);
1006  a = assemble_annotations(runtime_visible_type_annotations,
1007                           runtime_visible_type_annotations_length,
1008                           runtime_invisible_type_annotations,
1009                           runtime_invisible_type_annotations_length,
1010                           CHECK);
1011  parsed_annotations->set_field_type_annotations(a);
1012  return;
1013}
1014
1015
1016// Field allocation types. Used for computing field offsets.
1017
1018enum FieldAllocationType {
1019  STATIC_OOP,           // Oops
1020  STATIC_BYTE,          // Boolean, Byte, char
1021  STATIC_SHORT,         // shorts
1022  STATIC_WORD,          // ints
1023  STATIC_DOUBLE,        // aligned long or double
1024  NONSTATIC_OOP,
1025  NONSTATIC_BYTE,
1026  NONSTATIC_SHORT,
1027  NONSTATIC_WORD,
1028  NONSTATIC_DOUBLE,
1029  MAX_FIELD_ALLOCATION_TYPE,
1030  BAD_ALLOCATION_TYPE = -1
1031};
1032
1033static FieldAllocationType _basic_type_to_atype[2 * (T_CONFLICT + 1)] = {
1034  BAD_ALLOCATION_TYPE, // 0
1035  BAD_ALLOCATION_TYPE, // 1
1036  BAD_ALLOCATION_TYPE, // 2
1037  BAD_ALLOCATION_TYPE, // 3
1038  NONSTATIC_BYTE ,     // T_BOOLEAN     =  4,
1039  NONSTATIC_SHORT,     // T_CHAR        =  5,
1040  NONSTATIC_WORD,      // T_FLOAT       =  6,
1041  NONSTATIC_DOUBLE,    // T_DOUBLE      =  7,
1042  NONSTATIC_BYTE,      // T_BYTE        =  8,
1043  NONSTATIC_SHORT,     // T_SHORT       =  9,
1044  NONSTATIC_WORD,      // T_INT         = 10,
1045  NONSTATIC_DOUBLE,    // T_LONG        = 11,
1046  NONSTATIC_OOP,       // T_OBJECT      = 12,
1047  NONSTATIC_OOP,       // T_ARRAY       = 13,
1048  BAD_ALLOCATION_TYPE, // T_VOID        = 14,
1049  BAD_ALLOCATION_TYPE, // T_ADDRESS     = 15,
1050  BAD_ALLOCATION_TYPE, // T_NARROWOOP   = 16,
1051  BAD_ALLOCATION_TYPE, // T_METADATA    = 17,
1052  BAD_ALLOCATION_TYPE, // T_NARROWKLASS = 18,
1053  BAD_ALLOCATION_TYPE, // T_CONFLICT    = 19,
1054  BAD_ALLOCATION_TYPE, // 0
1055  BAD_ALLOCATION_TYPE, // 1
1056  BAD_ALLOCATION_TYPE, // 2
1057  BAD_ALLOCATION_TYPE, // 3
1058  STATIC_BYTE ,        // T_BOOLEAN     =  4,
1059  STATIC_SHORT,        // T_CHAR        =  5,
1060  STATIC_WORD,         // T_FLOAT       =  6,
1061  STATIC_DOUBLE,       // T_DOUBLE      =  7,
1062  STATIC_BYTE,         // T_BYTE        =  8,
1063  STATIC_SHORT,        // T_SHORT       =  9,
1064  STATIC_WORD,         // T_INT         = 10,
1065  STATIC_DOUBLE,       // T_LONG        = 11,
1066  STATIC_OOP,          // T_OBJECT      = 12,
1067  STATIC_OOP,          // T_ARRAY       = 13,
1068  BAD_ALLOCATION_TYPE, // T_VOID        = 14,
1069  BAD_ALLOCATION_TYPE, // T_ADDRESS     = 15,
1070  BAD_ALLOCATION_TYPE, // T_NARROWOOP   = 16,
1071  BAD_ALLOCATION_TYPE, // T_METADATA    = 17,
1072  BAD_ALLOCATION_TYPE, // T_NARROWKLASS = 18,
1073  BAD_ALLOCATION_TYPE, // T_CONFLICT    = 19,
1074};
1075
1076static FieldAllocationType basic_type_to_atype(bool is_static, BasicType type) {
1077  assert(type >= T_BOOLEAN && type < T_VOID, "only allowable values");
1078  FieldAllocationType result = _basic_type_to_atype[type + (is_static ? (T_CONFLICT + 1) : 0)];
1079  assert(result != BAD_ALLOCATION_TYPE, "bad type");
1080  return result;
1081}
1082
1083class FieldAllocationCount: public ResourceObj {
1084 public:
1085  u2 count[MAX_FIELD_ALLOCATION_TYPE];
1086
1087  FieldAllocationCount() {
1088    for (int i = 0; i < MAX_FIELD_ALLOCATION_TYPE; i++) {
1089      count[i] = 0;
1090    }
1091  }
1092
1093  FieldAllocationType update(bool is_static, BasicType type) {
1094    FieldAllocationType atype = basic_type_to_atype(is_static, type);
1095    // Make sure there is no overflow with injected fields.
1096    assert(count[atype] < 0xFFFF, "More than 65535 fields");
1097    count[atype]++;
1098    return atype;
1099  }
1100};
1101
1102Array<u2>* ClassFileParser::parse_fields(Symbol* class_name,
1103                                         bool is_interface,
1104                                         FieldAllocationCount *fac,
1105                                         u2* java_fields_count_ptr, TRAPS) {
1106  ClassFileStream* cfs = stream();
1107  cfs->guarantee_more(2, CHECK_NULL);  // length
1108  u2 length = cfs->get_u2_fast();
1109  *java_fields_count_ptr = length;
1110
1111  int num_injected = 0;
1112  InjectedField* injected = JavaClasses::get_injected(class_name, &num_injected);
1113  int total_fields = length + num_injected;
1114
1115  // The field array starts with tuples of shorts
1116  // [access, name index, sig index, initial value index, byte offset].
1117  // A generic signature slot only exists for field with generic
1118  // signature attribute. And the access flag is set with
1119  // JVM_ACC_FIELD_HAS_GENERIC_SIGNATURE for that field. The generic
1120  // signature slots are at the end of the field array and after all
1121  // other fields data.
1122  //
1123  //   f1: [access, name index, sig index, initial value index, low_offset, high_offset]
1124  //   f2: [access, name index, sig index, initial value index, low_offset, high_offset]
1125  //       ...
1126  //   fn: [access, name index, sig index, initial value index, low_offset, high_offset]
1127  //       [generic signature index]
1128  //       [generic signature index]
1129  //       ...
1130  //
1131  // Allocate a temporary resource array for field data. For each field,
1132  // a slot is reserved in the temporary array for the generic signature
1133  // index. After parsing all fields, the data are copied to a permanent
1134  // array and any unused slots will be discarded.
1135  ResourceMark rm(THREAD);
1136  u2* fa = NEW_RESOURCE_ARRAY_IN_THREAD(
1137             THREAD, u2, total_fields * (FieldInfo::field_slots + 1));
1138
1139  // The generic signature slots start after all other fields' data.
1140  int generic_signature_slot = total_fields * FieldInfo::field_slots;
1141  int num_generic_signature = 0;
1142  for (int n = 0; n < length; n++) {
1143    cfs->guarantee_more(8, CHECK_NULL);  // access_flags, name_index, descriptor_index, attributes_count
1144
1145    AccessFlags access_flags;
1146    jint flags = cfs->get_u2_fast() & JVM_RECOGNIZED_FIELD_MODIFIERS;
1147    verify_legal_field_modifiers(flags, is_interface, CHECK_NULL);
1148    access_flags.set_flags(flags);
1149
1150    u2 name_index = cfs->get_u2_fast();
1151    int cp_size = _cp->length();
1152    check_property(valid_symbol_at(name_index),
1153      "Invalid constant pool index %u for field name in class file %s",
1154      name_index,
1155      CHECK_NULL);
1156    Symbol*  name = _cp->symbol_at(name_index);
1157    verify_legal_field_name(name, CHECK_NULL);
1158
1159    u2 signature_index = cfs->get_u2_fast();
1160    check_property(valid_symbol_at(signature_index),
1161      "Invalid constant pool index %u for field signature in class file %s",
1162      signature_index, CHECK_NULL);
1163    Symbol*  sig = _cp->symbol_at(signature_index);
1164    verify_legal_field_signature(name, sig, CHECK_NULL);
1165
1166    u2 constantvalue_index = 0;
1167    bool is_synthetic = false;
1168    u2 generic_signature_index = 0;
1169    bool is_static = access_flags.is_static();
1170    FieldAnnotationCollector parsed_annotations(_loader_data);
1171
1172    u2 attributes_count = cfs->get_u2_fast();
1173    if (attributes_count > 0) {
1174      parse_field_attributes(attributes_count, is_static, signature_index,
1175                             &constantvalue_index, &is_synthetic,
1176                             &generic_signature_index, &parsed_annotations,
1177                             CHECK_NULL);
1178      if (parsed_annotations.field_annotations() != NULL) {
1179        if (_fields_annotations == NULL) {
1180          _fields_annotations = MetadataFactory::new_array<AnnotationArray*>(
1181                                             _loader_data, length, NULL,
1182                                             CHECK_NULL);
1183        }
1184        _fields_annotations->at_put(n, parsed_annotations.field_annotations());
1185        parsed_annotations.set_field_annotations(NULL);
1186      }
1187      if (parsed_annotations.field_type_annotations() != NULL) {
1188        if (_fields_type_annotations == NULL) {
1189          _fields_type_annotations = MetadataFactory::new_array<AnnotationArray*>(
1190                                                  _loader_data, length, NULL,
1191                                                  CHECK_NULL);
1192        }
1193        _fields_type_annotations->at_put(n, parsed_annotations.field_type_annotations());
1194        parsed_annotations.set_field_type_annotations(NULL);
1195      }
1196
1197      if (is_synthetic) {
1198        access_flags.set_is_synthetic();
1199      }
1200      if (generic_signature_index != 0) {
1201        access_flags.set_field_has_generic_signature();
1202        fa[generic_signature_slot] = generic_signature_index;
1203        generic_signature_slot ++;
1204        num_generic_signature ++;
1205      }
1206    }
1207
1208    FieldInfo* field = FieldInfo::from_field_array(fa, n);
1209    field->initialize(access_flags.as_short(),
1210                      name_index,
1211                      signature_index,
1212                      constantvalue_index);
1213    BasicType type = _cp->basic_type_for_signature_at(signature_index);
1214
1215    // Remember how many oops we encountered and compute allocation type
1216    FieldAllocationType atype = fac->update(is_static, type);
1217    field->set_allocation_type(atype);
1218
1219    // After field is initialized with type, we can augment it with aux info
1220    if (parsed_annotations.has_any_annotations())
1221      parsed_annotations.apply_to(field);
1222  }
1223
1224  int index = length;
1225  if (num_injected != 0) {
1226    for (int n = 0; n < num_injected; n++) {
1227      // Check for duplicates
1228      if (injected[n].may_be_java) {
1229        Symbol* name      = injected[n].name();
1230        Symbol* signature = injected[n].signature();
1231        bool duplicate = false;
1232        for (int i = 0; i < length; i++) {
1233          FieldInfo* f = FieldInfo::from_field_array(fa, i);
1234          if (name      == _cp->symbol_at(f->name_index()) &&
1235              signature == _cp->symbol_at(f->signature_index())) {
1236            // Symbol is desclared in Java so skip this one
1237            duplicate = true;
1238            break;
1239          }
1240        }
1241        if (duplicate) {
1242          // These will be removed from the field array at the end
1243          continue;
1244        }
1245      }
1246
1247      // Injected field
1248      FieldInfo* field = FieldInfo::from_field_array(fa, index);
1249      field->initialize(JVM_ACC_FIELD_INTERNAL,
1250                        injected[n].name_index,
1251                        injected[n].signature_index,
1252                        0);
1253
1254      BasicType type = FieldType::basic_type(injected[n].signature());
1255
1256      // Remember how many oops we encountered and compute allocation type
1257      FieldAllocationType atype = fac->update(false, type);
1258      field->set_allocation_type(atype);
1259      index++;
1260    }
1261  }
1262
1263  // Now copy the fields' data from the temporary resource array.
1264  // Sometimes injected fields already exist in the Java source so
1265  // the fields array could be too long.  In that case the
1266  // fields array is trimed. Also unused slots that were reserved
1267  // for generic signature indexes are discarded.
1268  Array<u2>* fields = MetadataFactory::new_array<u2>(
1269          _loader_data, index * FieldInfo::field_slots + num_generic_signature,
1270          CHECK_NULL);
1271  _fields = fields; // save in case of error
1272  {
1273    int i = 0;
1274    for (; i < index * FieldInfo::field_slots; i++) {
1275      fields->at_put(i, fa[i]);
1276    }
1277    for (int j = total_fields * FieldInfo::field_slots;
1278         j < generic_signature_slot; j++) {
1279      fields->at_put(i++, fa[j]);
1280    }
1281    assert(i == fields->length(), "");
1282  }
1283
1284  if (_need_verify && length > 1) {
1285    // Check duplicated fields
1286    ResourceMark rm(THREAD);
1287    NameSigHash** names_and_sigs = NEW_RESOURCE_ARRAY_IN_THREAD(
1288      THREAD, NameSigHash*, HASH_ROW_SIZE);
1289    initialize_hashtable(names_and_sigs);
1290    bool dup = false;
1291    {
1292      debug_only(No_Safepoint_Verifier nsv;)
1293      for (AllFieldStream fs(fields, _cp); !fs.done(); fs.next()) {
1294        Symbol* name = fs.name();
1295        Symbol* sig = fs.signature();
1296        // If no duplicates, add name/signature in hashtable names_and_sigs.
1297        if (!put_after_lookup(name, sig, names_and_sigs)) {
1298          dup = true;
1299          break;
1300        }
1301      }
1302    }
1303    if (dup) {
1304      classfile_parse_error("Duplicate field name&signature in class file %s",
1305                            CHECK_NULL);
1306    }
1307  }
1308
1309  return fields;
1310}
1311
1312
1313static void copy_u2_with_conversion(u2* dest, u2* src, int length) {
1314  while (length-- > 0) {
1315    *dest++ = Bytes::get_Java_u2((u1*) (src++));
1316  }
1317}
1318
1319
1320u2* ClassFileParser::parse_exception_table(u4 code_length,
1321                                           u4 exception_table_length,
1322                                           TRAPS) {
1323  ClassFileStream* cfs = stream();
1324
1325  u2* exception_table_start = cfs->get_u2_buffer();
1326  assert(exception_table_start != NULL, "null exception table");
1327  cfs->guarantee_more(8 * exception_table_length, CHECK_NULL); // start_pc, end_pc, handler_pc, catch_type_index
1328  // Will check legal target after parsing code array in verifier.
1329  if (_need_verify) {
1330    for (unsigned int i = 0; i < exception_table_length; i++) {
1331      u2 start_pc = cfs->get_u2_fast();
1332      u2 end_pc = cfs->get_u2_fast();
1333      u2 handler_pc = cfs->get_u2_fast();
1334      u2 catch_type_index = cfs->get_u2_fast();
1335      guarantee_property((start_pc < end_pc) && (end_pc <= code_length),
1336                         "Illegal exception table range in class file %s",
1337                         CHECK_NULL);
1338      guarantee_property(handler_pc < code_length,
1339                         "Illegal exception table handler in class file %s",
1340                         CHECK_NULL);
1341      if (catch_type_index != 0) {
1342        guarantee_property(valid_klass_reference_at(catch_type_index),
1343                           "Catch type in exception table has bad constant type in class file %s", CHECK_NULL);
1344      }
1345    }
1346  } else {
1347    cfs->skip_u2_fast(exception_table_length * 4);
1348  }
1349  return exception_table_start;
1350}
1351
1352void ClassFileParser::parse_linenumber_table(
1353    u4 code_attribute_length, u4 code_length,
1354    CompressedLineNumberWriteStream** write_stream, TRAPS) {
1355  ClassFileStream* cfs = stream();
1356  unsigned int num_entries = cfs->get_u2(CHECK);
1357
1358  // Each entry is a u2 start_pc, and a u2 line_number
1359  unsigned int length_in_bytes = num_entries * (sizeof(u2) + sizeof(u2));
1360
1361  // Verify line number attribute and table length
1362  check_property(
1363    code_attribute_length == sizeof(u2) + length_in_bytes,
1364    "LineNumberTable attribute has wrong length in class file %s", CHECK);
1365
1366  cfs->guarantee_more(length_in_bytes, CHECK);
1367
1368  if ((*write_stream) == NULL) {
1369    if (length_in_bytes > fixed_buffer_size) {
1370      (*write_stream) = new CompressedLineNumberWriteStream(length_in_bytes);
1371    } else {
1372      (*write_stream) = new CompressedLineNumberWriteStream(
1373        linenumbertable_buffer, fixed_buffer_size);
1374    }
1375  }
1376
1377  while (num_entries-- > 0) {
1378    u2 bci  = cfs->get_u2_fast(); // start_pc
1379    u2 line = cfs->get_u2_fast(); // line_number
1380    guarantee_property(bci < code_length,
1381        "Invalid pc in LineNumberTable in class file %s", CHECK);
1382    (*write_stream)->write_pair(bci, line);
1383  }
1384}
1385
1386
1387class LVT_Hash : public AllStatic {
1388 public:
1389
1390  static bool equals(LocalVariableTableElement const& e0, LocalVariableTableElement const& e1) {
1391  /*
1392   * 3-tuple start_bci/length/slot has to be unique key,
1393   * so the following comparison seems to be redundant:
1394   *       && elem->name_cp_index == entry->_elem->name_cp_index
1395   */
1396    return (e0.start_bci     == e1.start_bci &&
1397            e0.length        == e1.length &&
1398            e0.name_cp_index == e1.name_cp_index &&
1399            e0.slot          == e1.slot);
1400  }
1401
1402  static unsigned int hash(LocalVariableTableElement const& e0) {
1403    unsigned int raw_hash = e0.start_bci;
1404
1405    raw_hash = e0.length        + raw_hash * 37;
1406    raw_hash = e0.name_cp_index + raw_hash * 37;
1407    raw_hash = e0.slot          + raw_hash * 37;
1408
1409    return raw_hash;
1410  }
1411};
1412
1413
1414// Class file LocalVariableTable elements.
1415class Classfile_LVT_Element VALUE_OBJ_CLASS_SPEC {
1416 public:
1417  u2 start_bci;
1418  u2 length;
1419  u2 name_cp_index;
1420  u2 descriptor_cp_index;
1421  u2 slot;
1422};
1423
1424void copy_lvt_element(Classfile_LVT_Element *src, LocalVariableTableElement *lvt) {
1425  lvt->start_bci           = Bytes::get_Java_u2((u1*) &src->start_bci);
1426  lvt->length              = Bytes::get_Java_u2((u1*) &src->length);
1427  lvt->name_cp_index       = Bytes::get_Java_u2((u1*) &src->name_cp_index);
1428  lvt->descriptor_cp_index = Bytes::get_Java_u2((u1*) &src->descriptor_cp_index);
1429  lvt->signature_cp_index  = 0;
1430  lvt->slot                = Bytes::get_Java_u2((u1*) &src->slot);
1431}
1432
1433// Function is used to parse both attributes:
1434//       LocalVariableTable (LVT) and LocalVariableTypeTable (LVTT)
1435u2* ClassFileParser::parse_localvariable_table(u4 code_length,
1436                                               u2 max_locals,
1437                                               u4 code_attribute_length,
1438                                               u2* localvariable_table_length,
1439                                               bool isLVTT,
1440                                               TRAPS) {
1441  ClassFileStream* cfs = stream();
1442  const char * tbl_name = (isLVTT) ? "LocalVariableTypeTable" : "LocalVariableTable";
1443  *localvariable_table_length = cfs->get_u2(CHECK_NULL);
1444  unsigned int size = (*localvariable_table_length) * sizeof(Classfile_LVT_Element) / sizeof(u2);
1445  // Verify local variable table attribute has right length
1446  if (_need_verify) {
1447    guarantee_property(code_attribute_length == (sizeof(*localvariable_table_length) + size * sizeof(u2)),
1448                       "%s has wrong length in class file %s", tbl_name, CHECK_NULL);
1449  }
1450  u2* localvariable_table_start = cfs->get_u2_buffer();
1451  assert(localvariable_table_start != NULL, "null local variable table");
1452  if (!_need_verify) {
1453    cfs->skip_u2_fast(size);
1454  } else {
1455    cfs->guarantee_more(size * 2, CHECK_NULL);
1456    for(int i = 0; i < (*localvariable_table_length); i++) {
1457      u2 start_pc = cfs->get_u2_fast();
1458      u2 length = cfs->get_u2_fast();
1459      u2 name_index = cfs->get_u2_fast();
1460      u2 descriptor_index = cfs->get_u2_fast();
1461      u2 index = cfs->get_u2_fast();
1462      // Assign to a u4 to avoid overflow
1463      u4 end_pc = (u4)start_pc + (u4)length;
1464
1465      if (start_pc >= code_length) {
1466        classfile_parse_error(
1467          "Invalid start_pc %u in %s in class file %s",
1468          start_pc, tbl_name, CHECK_NULL);
1469      }
1470      if (end_pc > code_length) {
1471        classfile_parse_error(
1472          "Invalid length %u in %s in class file %s",
1473          length, tbl_name, CHECK_NULL);
1474      }
1475      int cp_size = _cp->length();
1476      guarantee_property(valid_symbol_at(name_index),
1477        "Name index %u in %s has bad constant type in class file %s",
1478        name_index, tbl_name, CHECK_NULL);
1479      guarantee_property(valid_symbol_at(descriptor_index),
1480        "Signature index %u in %s has bad constant type in class file %s",
1481        descriptor_index, tbl_name, CHECK_NULL);
1482
1483      Symbol*  name = _cp->symbol_at(name_index);
1484      Symbol*  sig = _cp->symbol_at(descriptor_index);
1485      verify_legal_field_name(name, CHECK_NULL);
1486      u2 extra_slot = 0;
1487      if (!isLVTT) {
1488        verify_legal_field_signature(name, sig, CHECK_NULL);
1489
1490        // 4894874: check special cases for double and long local variables
1491        if (sig == vmSymbols::type_signature(T_DOUBLE) ||
1492            sig == vmSymbols::type_signature(T_LONG)) {
1493          extra_slot = 1;
1494        }
1495      }
1496      guarantee_property((index + extra_slot) < max_locals,
1497                          "Invalid index %u in %s in class file %s",
1498                          index, tbl_name, CHECK_NULL);
1499    }
1500  }
1501  return localvariable_table_start;
1502}
1503
1504
1505void ClassFileParser::parse_type_array(u2 array_length, u4 code_length, u4* u1_index, u4* u2_index,
1506                                      u1* u1_array, u2* u2_array, TRAPS) {
1507  ClassFileStream* cfs = stream();
1508  u2 index = 0; // index in the array with long/double occupying two slots
1509  u4 i1 = *u1_index;
1510  u4 i2 = *u2_index + 1;
1511  for(int i = 0; i < array_length; i++) {
1512    u1 tag = u1_array[i1++] = cfs->get_u1(CHECK);
1513    index++;
1514    if (tag == ITEM_Long || tag == ITEM_Double) {
1515      index++;
1516    } else if (tag == ITEM_Object) {
1517      u2 class_index = u2_array[i2++] = cfs->get_u2(CHECK);
1518      guarantee_property(valid_klass_reference_at(class_index),
1519                         "Bad class index %u in StackMap in class file %s",
1520                         class_index, CHECK);
1521    } else if (tag == ITEM_Uninitialized) {
1522      u2 offset = u2_array[i2++] = cfs->get_u2(CHECK);
1523      guarantee_property(
1524        offset < code_length,
1525        "Bad uninitialized type offset %u in StackMap in class file %s",
1526        offset, CHECK);
1527    } else {
1528      guarantee_property(
1529        tag <= (u1)ITEM_Uninitialized,
1530        "Unknown variable type %u in StackMap in class file %s",
1531        tag, CHECK);
1532    }
1533  }
1534  u2_array[*u2_index] = index;
1535  *u1_index = i1;
1536  *u2_index = i2;
1537}
1538
1539u1* ClassFileParser::parse_stackmap_table(
1540    u4 code_attribute_length, TRAPS) {
1541  if (code_attribute_length == 0)
1542    return NULL;
1543
1544  ClassFileStream* cfs = stream();
1545  u1* stackmap_table_start = cfs->get_u1_buffer();
1546  assert(stackmap_table_start != NULL, "null stackmap table");
1547
1548  // check code_attribute_length first
1549  stream()->skip_u1(code_attribute_length, CHECK_NULL);
1550
1551  if (!_need_verify && !DumpSharedSpaces) {
1552    return NULL;
1553  }
1554  return stackmap_table_start;
1555}
1556
1557u2* ClassFileParser::parse_checked_exceptions(u2* checked_exceptions_length,
1558                                              u4 method_attribute_length,
1559                                              TRAPS) {
1560  ClassFileStream* cfs = stream();
1561  cfs->guarantee_more(2, CHECK_NULL);  // checked_exceptions_length
1562  *checked_exceptions_length = cfs->get_u2_fast();
1563  unsigned int size = (*checked_exceptions_length) * sizeof(CheckedExceptionElement) / sizeof(u2);
1564  u2* checked_exceptions_start = cfs->get_u2_buffer();
1565  assert(checked_exceptions_start != NULL, "null checked exceptions");
1566  if (!_need_verify) {
1567    cfs->skip_u2_fast(size);
1568  } else {
1569    // Verify each value in the checked exception table
1570    u2 checked_exception;
1571    u2 len = *checked_exceptions_length;
1572    cfs->guarantee_more(2 * len, CHECK_NULL);
1573    for (int i = 0; i < len; i++) {
1574      checked_exception = cfs->get_u2_fast();
1575      check_property(
1576        valid_klass_reference_at(checked_exception),
1577        "Exception name has bad type at constant pool %u in class file %s",
1578        checked_exception, CHECK_NULL);
1579    }
1580  }
1581  // check exceptions attribute length
1582  if (_need_verify) {
1583    guarantee_property(method_attribute_length == (sizeof(*checked_exceptions_length) +
1584                                                   sizeof(u2) * size),
1585                      "Exceptions attribute has wrong length in class file %s", CHECK_NULL);
1586  }
1587  return checked_exceptions_start;
1588}
1589
1590void ClassFileParser::throwIllegalSignature(
1591    const char* type, Symbol* name, Symbol* sig, TRAPS) {
1592  ResourceMark rm(THREAD);
1593  Exceptions::fthrow(THREAD_AND_LOCATION,
1594      vmSymbols::java_lang_ClassFormatError(),
1595      "%s \"%s\" in class %s has illegal signature \"%s\"", type,
1596      name->as_C_string(), _class_name->as_C_string(), sig->as_C_string());
1597}
1598
1599// Skip an annotation.  Return >=limit if there is any problem.
1600int ClassFileParser::skip_annotation(u1* buffer, int limit, int index) {
1601  // annotation := atype:u2 do(nmem:u2) {member:u2 value}
1602  // value := switch (tag:u1) { ... }
1603  index += 2;  // skip atype
1604  if ((index += 2) >= limit)  return limit;  // read nmem
1605  int nmem = Bytes::get_Java_u2(buffer+index-2);
1606  while (--nmem >= 0 && index < limit) {
1607    index += 2; // skip member
1608    index = skip_annotation_value(buffer, limit, index);
1609  }
1610  return index;
1611}
1612
1613// Skip an annotation value.  Return >=limit if there is any problem.
1614int ClassFileParser::skip_annotation_value(u1* buffer, int limit, int index) {
1615  // value := switch (tag:u1) {
1616  //   case B, C, I, S, Z, D, F, J, c: con:u2;
1617  //   case e: e_class:u2 e_name:u2;
1618  //   case s: s_con:u2;
1619  //   case [: do(nval:u2) {value};
1620  //   case @: annotation;
1621  //   case s: s_con:u2;
1622  // }
1623  if ((index += 1) >= limit)  return limit;  // read tag
1624  u1 tag = buffer[index-1];
1625  switch (tag) {
1626  case 'B': case 'C': case 'I': case 'S': case 'Z':
1627  case 'D': case 'F': case 'J': case 'c': case 's':
1628    index += 2;  // skip con or s_con
1629    break;
1630  case 'e':
1631    index += 4;  // skip e_class, e_name
1632    break;
1633  case '[':
1634    {
1635      if ((index += 2) >= limit)  return limit;  // read nval
1636      int nval = Bytes::get_Java_u2(buffer+index-2);
1637      while (--nval >= 0 && index < limit) {
1638        index = skip_annotation_value(buffer, limit, index);
1639      }
1640    }
1641    break;
1642  case '@':
1643    index = skip_annotation(buffer, limit, index);
1644    break;
1645  default:
1646    assert(false, "annotation tag");
1647    return limit;  //  bad tag byte
1648  }
1649  return index;
1650}
1651
1652// Sift through annotations, looking for those significant to the VM:
1653void ClassFileParser::parse_annotations(u1* buffer, int limit,
1654                                        ClassFileParser::AnnotationCollector* coll,
1655                                        TRAPS) {
1656  // annotations := do(nann:u2) {annotation}
1657  int index = 0;
1658  if ((index += 2) >= limit)  return;  // read nann
1659  int nann = Bytes::get_Java_u2(buffer+index-2);
1660  enum {  // initial annotation layout
1661    atype_off = 0,      // utf8 such as 'Ljava/lang/annotation/Retention;'
1662    count_off = 2,      // u2   such as 1 (one value)
1663    member_off = 4,     // utf8 such as 'value'
1664    tag_off = 6,        // u1   such as 'c' (type) or 'e' (enum)
1665    e_tag_val = 'e',
1666      e_type_off = 7,   // utf8 such as 'Ljava/lang/annotation/RetentionPolicy;'
1667      e_con_off = 9,    // utf8 payload, such as 'SOURCE', 'CLASS', 'RUNTIME'
1668      e_size = 11,     // end of 'e' annotation
1669    c_tag_val = 'c',    // payload is type
1670      c_con_off = 7,    // utf8 payload, such as 'I'
1671      c_size = 9,       // end of 'c' annotation
1672    s_tag_val = 's',    // payload is String
1673      s_con_off = 7,    // utf8 payload, such as 'Ljava/lang/String;'
1674      s_size = 9,
1675    min_size = 6        // smallest possible size (zero members)
1676  };
1677  while ((--nann) >= 0 && (index-2 + min_size <= limit)) {
1678    int index0 = index;
1679    index = skip_annotation(buffer, limit, index);
1680    u1* abase = buffer + index0;
1681    int atype = Bytes::get_Java_u2(abase + atype_off);
1682    int count = Bytes::get_Java_u2(abase + count_off);
1683    Symbol* aname = check_symbol_at(_cp, atype);
1684    if (aname == NULL)  break;  // invalid annotation name
1685    Symbol* member = NULL;
1686    if (count >= 1) {
1687      int member_index = Bytes::get_Java_u2(abase + member_off);
1688      member = check_symbol_at(_cp, member_index);
1689      if (member == NULL)  break;  // invalid member name
1690    }
1691
1692    // Here is where parsing particular annotations will take place.
1693    AnnotationCollector::ID id = coll->annotation_index(_loader_data, aname);
1694    if (id == AnnotationCollector::_unknown)  continue;
1695    coll->set_annotation(id);
1696
1697    if (id == AnnotationCollector::_sun_misc_Contended) {
1698      // @Contended can optionally specify the contention group.
1699      //
1700      // Contended group defines the equivalence class over the fields:
1701      // the fields within the same contended group are not treated distinct.
1702      // The only exception is default group, which does not incur the
1703      // equivalence. Naturally, contention group for classes is meaningless.
1704      //
1705      // While the contention group is specified as String, annotation
1706      // values are already interned, and we might as well use the constant
1707      // pool index as the group tag.
1708      //
1709      u2 group_index = 0; // default contended group
1710      if (count == 1
1711          && s_size == (index - index0)  // match size
1712          && s_tag_val == *(abase + tag_off)
1713          && member == vmSymbols::value_name()) {
1714        group_index = Bytes::get_Java_u2(abase + s_con_off);
1715        if (_cp->symbol_at(group_index)->utf8_length() == 0) {
1716          group_index = 0; // default contended group
1717        }
1718      }
1719      coll->set_contended_group(group_index);
1720    }
1721  }
1722}
1723
1724ClassFileParser::AnnotationCollector::ID
1725ClassFileParser::AnnotationCollector::annotation_index(ClassLoaderData* loader_data,
1726                                                                Symbol* name) {
1727  vmSymbols::SID sid = vmSymbols::find_sid(name);
1728  // Privileged code can use all annotations.  Other code silently drops some.
1729  const bool privileged = loader_data->is_the_null_class_loader_data() ||
1730                          loader_data->is_ext_class_loader_data() ||
1731                          loader_data->is_anonymous();
1732  switch (sid) {
1733  case vmSymbols::VM_SYMBOL_ENUM_NAME(sun_reflect_CallerSensitive_signature):
1734    if (_location != _in_method)  break;  // only allow for methods
1735    if (!privileged)              break;  // only allow in privileged code
1736    return _method_CallerSensitive;
1737  case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_ForceInline_signature):
1738    if (_location != _in_method)  break;  // only allow for methods
1739    if (!privileged)              break;  // only allow in privileged code
1740    return _method_ForceInline;
1741  case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_DontInline_signature):
1742    if (_location != _in_method)  break;  // only allow for methods
1743    if (!privileged)              break;  // only allow in privileged code
1744    return _method_DontInline;
1745  case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_LambdaForm_Compiled_signature):
1746    if (_location != _in_method)  break;  // only allow for methods
1747    if (!privileged)              break;  // only allow in privileged code
1748    return _method_LambdaForm_Compiled;
1749  case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_LambdaForm_Hidden_signature):
1750    if (_location != _in_method)  break;  // only allow for methods
1751    if (!privileged)              break;  // only allow in privileged code
1752    return _method_LambdaForm_Hidden;
1753  case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_Stable_signature):
1754    if (_location != _in_field)   break;  // only allow for fields
1755    if (!privileged)              break;  // only allow in privileged code
1756    return _field_Stable;
1757  case vmSymbols::VM_SYMBOL_ENUM_NAME(sun_misc_Contended_signature):
1758    if (_location != _in_field && _location != _in_class)          break;  // only allow for fields and classes
1759    if (!EnableContended || (RestrictContended && !privileged))    break;  // honor privileges
1760    return _sun_misc_Contended;
1761  default: break;
1762  }
1763  return AnnotationCollector::_unknown;
1764}
1765
1766void ClassFileParser::FieldAnnotationCollector::apply_to(FieldInfo* f) {
1767  if (is_contended())
1768    f->set_contended_group(contended_group());
1769  if (is_stable())
1770    f->set_stable(true);
1771}
1772
1773ClassFileParser::FieldAnnotationCollector::~FieldAnnotationCollector() {
1774  // If there's an error deallocate metadata for field annotations
1775  MetadataFactory::free_array<u1>(_loader_data, _field_annotations);
1776  MetadataFactory::free_array<u1>(_loader_data, _field_type_annotations);
1777}
1778
1779void ClassFileParser::MethodAnnotationCollector::apply_to(methodHandle m) {
1780  if (has_annotation(_method_CallerSensitive))
1781    m->set_caller_sensitive(true);
1782  if (has_annotation(_method_ForceInline))
1783    m->set_force_inline(true);
1784  if (has_annotation(_method_DontInline))
1785    m->set_dont_inline(true);
1786  if (has_annotation(_method_LambdaForm_Compiled) && m->intrinsic_id() == vmIntrinsics::_none)
1787    m->set_intrinsic_id(vmIntrinsics::_compiledLambdaForm);
1788  if (has_annotation(_method_LambdaForm_Hidden))
1789    m->set_hidden(true);
1790}
1791
1792void ClassFileParser::ClassAnnotationCollector::apply_to(instanceKlassHandle k) {
1793  k->set_is_contended(is_contended());
1794}
1795
1796
1797#define MAX_ARGS_SIZE 255
1798#define MAX_CODE_SIZE 65535
1799#define INITIAL_MAX_LVT_NUMBER 256
1800
1801/* Copy class file LVT's/LVTT's into the HotSpot internal LVT.
1802 *
1803 * Rules for LVT's and LVTT's are:
1804 *   - There can be any number of LVT's and LVTT's.
1805 *   - If there are n LVT's, it is the same as if there was just
1806 *     one LVT containing all the entries from the n LVT's.
1807 *   - There may be no more than one LVT entry per local variable.
1808 *     Two LVT entries are 'equal' if these fields are the same:
1809 *        start_pc, length, name, slot
1810 *   - There may be no more than one LVTT entry per each LVT entry.
1811 *     Each LVTT entry has to match some LVT entry.
1812 *   - HotSpot internal LVT keeps natural ordering of class file LVT entries.
1813 */
1814void ClassFileParser::copy_localvariable_table(ConstMethod* cm,
1815                                               int lvt_cnt,
1816                                               u2* localvariable_table_length,
1817                                               u2** localvariable_table_start,
1818                                               int lvtt_cnt,
1819                                               u2* localvariable_type_table_length,
1820                                               u2** localvariable_type_table_start,
1821                                               TRAPS) {
1822
1823  ResourceMark rm(THREAD);
1824
1825  typedef ResourceHashtable<LocalVariableTableElement, LocalVariableTableElement*,
1826                            &LVT_Hash::hash, &LVT_Hash::equals> LVT_HashTable;
1827
1828  LVT_HashTable* table = new LVT_HashTable();
1829
1830  // To fill LocalVariableTable in
1831  Classfile_LVT_Element*  cf_lvt;
1832  LocalVariableTableElement* lvt = cm->localvariable_table_start();
1833
1834  for (int tbl_no = 0; tbl_no < lvt_cnt; tbl_no++) {
1835    cf_lvt = (Classfile_LVT_Element *) localvariable_table_start[tbl_no];
1836    for (int idx = 0; idx < localvariable_table_length[tbl_no]; idx++, lvt++) {
1837      copy_lvt_element(&cf_lvt[idx], lvt);
1838      // If no duplicates, add LVT elem in hashtable.
1839      if (table->put(*lvt, lvt) == false
1840          && _need_verify
1841          && _major_version >= JAVA_1_5_VERSION) {
1842        classfile_parse_error("Duplicated LocalVariableTable attribute "
1843                              "entry for '%s' in class file %s",
1844                               _cp->symbol_at(lvt->name_cp_index)->as_utf8(),
1845                               CHECK);
1846      }
1847    }
1848  }
1849
1850  // To merge LocalVariableTable and LocalVariableTypeTable
1851  Classfile_LVT_Element* cf_lvtt;
1852  LocalVariableTableElement lvtt_elem;
1853
1854  for (int tbl_no = 0; tbl_no < lvtt_cnt; tbl_no++) {
1855    cf_lvtt = (Classfile_LVT_Element *) localvariable_type_table_start[tbl_no];
1856    for (int idx = 0; idx < localvariable_type_table_length[tbl_no]; idx++) {
1857      copy_lvt_element(&cf_lvtt[idx], &lvtt_elem);
1858      LocalVariableTableElement** entry = table->get(lvtt_elem);
1859      if (entry == NULL) {
1860        if (_need_verify) {
1861          classfile_parse_error("LVTT entry for '%s' in class file %s "
1862                                "does not match any LVT entry",
1863                                 _cp->symbol_at(lvtt_elem.name_cp_index)->as_utf8(),
1864                                 CHECK);
1865        }
1866      } else if ((*entry)->signature_cp_index != 0 && _need_verify) {
1867        classfile_parse_error("Duplicated LocalVariableTypeTable attribute "
1868                              "entry for '%s' in class file %s",
1869                               _cp->symbol_at(lvtt_elem.name_cp_index)->as_utf8(),
1870                               CHECK);
1871      } else {
1872        // to add generic signatures into LocalVariableTable
1873        (*entry)->signature_cp_index = lvtt_elem.descriptor_cp_index;
1874      }
1875    }
1876  }
1877}
1878
1879
1880void ClassFileParser::copy_method_annotations(ConstMethod* cm,
1881                                       u1* runtime_visible_annotations,
1882                                       int runtime_visible_annotations_length,
1883                                       u1* runtime_invisible_annotations,
1884                                       int runtime_invisible_annotations_length,
1885                                       u1* runtime_visible_parameter_annotations,
1886                                       int runtime_visible_parameter_annotations_length,
1887                                       u1* runtime_invisible_parameter_annotations,
1888                                       int runtime_invisible_parameter_annotations_length,
1889                                       u1* runtime_visible_type_annotations,
1890                                       int runtime_visible_type_annotations_length,
1891                                       u1* runtime_invisible_type_annotations,
1892                                       int runtime_invisible_type_annotations_length,
1893                                       u1* annotation_default,
1894                                       int annotation_default_length,
1895                                       TRAPS) {
1896
1897  AnnotationArray* a;
1898
1899  if (runtime_visible_annotations_length +
1900      runtime_invisible_annotations_length > 0) {
1901     a = assemble_annotations(runtime_visible_annotations,
1902                              runtime_visible_annotations_length,
1903                              runtime_invisible_annotations,
1904                              runtime_invisible_annotations_length,
1905                              CHECK);
1906     cm->set_method_annotations(a);
1907  }
1908
1909  if (runtime_visible_parameter_annotations_length +
1910      runtime_invisible_parameter_annotations_length > 0) {
1911    a = assemble_annotations(runtime_visible_parameter_annotations,
1912                             runtime_visible_parameter_annotations_length,
1913                             runtime_invisible_parameter_annotations,
1914                             runtime_invisible_parameter_annotations_length,
1915                             CHECK);
1916    cm->set_parameter_annotations(a);
1917  }
1918
1919  if (annotation_default_length > 0) {
1920    a = assemble_annotations(annotation_default,
1921                             annotation_default_length,
1922                             NULL,
1923                             0,
1924                             CHECK);
1925    cm->set_default_annotations(a);
1926  }
1927
1928  if (runtime_visible_type_annotations_length +
1929      runtime_invisible_type_annotations_length > 0) {
1930    a = assemble_annotations(runtime_visible_type_annotations,
1931                             runtime_visible_type_annotations_length,
1932                             runtime_invisible_type_annotations,
1933                             runtime_invisible_type_annotations_length,
1934                             CHECK);
1935    cm->set_type_annotations(a);
1936  }
1937}
1938
1939
1940// Note: the parse_method below is big and clunky because all parsing of the code and exceptions
1941// attribute is inlined. This is cumbersome to avoid since we inline most of the parts in the
1942// Method* to save footprint, so we only know the size of the resulting Method* when the
1943// entire method attribute is parsed.
1944//
1945// The promoted_flags parameter is used to pass relevant access_flags
1946// from the method back up to the containing klass. These flag values
1947// are added to klass's access_flags.
1948
1949methodHandle ClassFileParser::parse_method(bool is_interface,
1950                                           AccessFlags *promoted_flags,
1951                                           TRAPS) {
1952  ClassFileStream* cfs = stream();
1953  methodHandle nullHandle;
1954  ResourceMark rm(THREAD);
1955  // Parse fixed parts
1956  cfs->guarantee_more(8, CHECK_(nullHandle)); // access_flags, name_index, descriptor_index, attributes_count
1957
1958  int flags = cfs->get_u2_fast();
1959  u2 name_index = cfs->get_u2_fast();
1960  int cp_size = _cp->length();
1961  check_property(
1962    valid_symbol_at(name_index),
1963    "Illegal constant pool index %u for method name in class file %s",
1964    name_index, CHECK_(nullHandle));
1965  Symbol*  name = _cp->symbol_at(name_index);
1966  verify_legal_method_name(name, CHECK_(nullHandle));
1967
1968  u2 signature_index = cfs->get_u2_fast();
1969  guarantee_property(
1970    valid_symbol_at(signature_index),
1971    "Illegal constant pool index %u for method signature in class file %s",
1972    signature_index, CHECK_(nullHandle));
1973  Symbol*  signature = _cp->symbol_at(signature_index);
1974
1975  AccessFlags access_flags;
1976  if (name == vmSymbols::class_initializer_name()) {
1977    // We ignore the other access flags for a valid class initializer.
1978    // (JVM Spec 2nd ed., chapter 4.6)
1979    if (_major_version < 51) { // backward compatibility
1980      flags = JVM_ACC_STATIC;
1981    } else if ((flags & JVM_ACC_STATIC) == JVM_ACC_STATIC) {
1982      flags &= JVM_ACC_STATIC | JVM_ACC_STRICT;
1983    }
1984  } else {
1985    verify_legal_method_modifiers(flags, is_interface, name, CHECK_(nullHandle));
1986  }
1987
1988  int args_size = -1;  // only used when _need_verify is true
1989  if (_need_verify) {
1990    args_size = ((flags & JVM_ACC_STATIC) ? 0 : 1) +
1991                 verify_legal_method_signature(name, signature, CHECK_(nullHandle));
1992    if (args_size > MAX_ARGS_SIZE) {
1993      classfile_parse_error("Too many arguments in method signature in class file %s", CHECK_(nullHandle));
1994    }
1995  }
1996
1997  access_flags.set_flags(flags & JVM_RECOGNIZED_METHOD_MODIFIERS);
1998
1999  // Default values for code and exceptions attribute elements
2000  u2 max_stack = 0;
2001  u2 max_locals = 0;
2002  u4 code_length = 0;
2003  u1* code_start = 0;
2004  u2 exception_table_length = 0;
2005  u2* exception_table_start = NULL;
2006  Array<int>* exception_handlers = Universe::the_empty_int_array();
2007  u2 checked_exceptions_length = 0;
2008  u2* checked_exceptions_start = NULL;
2009  CompressedLineNumberWriteStream* linenumber_table = NULL;
2010  int linenumber_table_length = 0;
2011  int total_lvt_length = 0;
2012  u2 lvt_cnt = 0;
2013  u2 lvtt_cnt = 0;
2014  bool lvt_allocated = false;
2015  u2 max_lvt_cnt = INITIAL_MAX_LVT_NUMBER;
2016  u2 max_lvtt_cnt = INITIAL_MAX_LVT_NUMBER;
2017  u2* localvariable_table_length;
2018  u2** localvariable_table_start;
2019  u2* localvariable_type_table_length;
2020  u2** localvariable_type_table_start;
2021  int method_parameters_length = -1;
2022  u1* method_parameters_data = NULL;
2023  bool method_parameters_seen = false;
2024  bool parsed_code_attribute = false;
2025  bool parsed_checked_exceptions_attribute = false;
2026  bool parsed_stackmap_attribute = false;
2027  // stackmap attribute - JDK1.5
2028  u1* stackmap_data = NULL;
2029  int stackmap_data_length = 0;
2030  u2 generic_signature_index = 0;
2031  MethodAnnotationCollector parsed_annotations;
2032  u1* runtime_visible_annotations = NULL;
2033  int runtime_visible_annotations_length = 0;
2034  u1* runtime_invisible_annotations = NULL;
2035  int runtime_invisible_annotations_length = 0;
2036  u1* runtime_visible_parameter_annotations = NULL;
2037  int runtime_visible_parameter_annotations_length = 0;
2038  u1* runtime_invisible_parameter_annotations = NULL;
2039  int runtime_invisible_parameter_annotations_length = 0;
2040  u1* runtime_visible_type_annotations = NULL;
2041  int runtime_visible_type_annotations_length = 0;
2042  u1* runtime_invisible_type_annotations = NULL;
2043  int runtime_invisible_type_annotations_length = 0;
2044  bool runtime_invisible_annotations_exists = false;
2045  bool runtime_invisible_type_annotations_exists = false;
2046  bool runtime_invisible_parameter_annotations_exists = false;
2047  u1* annotation_default = NULL;
2048  int annotation_default_length = 0;
2049
2050  // Parse code and exceptions attribute
2051  u2 method_attributes_count = cfs->get_u2_fast();
2052  while (method_attributes_count--) {
2053    cfs->guarantee_more(6, CHECK_(nullHandle));  // method_attribute_name_index, method_attribute_length
2054    u2 method_attribute_name_index = cfs->get_u2_fast();
2055    u4 method_attribute_length = cfs->get_u4_fast();
2056    check_property(
2057      valid_symbol_at(method_attribute_name_index),
2058      "Invalid method attribute name index %u in class file %s",
2059      method_attribute_name_index, CHECK_(nullHandle));
2060
2061    Symbol* method_attribute_name = _cp->symbol_at(method_attribute_name_index);
2062    if (method_attribute_name == vmSymbols::tag_code()) {
2063      // Parse Code attribute
2064      if (_need_verify) {
2065        guarantee_property(
2066            !access_flags.is_native() && !access_flags.is_abstract(),
2067                        "Code attribute in native or abstract methods in class file %s",
2068                         CHECK_(nullHandle));
2069      }
2070      if (parsed_code_attribute) {
2071        classfile_parse_error("Multiple Code attributes in class file %s", CHECK_(nullHandle));
2072      }
2073      parsed_code_attribute = true;
2074
2075      // Stack size, locals size, and code size
2076      if (_major_version == 45 && _minor_version <= 2) {
2077        cfs->guarantee_more(4, CHECK_(nullHandle));
2078        max_stack = cfs->get_u1_fast();
2079        max_locals = cfs->get_u1_fast();
2080        code_length = cfs->get_u2_fast();
2081      } else {
2082        cfs->guarantee_more(8, CHECK_(nullHandle));
2083        max_stack = cfs->get_u2_fast();
2084        max_locals = cfs->get_u2_fast();
2085        code_length = cfs->get_u4_fast();
2086      }
2087      if (_need_verify) {
2088        guarantee_property(args_size <= max_locals,
2089                           "Arguments can't fit into locals in class file %s", CHECK_(nullHandle));
2090        guarantee_property(code_length > 0 && code_length <= MAX_CODE_SIZE,
2091                           "Invalid method Code length %u in class file %s",
2092                           code_length, CHECK_(nullHandle));
2093      }
2094      // Code pointer
2095      code_start = cfs->get_u1_buffer();
2096      assert(code_start != NULL, "null code start");
2097      cfs->guarantee_more(code_length, CHECK_(nullHandle));
2098      cfs->skip_u1_fast(code_length);
2099
2100      // Exception handler table
2101      cfs->guarantee_more(2, CHECK_(nullHandle));  // exception_table_length
2102      exception_table_length = cfs->get_u2_fast();
2103      if (exception_table_length > 0) {
2104        exception_table_start =
2105              parse_exception_table(code_length, exception_table_length, CHECK_(nullHandle));
2106      }
2107
2108      // Parse additional attributes in code attribute
2109      cfs->guarantee_more(2, CHECK_(nullHandle));  // code_attributes_count
2110      u2 code_attributes_count = cfs->get_u2_fast();
2111
2112      unsigned int calculated_attribute_length = 0;
2113
2114      if (_major_version > 45 || (_major_version == 45 && _minor_version > 2)) {
2115        calculated_attribute_length =
2116            sizeof(max_stack) + sizeof(max_locals) + sizeof(code_length);
2117      } else {
2118        // max_stack, locals and length are smaller in pre-version 45.2 classes
2119        calculated_attribute_length = sizeof(u1) + sizeof(u1) + sizeof(u2);
2120      }
2121      calculated_attribute_length +=
2122        code_length +
2123        sizeof(exception_table_length) +
2124        sizeof(code_attributes_count) +
2125        exception_table_length *
2126            ( sizeof(u2) +   // start_pc
2127              sizeof(u2) +   // end_pc
2128              sizeof(u2) +   // handler_pc
2129              sizeof(u2) );  // catch_type_index
2130
2131      while (code_attributes_count--) {
2132        cfs->guarantee_more(6, CHECK_(nullHandle));  // code_attribute_name_index, code_attribute_length
2133        u2 code_attribute_name_index = cfs->get_u2_fast();
2134        u4 code_attribute_length = cfs->get_u4_fast();
2135        calculated_attribute_length += code_attribute_length +
2136                                       sizeof(code_attribute_name_index) +
2137                                       sizeof(code_attribute_length);
2138        check_property(valid_symbol_at(code_attribute_name_index),
2139                       "Invalid code attribute name index %u in class file %s",
2140                       code_attribute_name_index,
2141                       CHECK_(nullHandle));
2142        if (LoadLineNumberTables &&
2143            _cp->symbol_at(code_attribute_name_index) == vmSymbols::tag_line_number_table()) {
2144          // Parse and compress line number table
2145          parse_linenumber_table(code_attribute_length, code_length,
2146            &linenumber_table, CHECK_(nullHandle));
2147
2148        } else if (LoadLocalVariableTables &&
2149                   _cp->symbol_at(code_attribute_name_index) == vmSymbols::tag_local_variable_table()) {
2150          // Parse local variable table
2151          if (!lvt_allocated) {
2152            localvariable_table_length = NEW_RESOURCE_ARRAY_IN_THREAD(
2153              THREAD, u2,  INITIAL_MAX_LVT_NUMBER);
2154            localvariable_table_start = NEW_RESOURCE_ARRAY_IN_THREAD(
2155              THREAD, u2*, INITIAL_MAX_LVT_NUMBER);
2156            localvariable_type_table_length = NEW_RESOURCE_ARRAY_IN_THREAD(
2157              THREAD, u2,  INITIAL_MAX_LVT_NUMBER);
2158            localvariable_type_table_start = NEW_RESOURCE_ARRAY_IN_THREAD(
2159              THREAD, u2*, INITIAL_MAX_LVT_NUMBER);
2160            lvt_allocated = true;
2161          }
2162          if (lvt_cnt == max_lvt_cnt) {
2163            max_lvt_cnt <<= 1;
2164            localvariable_table_length = REALLOC_RESOURCE_ARRAY(u2, localvariable_table_length, lvt_cnt, max_lvt_cnt);
2165            localvariable_table_start  = REALLOC_RESOURCE_ARRAY(u2*, localvariable_table_start, lvt_cnt, max_lvt_cnt);
2166          }
2167          localvariable_table_start[lvt_cnt] =
2168            parse_localvariable_table(code_length,
2169                                      max_locals,
2170                                      code_attribute_length,
2171                                      &localvariable_table_length[lvt_cnt],
2172                                      false,    // is not LVTT
2173                                      CHECK_(nullHandle));
2174          total_lvt_length += localvariable_table_length[lvt_cnt];
2175          lvt_cnt++;
2176        } else if (LoadLocalVariableTypeTables &&
2177                   _major_version >= JAVA_1_5_VERSION &&
2178                   _cp->symbol_at(code_attribute_name_index) == vmSymbols::tag_local_variable_type_table()) {
2179          if (!lvt_allocated) {
2180            localvariable_table_length = NEW_RESOURCE_ARRAY_IN_THREAD(
2181              THREAD, u2,  INITIAL_MAX_LVT_NUMBER);
2182            localvariable_table_start = NEW_RESOURCE_ARRAY_IN_THREAD(
2183              THREAD, u2*, INITIAL_MAX_LVT_NUMBER);
2184            localvariable_type_table_length = NEW_RESOURCE_ARRAY_IN_THREAD(
2185              THREAD, u2,  INITIAL_MAX_LVT_NUMBER);
2186            localvariable_type_table_start = NEW_RESOURCE_ARRAY_IN_THREAD(
2187              THREAD, u2*, INITIAL_MAX_LVT_NUMBER);
2188            lvt_allocated = true;
2189          }
2190          // Parse local variable type table
2191          if (lvtt_cnt == max_lvtt_cnt) {
2192            max_lvtt_cnt <<= 1;
2193            localvariable_type_table_length = REALLOC_RESOURCE_ARRAY(u2, localvariable_type_table_length, lvtt_cnt, max_lvtt_cnt);
2194            localvariable_type_table_start  = REALLOC_RESOURCE_ARRAY(u2*, localvariable_type_table_start, lvtt_cnt, max_lvtt_cnt);
2195          }
2196          localvariable_type_table_start[lvtt_cnt] =
2197            parse_localvariable_table(code_length,
2198                                      max_locals,
2199                                      code_attribute_length,
2200                                      &localvariable_type_table_length[lvtt_cnt],
2201                                      true,     // is LVTT
2202                                      CHECK_(nullHandle));
2203          lvtt_cnt++;
2204        } else if (_major_version >= Verifier::STACKMAP_ATTRIBUTE_MAJOR_VERSION &&
2205                   _cp->symbol_at(code_attribute_name_index) == vmSymbols::tag_stack_map_table()) {
2206          // Stack map is only needed by the new verifier in JDK1.5.
2207          if (parsed_stackmap_attribute) {
2208            classfile_parse_error("Multiple StackMapTable attributes in class file %s", CHECK_(nullHandle));
2209          }
2210          stackmap_data = parse_stackmap_table(code_attribute_length, CHECK_(nullHandle));
2211          stackmap_data_length = code_attribute_length;
2212          parsed_stackmap_attribute = true;
2213        } else {
2214          // Skip unknown attributes
2215          cfs->skip_u1(code_attribute_length, CHECK_(nullHandle));
2216        }
2217      }
2218      // check method attribute length
2219      if (_need_verify) {
2220        guarantee_property(method_attribute_length == calculated_attribute_length,
2221                           "Code segment has wrong length in class file %s", CHECK_(nullHandle));
2222      }
2223    } else if (method_attribute_name == vmSymbols::tag_exceptions()) {
2224      // Parse Exceptions attribute
2225      if (parsed_checked_exceptions_attribute) {
2226        classfile_parse_error("Multiple Exceptions attributes in class file %s", CHECK_(nullHandle));
2227      }
2228      parsed_checked_exceptions_attribute = true;
2229      checked_exceptions_start =
2230            parse_checked_exceptions(&checked_exceptions_length,
2231                                     method_attribute_length,
2232                                     CHECK_(nullHandle));
2233    } else if (method_attribute_name == vmSymbols::tag_method_parameters()) {
2234      // reject multiple method parameters
2235      if (method_parameters_seen) {
2236        classfile_parse_error("Multiple MethodParameters attributes in class file %s", CHECK_(nullHandle));
2237      }
2238      method_parameters_seen = true;
2239      method_parameters_length = cfs->get_u1_fast();
2240      const u2 real_length = (method_parameters_length * 4u) + 1u;
2241      if (method_attribute_length != real_length) {
2242        classfile_parse_error(
2243          "Invalid MethodParameters method attribute length %u in class file",
2244          method_attribute_length, CHECK_(nullHandle));
2245      }
2246      method_parameters_data = cfs->get_u1_buffer();
2247      cfs->skip_u2_fast(method_parameters_length);
2248      cfs->skip_u2_fast(method_parameters_length);
2249      // ignore this attribute if it cannot be reflected
2250      if (!SystemDictionary::Parameter_klass_loaded())
2251        method_parameters_length = -1;
2252    } else if (method_attribute_name == vmSymbols::tag_synthetic()) {
2253      if (method_attribute_length != 0) {
2254        classfile_parse_error(
2255          "Invalid Synthetic method attribute length %u in class file %s",
2256          method_attribute_length, CHECK_(nullHandle));
2257      }
2258      // Should we check that there hasn't already been a synthetic attribute?
2259      access_flags.set_is_synthetic();
2260    } else if (method_attribute_name == vmSymbols::tag_deprecated()) { // 4276120
2261      if (method_attribute_length != 0) {
2262        classfile_parse_error(
2263          "Invalid Deprecated method attribute length %u in class file %s",
2264          method_attribute_length, CHECK_(nullHandle));
2265      }
2266    } else if (_major_version >= JAVA_1_5_VERSION) {
2267      if (method_attribute_name == vmSymbols::tag_signature()) {
2268        if (method_attribute_length != 2) {
2269          classfile_parse_error(
2270            "Invalid Signature attribute length %u in class file %s",
2271            method_attribute_length, CHECK_(nullHandle));
2272        }
2273        generic_signature_index = parse_generic_signature_attribute(CHECK_(nullHandle));
2274      } else if (method_attribute_name == vmSymbols::tag_runtime_visible_annotations()) {
2275        if (runtime_visible_annotations != NULL) {
2276          classfile_parse_error(
2277            "Multiple RuntimeVisibleAnnotations attributes for method in class file %s", CHECK_(nullHandle));
2278        }
2279        runtime_visible_annotations_length = method_attribute_length;
2280        runtime_visible_annotations = cfs->get_u1_buffer();
2281        assert(runtime_visible_annotations != NULL, "null visible annotations");
2282        parse_annotations(runtime_visible_annotations,
2283            runtime_visible_annotations_length, &parsed_annotations,
2284            CHECK_(nullHandle));
2285        cfs->skip_u1(runtime_visible_annotations_length, CHECK_(nullHandle));
2286      } else if (method_attribute_name == vmSymbols::tag_runtime_invisible_annotations()) {
2287        if (runtime_invisible_annotations_exists) {
2288          classfile_parse_error(
2289            "Multiple RuntimeInvisibleAnnotations attributes for method in class file %s", CHECK_(nullHandle));
2290        }
2291        runtime_invisible_annotations_exists = true;
2292        if (PreserveAllAnnotations) {
2293          runtime_invisible_annotations_length = method_attribute_length;
2294          runtime_invisible_annotations = cfs->get_u1_buffer();
2295          assert(runtime_invisible_annotations != NULL, "null invisible annotations");
2296        }
2297        cfs->skip_u1(method_attribute_length, CHECK_(nullHandle));
2298      } else if (method_attribute_name == vmSymbols::tag_runtime_visible_parameter_annotations()) {
2299        if (runtime_visible_parameter_annotations != NULL) {
2300          classfile_parse_error(
2301            "Multiple RuntimeVisibleParameterAnnotations attributes for method in class file %s", CHECK_(nullHandle));
2302        }
2303        runtime_visible_parameter_annotations_length = method_attribute_length;
2304        runtime_visible_parameter_annotations = cfs->get_u1_buffer();
2305        assert(runtime_visible_parameter_annotations != NULL, "null visible parameter annotations");
2306        cfs->skip_u1(runtime_visible_parameter_annotations_length, CHECK_(nullHandle));
2307      } else if (method_attribute_name == vmSymbols::tag_runtime_invisible_parameter_annotations()) {
2308        if (runtime_invisible_parameter_annotations_exists) {
2309          classfile_parse_error(
2310            "Multiple RuntimeInvisibleParameterAnnotations attributes for method in class file %s", CHECK_(nullHandle));
2311        }
2312        runtime_invisible_parameter_annotations_exists = true;
2313        if (PreserveAllAnnotations) {
2314          runtime_invisible_parameter_annotations_length = method_attribute_length;
2315          runtime_invisible_parameter_annotations = cfs->get_u1_buffer();
2316          assert(runtime_invisible_parameter_annotations != NULL, "null invisible parameter annotations");
2317        }
2318        cfs->skip_u1(method_attribute_length, CHECK_(nullHandle));
2319      } else if (method_attribute_name == vmSymbols::tag_annotation_default()) {
2320        if (annotation_default != NULL) {
2321          classfile_parse_error(
2322            "Multiple AnnotationDefault attributes for method in class file %s",
2323            CHECK_(nullHandle));
2324        }
2325        annotation_default_length = method_attribute_length;
2326        annotation_default = cfs->get_u1_buffer();
2327        assert(annotation_default != NULL, "null annotation default");
2328        cfs->skip_u1(annotation_default_length, CHECK_(nullHandle));
2329      } else if (method_attribute_name == vmSymbols::tag_runtime_visible_type_annotations()) {
2330        if (runtime_visible_type_annotations != NULL) {
2331          classfile_parse_error(
2332            "Multiple RuntimeVisibleTypeAnnotations attributes for method in class file %s",
2333            CHECK_(nullHandle));
2334        }
2335        runtime_visible_type_annotations_length = method_attribute_length;
2336        runtime_visible_type_annotations = cfs->get_u1_buffer();
2337        assert(runtime_visible_type_annotations != NULL, "null visible type annotations");
2338        // No need for the VM to parse Type annotations
2339        cfs->skip_u1(runtime_visible_type_annotations_length, CHECK_(nullHandle));
2340      } else if (method_attribute_name == vmSymbols::tag_runtime_invisible_type_annotations()) {
2341        if (runtime_invisible_type_annotations_exists) {
2342          classfile_parse_error(
2343            "Multiple RuntimeInvisibleTypeAnnotations attributes for method in class file %s",
2344            CHECK_(nullHandle));
2345        } else {
2346          runtime_invisible_type_annotations_exists = true;
2347        }
2348        if (PreserveAllAnnotations) {
2349          runtime_invisible_type_annotations_length = method_attribute_length;
2350          runtime_invisible_type_annotations = cfs->get_u1_buffer();
2351          assert(runtime_invisible_type_annotations != NULL, "null invisible type annotations");
2352        }
2353        cfs->skip_u1(method_attribute_length, CHECK_(nullHandle));
2354      } else {
2355        // Skip unknown attributes
2356        cfs->skip_u1(method_attribute_length, CHECK_(nullHandle));
2357      }
2358    } else {
2359      // Skip unknown attributes
2360      cfs->skip_u1(method_attribute_length, CHECK_(nullHandle));
2361    }
2362  }
2363
2364  if (linenumber_table != NULL) {
2365    linenumber_table->write_terminator();
2366    linenumber_table_length = linenumber_table->position();
2367  }
2368
2369  // Make sure there's at least one Code attribute in non-native/non-abstract method
2370  if (_need_verify) {
2371    guarantee_property(access_flags.is_native() || access_flags.is_abstract() || parsed_code_attribute,
2372                      "Absent Code attribute in method that is not native or abstract in class file %s", CHECK_(nullHandle));
2373  }
2374
2375  // All sizing information for a Method* is finally available, now create it
2376  InlineTableSizes sizes(
2377      total_lvt_length,
2378      linenumber_table_length,
2379      exception_table_length,
2380      checked_exceptions_length,
2381      method_parameters_length,
2382      generic_signature_index,
2383      runtime_visible_annotations_length +
2384           runtime_invisible_annotations_length,
2385      runtime_visible_parameter_annotations_length +
2386           runtime_invisible_parameter_annotations_length,
2387      runtime_visible_type_annotations_length +
2388           runtime_invisible_type_annotations_length,
2389      annotation_default_length,
2390      0);
2391
2392  Method* m = Method::allocate(
2393      _loader_data, code_length, access_flags, &sizes,
2394      ConstMethod::NORMAL, CHECK_(nullHandle));
2395
2396  ClassLoadingService::add_class_method_size(m->size()*HeapWordSize);
2397
2398  // Fill in information from fixed part (access_flags already set)
2399  m->set_constants(_cp);
2400  m->set_name_index(name_index);
2401  m->set_signature_index(signature_index);
2402#ifdef CC_INTERP
2403  // hmm is there a gc issue here??
2404  ResultTypeFinder rtf(_cp->symbol_at(signature_index));
2405  m->set_result_index(rtf.type());
2406#endif
2407
2408  if (args_size >= 0) {
2409    m->set_size_of_parameters(args_size);
2410  } else {
2411    m->compute_size_of_parameters(THREAD);
2412  }
2413#ifdef ASSERT
2414  if (args_size >= 0) {
2415    m->compute_size_of_parameters(THREAD);
2416    assert(args_size == m->size_of_parameters(), "");
2417  }
2418#endif
2419
2420  // Fill in code attribute information
2421  m->set_max_stack(max_stack);
2422  m->set_max_locals(max_locals);
2423  if (stackmap_data != NULL) {
2424    m->constMethod()->copy_stackmap_data(_loader_data, stackmap_data,
2425                                         stackmap_data_length, CHECK_NULL);
2426  }
2427
2428  // Copy byte codes
2429  m->set_code(code_start);
2430
2431  // Copy line number table
2432  if (linenumber_table != NULL) {
2433    memcpy(m->compressed_linenumber_table(),
2434           linenumber_table->buffer(), linenumber_table_length);
2435  }
2436
2437  // Copy exception table
2438  if (exception_table_length > 0) {
2439    int size =
2440      exception_table_length * sizeof(ExceptionTableElement) / sizeof(u2);
2441    copy_u2_with_conversion((u2*) m->exception_table_start(),
2442                             exception_table_start, size);
2443  }
2444
2445  // Copy method parameters
2446  if (method_parameters_length > 0) {
2447    MethodParametersElement* elem = m->constMethod()->method_parameters_start();
2448    for (int i = 0; i < method_parameters_length; i++) {
2449      elem[i].name_cp_index = Bytes::get_Java_u2(method_parameters_data);
2450      method_parameters_data += 2;
2451      elem[i].flags = Bytes::get_Java_u2(method_parameters_data);
2452      method_parameters_data += 2;
2453    }
2454  }
2455
2456  // Copy checked exceptions
2457  if (checked_exceptions_length > 0) {
2458    int size = checked_exceptions_length * sizeof(CheckedExceptionElement) / sizeof(u2);
2459    copy_u2_with_conversion((u2*) m->checked_exceptions_start(), checked_exceptions_start, size);
2460  }
2461
2462  // Copy class file LVT's/LVTT's into the HotSpot internal LVT.
2463  if (total_lvt_length > 0) {
2464    promoted_flags->set_has_localvariable_table();
2465    copy_localvariable_table(m->constMethod(), lvt_cnt,
2466                             localvariable_table_length,
2467                             localvariable_table_start,
2468                             lvtt_cnt,
2469                             localvariable_type_table_length,
2470                             localvariable_type_table_start, CHECK_NULL);
2471  }
2472
2473  if (parsed_annotations.has_any_annotations())
2474    parsed_annotations.apply_to(m);
2475
2476  // Copy annotations
2477  copy_method_annotations(m->constMethod(),
2478                          runtime_visible_annotations,
2479                          runtime_visible_annotations_length,
2480                          runtime_invisible_annotations,
2481                          runtime_invisible_annotations_length,
2482                          runtime_visible_parameter_annotations,
2483                          runtime_visible_parameter_annotations_length,
2484                          runtime_invisible_parameter_annotations,
2485                          runtime_invisible_parameter_annotations_length,
2486                          runtime_visible_type_annotations,
2487                          runtime_visible_type_annotations_length,
2488                          runtime_invisible_type_annotations,
2489                          runtime_invisible_type_annotations_length,
2490                          annotation_default,
2491                          annotation_default_length,
2492                          CHECK_NULL);
2493
2494  if (name == vmSymbols::finalize_method_name() &&
2495      signature == vmSymbols::void_method_signature()) {
2496    if (m->is_empty_method()) {
2497      _has_empty_finalizer = true;
2498    } else {
2499      _has_finalizer = true;
2500    }
2501  }
2502  if (name == vmSymbols::object_initializer_name() &&
2503      signature == vmSymbols::void_method_signature() &&
2504      m->is_vanilla_constructor()) {
2505    _has_vanilla_constructor = true;
2506  }
2507
2508  NOT_PRODUCT(m->verify());
2509  return m;
2510}
2511
2512
2513// The promoted_flags parameter is used to pass relevant access_flags
2514// from the methods back up to the containing klass. These flag values
2515// are added to klass's access_flags.
2516
2517Array<Method*>* ClassFileParser::parse_methods(bool is_interface,
2518                                               AccessFlags* promoted_flags,
2519                                               bool* has_final_method,
2520                                               bool* declares_default_methods,
2521                                               TRAPS) {
2522  ClassFileStream* cfs = stream();
2523  cfs->guarantee_more(2, CHECK_NULL);  // length
2524  u2 length = cfs->get_u2_fast();
2525  if (length == 0) {
2526    _methods = Universe::the_empty_method_array();
2527  } else {
2528    _methods = MetadataFactory::new_array<Method*>(_loader_data, length, NULL, CHECK_NULL);
2529
2530    HandleMark hm(THREAD);
2531    for (int index = 0; index < length; index++) {
2532      methodHandle method = parse_method(is_interface,
2533                                         promoted_flags,
2534                                         CHECK_NULL);
2535
2536      if (method->is_final()) {
2537        *has_final_method = true;
2538      }
2539      // declares_default_methods: declares concrete instance methods, any access flags
2540      // used for interface initialization, and default method inheritance analysis
2541      if (is_interface && !(*declares_default_methods)
2542        && !method->is_abstract() && !method->is_static()) {
2543        *declares_default_methods = true;
2544      }
2545      _methods->at_put(index, method());
2546    }
2547
2548    if (_need_verify && length > 1) {
2549      // Check duplicated methods
2550      ResourceMark rm(THREAD);
2551      NameSigHash** names_and_sigs = NEW_RESOURCE_ARRAY_IN_THREAD(
2552        THREAD, NameSigHash*, HASH_ROW_SIZE);
2553      initialize_hashtable(names_and_sigs);
2554      bool dup = false;
2555      {
2556        debug_only(No_Safepoint_Verifier nsv;)
2557        for (int i = 0; i < length; i++) {
2558          Method* m = _methods->at(i);
2559          // If no duplicates, add name/signature in hashtable names_and_sigs.
2560          if (!put_after_lookup(m->name(), m->signature(), names_and_sigs)) {
2561            dup = true;
2562            break;
2563          }
2564        }
2565      }
2566      if (dup) {
2567        classfile_parse_error("Duplicate method name&signature in class file %s",
2568                              CHECK_NULL);
2569      }
2570    }
2571  }
2572  return _methods;
2573}
2574
2575
2576intArray* ClassFileParser::sort_methods(Array<Method*>* methods) {
2577  int length = methods->length();
2578  // If JVMTI original method ordering or sharing is enabled we have to
2579  // remember the original class file ordering.
2580  // We temporarily use the vtable_index field in the Method* to store the
2581  // class file index, so we can read in after calling qsort.
2582  // Put the method ordering in the shared archive.
2583  if (JvmtiExport::can_maintain_original_method_order() || DumpSharedSpaces) {
2584    for (int index = 0; index < length; index++) {
2585      Method* m = methods->at(index);
2586      assert(!m->valid_vtable_index(), "vtable index should not be set");
2587      m->set_vtable_index(index);
2588    }
2589  }
2590  // Sort method array by ascending method name (for faster lookups & vtable construction)
2591  // Note that the ordering is not alphabetical, see Symbol::fast_compare
2592  Method::sort_methods(methods);
2593
2594  intArray* method_ordering = NULL;
2595  // If JVMTI original method ordering or sharing is enabled construct int
2596  // array remembering the original ordering
2597  if (JvmtiExport::can_maintain_original_method_order() || DumpSharedSpaces) {
2598    method_ordering = new intArray(length);
2599    for (int index = 0; index < length; index++) {
2600      Method* m = methods->at(index);
2601      int old_index = m->vtable_index();
2602      assert(old_index >= 0 && old_index < length, "invalid method index");
2603      method_ordering->at_put(index, old_index);
2604      m->set_vtable_index(Method::invalid_vtable_index);
2605    }
2606  }
2607  return method_ordering;
2608}
2609
2610// Parse generic_signature attribute for methods and fields
2611u2 ClassFileParser::parse_generic_signature_attribute(TRAPS) {
2612  ClassFileStream* cfs = stream();
2613  cfs->guarantee_more(2, CHECK_0);  // generic_signature_index
2614  u2 generic_signature_index = cfs->get_u2_fast();
2615  check_property(
2616    valid_symbol_at(generic_signature_index),
2617    "Invalid Signature attribute at constant pool index %u in class file %s",
2618    generic_signature_index, CHECK_0);
2619  return generic_signature_index;
2620}
2621
2622void ClassFileParser::parse_classfile_sourcefile_attribute(TRAPS) {
2623  ClassFileStream* cfs = stream();
2624  cfs->guarantee_more(2, CHECK);  // sourcefile_index
2625  u2 sourcefile_index = cfs->get_u2_fast();
2626  check_property(
2627    valid_symbol_at(sourcefile_index),
2628    "Invalid SourceFile attribute at constant pool index %u in class file %s",
2629    sourcefile_index, CHECK);
2630  set_class_sourcefile_index(sourcefile_index);
2631}
2632
2633
2634
2635void ClassFileParser::parse_classfile_source_debug_extension_attribute(int length, TRAPS) {
2636  ClassFileStream* cfs = stream();
2637  u1* sde_buffer = cfs->get_u1_buffer();
2638  assert(sde_buffer != NULL, "null sde buffer");
2639
2640  // Don't bother storing it if there is no way to retrieve it
2641  if (JvmtiExport::can_get_source_debug_extension()) {
2642    assert((length+1) > length, "Overflow checking");
2643    u1* sde = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, u1, length+1);
2644    for (int i = 0; i < length; i++) {
2645      sde[i] = sde_buffer[i];
2646    }
2647    sde[length] = '\0';
2648    set_class_sde_buffer((char*)sde, length);
2649  }
2650  // Got utf8 string, set stream position forward
2651  cfs->skip_u1(length, CHECK);
2652}
2653
2654
2655// Inner classes can be static, private or protected (classic VM does this)
2656#define RECOGNIZED_INNER_CLASS_MODIFIERS (JVM_RECOGNIZED_CLASS_MODIFIERS | JVM_ACC_PRIVATE | JVM_ACC_PROTECTED | JVM_ACC_STATIC)
2657
2658// Return number of classes in the inner classes attribute table
2659u2 ClassFileParser::parse_classfile_inner_classes_attribute(u1* inner_classes_attribute_start,
2660                                                            bool parsed_enclosingmethod_attribute,
2661                                                            u2 enclosing_method_class_index,
2662                                                            u2 enclosing_method_method_index,
2663                                                            TRAPS) {
2664  ClassFileStream* cfs = stream();
2665  u1* current_mark = cfs->current();
2666  u2 length = 0;
2667  if (inner_classes_attribute_start != NULL) {
2668    cfs->set_current(inner_classes_attribute_start);
2669    cfs->guarantee_more(2, CHECK_0);  // length
2670    length = cfs->get_u2_fast();
2671  }
2672
2673  // 4-tuples of shorts of inner classes data and 2 shorts of enclosing
2674  // method data:
2675  //   [inner_class_info_index,
2676  //    outer_class_info_index,
2677  //    inner_name_index,
2678  //    inner_class_access_flags,
2679  //    ...
2680  //    enclosing_method_class_index,
2681  //    enclosing_method_method_index]
2682  int size = length * 4 + (parsed_enclosingmethod_attribute ? 2 : 0);
2683  Array<u2>* inner_classes = MetadataFactory::new_array<u2>(_loader_data, size, CHECK_0);
2684  _inner_classes = inner_classes;
2685
2686  int index = 0;
2687  int cp_size = _cp->length();
2688  cfs->guarantee_more(8 * length, CHECK_0);  // 4-tuples of u2
2689  for (int n = 0; n < length; n++) {
2690    // Inner class index
2691    u2 inner_class_info_index = cfs->get_u2_fast();
2692    check_property(
2693      inner_class_info_index == 0 ||
2694        valid_klass_reference_at(inner_class_info_index),
2695      "inner_class_info_index %u has bad constant type in class file %s",
2696      inner_class_info_index, CHECK_0);
2697    // Outer class index
2698    u2 outer_class_info_index = cfs->get_u2_fast();
2699    check_property(
2700      outer_class_info_index == 0 ||
2701        valid_klass_reference_at(outer_class_info_index),
2702      "outer_class_info_index %u has bad constant type in class file %s",
2703      outer_class_info_index, CHECK_0);
2704    // Inner class name
2705    u2 inner_name_index = cfs->get_u2_fast();
2706    check_property(
2707      inner_name_index == 0 || valid_symbol_at(inner_name_index),
2708      "inner_name_index %u has bad constant type in class file %s",
2709      inner_name_index, CHECK_0);
2710    if (_need_verify) {
2711      guarantee_property(inner_class_info_index != outer_class_info_index,
2712                         "Class is both outer and inner class in class file %s", CHECK_0);
2713    }
2714    // Access flags
2715    AccessFlags inner_access_flags;
2716    jint flags = cfs->get_u2_fast() & RECOGNIZED_INNER_CLASS_MODIFIERS;
2717    if ((flags & JVM_ACC_INTERFACE) && _major_version < JAVA_6_VERSION) {
2718      // Set abstract bit for old class files for backward compatibility
2719      flags |= JVM_ACC_ABSTRACT;
2720    }
2721    verify_legal_class_modifiers(flags, CHECK_0);
2722    inner_access_flags.set_flags(flags);
2723
2724    inner_classes->at_put(index++, inner_class_info_index);
2725    inner_classes->at_put(index++, outer_class_info_index);
2726    inner_classes->at_put(index++, inner_name_index);
2727    inner_classes->at_put(index++, inner_access_flags.as_short());
2728  }
2729
2730  // 4347400: make sure there's no duplicate entry in the classes array
2731  if (_need_verify && _major_version >= JAVA_1_5_VERSION) {
2732    for(int i = 0; i < length * 4; i += 4) {
2733      for(int j = i + 4; j < length * 4; j += 4) {
2734        guarantee_property((inner_classes->at(i)   != inner_classes->at(j) ||
2735                            inner_classes->at(i+1) != inner_classes->at(j+1) ||
2736                            inner_classes->at(i+2) != inner_classes->at(j+2) ||
2737                            inner_classes->at(i+3) != inner_classes->at(j+3)),
2738                            "Duplicate entry in InnerClasses in class file %s",
2739                            CHECK_0);
2740      }
2741    }
2742  }
2743
2744  // Set EnclosingMethod class and method indexes.
2745  if (parsed_enclosingmethod_attribute) {
2746    inner_classes->at_put(index++, enclosing_method_class_index);
2747    inner_classes->at_put(index++, enclosing_method_method_index);
2748  }
2749  assert(index == size, "wrong size");
2750
2751  // Restore buffer's current position.
2752  cfs->set_current(current_mark);
2753
2754  return length;
2755}
2756
2757void ClassFileParser::parse_classfile_synthetic_attribute(TRAPS) {
2758  set_class_synthetic_flag(true);
2759}
2760
2761void ClassFileParser::parse_classfile_signature_attribute(TRAPS) {
2762  ClassFileStream* cfs = stream();
2763  u2 signature_index = cfs->get_u2(CHECK);
2764  check_property(
2765    valid_symbol_at(signature_index),
2766    "Invalid constant pool index %u in Signature attribute in class file %s",
2767    signature_index, CHECK);
2768  set_class_generic_signature_index(signature_index);
2769}
2770
2771void ClassFileParser::parse_classfile_bootstrap_methods_attribute(u4 attribute_byte_length, TRAPS) {
2772  ClassFileStream* cfs = stream();
2773  u1* current_start = cfs->current();
2774
2775  guarantee_property(attribute_byte_length >= sizeof(u2),
2776                     "Invalid BootstrapMethods attribute length %u in class file %s",
2777                     attribute_byte_length,
2778                     CHECK);
2779
2780  cfs->guarantee_more(attribute_byte_length, CHECK);
2781
2782  int attribute_array_length = cfs->get_u2_fast();
2783
2784  guarantee_property(_max_bootstrap_specifier_index < attribute_array_length,
2785                     "Short length on BootstrapMethods in class file %s",
2786                     CHECK);
2787
2788
2789  // The attribute contains a counted array of counted tuples of shorts,
2790  // represending bootstrap specifiers:
2791  //    length*{bootstrap_method_index, argument_count*{argument_index}}
2792  int operand_count = (attribute_byte_length - sizeof(u2)) / sizeof(u2);
2793  // operand_count = number of shorts in attr, except for leading length
2794
2795  // The attribute is copied into a short[] array.
2796  // The array begins with a series of short[2] pairs, one for each tuple.
2797  int index_size = (attribute_array_length * 2);
2798
2799  Array<u2>* operands = MetadataFactory::new_array<u2>(_loader_data, index_size + operand_count, CHECK);
2800
2801  // Eagerly assign operands so they will be deallocated with the constant
2802  // pool if there is an error.
2803  _cp->set_operands(operands);
2804
2805  int operand_fill_index = index_size;
2806  int cp_size = _cp->length();
2807
2808  for (int n = 0; n < attribute_array_length; n++) {
2809    // Store a 32-bit offset into the header of the operand array.
2810    ConstantPool::operand_offset_at_put(operands, n, operand_fill_index);
2811
2812    // Read a bootstrap specifier.
2813    cfs->guarantee_more(sizeof(u2) * 2, CHECK);  // bsm, argc
2814    u2 bootstrap_method_index = cfs->get_u2_fast();
2815    u2 argument_count = cfs->get_u2_fast();
2816    check_property(
2817      valid_cp_range(bootstrap_method_index, cp_size) &&
2818      _cp->tag_at(bootstrap_method_index).is_method_handle(),
2819      "bootstrap_method_index %u has bad constant type in class file %s",
2820      bootstrap_method_index,
2821      CHECK);
2822
2823    guarantee_property((operand_fill_index + 1 + argument_count) < operands->length(),
2824      "Invalid BootstrapMethods num_bootstrap_methods or num_bootstrap_arguments value in class file %s",
2825      CHECK);
2826
2827    operands->at_put(operand_fill_index++, bootstrap_method_index);
2828    operands->at_put(operand_fill_index++, argument_count);
2829
2830    cfs->guarantee_more(sizeof(u2) * argument_count, CHECK);  // argv[argc]
2831    for (int j = 0; j < argument_count; j++) {
2832      u2 argument_index = cfs->get_u2_fast();
2833      check_property(
2834        valid_cp_range(argument_index, cp_size) &&
2835        _cp->tag_at(argument_index).is_loadable_constant(),
2836        "argument_index %u has bad constant type in class file %s",
2837        argument_index,
2838        CHECK);
2839      operands->at_put(operand_fill_index++, argument_index);
2840    }
2841  }
2842
2843  u1* current_end = cfs->current();
2844  guarantee_property(current_end == current_start + attribute_byte_length,
2845                     "Bad length on BootstrapMethods in class file %s",
2846                     CHECK);
2847}
2848
2849void ClassFileParser::parse_classfile_attributes(ClassFileParser::ClassAnnotationCollector* parsed_annotations,
2850                                                 TRAPS) {
2851  ClassFileStream* cfs = stream();
2852  // Set inner classes attribute to default sentinel
2853  _inner_classes = Universe::the_empty_short_array();
2854  cfs->guarantee_more(2, CHECK);  // attributes_count
2855  u2 attributes_count = cfs->get_u2_fast();
2856  bool parsed_sourcefile_attribute = false;
2857  bool parsed_innerclasses_attribute = false;
2858  bool parsed_enclosingmethod_attribute = false;
2859  bool parsed_bootstrap_methods_attribute = false;
2860  u1* runtime_visible_annotations = NULL;
2861  int runtime_visible_annotations_length = 0;
2862  u1* runtime_invisible_annotations = NULL;
2863  int runtime_invisible_annotations_length = 0;
2864  u1* runtime_visible_type_annotations = NULL;
2865  int runtime_visible_type_annotations_length = 0;
2866  u1* runtime_invisible_type_annotations = NULL;
2867  int runtime_invisible_type_annotations_length = 0;
2868  bool runtime_invisible_type_annotations_exists = false;
2869  bool runtime_invisible_annotations_exists = false;
2870  bool parsed_source_debug_ext_annotations_exist = false;
2871  u1* inner_classes_attribute_start = NULL;
2872  u4  inner_classes_attribute_length = 0;
2873  u2  enclosing_method_class_index = 0;
2874  u2  enclosing_method_method_index = 0;
2875  // Iterate over attributes
2876  while (attributes_count--) {
2877    cfs->guarantee_more(6, CHECK);  // attribute_name_index, attribute_length
2878    u2 attribute_name_index = cfs->get_u2_fast();
2879    u4 attribute_length = cfs->get_u4_fast();
2880    check_property(
2881      valid_symbol_at(attribute_name_index),
2882      "Attribute name has bad constant pool index %u in class file %s",
2883      attribute_name_index, CHECK);
2884    Symbol* tag = _cp->symbol_at(attribute_name_index);
2885    if (tag == vmSymbols::tag_source_file()) {
2886      // Check for SourceFile tag
2887      if (_need_verify) {
2888        guarantee_property(attribute_length == 2, "Wrong SourceFile attribute length in class file %s", CHECK);
2889      }
2890      if (parsed_sourcefile_attribute) {
2891        classfile_parse_error("Multiple SourceFile attributes in class file %s", CHECK);
2892      } else {
2893        parsed_sourcefile_attribute = true;
2894      }
2895      parse_classfile_sourcefile_attribute(CHECK);
2896    } else if (tag == vmSymbols::tag_source_debug_extension()) {
2897      // Check for SourceDebugExtension tag
2898      if (parsed_source_debug_ext_annotations_exist) {
2899          classfile_parse_error(
2900            "Multiple SourceDebugExtension attributes in class file %s", CHECK);
2901      }
2902      parsed_source_debug_ext_annotations_exist = true;
2903      parse_classfile_source_debug_extension_attribute((int)attribute_length, CHECK);
2904    } else if (tag == vmSymbols::tag_inner_classes()) {
2905      // Check for InnerClasses tag
2906      if (parsed_innerclasses_attribute) {
2907        classfile_parse_error("Multiple InnerClasses attributes in class file %s", CHECK);
2908      } else {
2909        parsed_innerclasses_attribute = true;
2910      }
2911      inner_classes_attribute_start = cfs->get_u1_buffer();
2912      inner_classes_attribute_length = attribute_length;
2913      cfs->skip_u1(inner_classes_attribute_length, CHECK);
2914    } else if (tag == vmSymbols::tag_synthetic()) {
2915      // Check for Synthetic tag
2916      // Shouldn't we check that the synthetic flags wasn't already set? - not required in spec
2917      if (attribute_length != 0) {
2918        classfile_parse_error(
2919          "Invalid Synthetic classfile attribute length %u in class file %s",
2920          attribute_length, CHECK);
2921      }
2922      parse_classfile_synthetic_attribute(CHECK);
2923    } else if (tag == vmSymbols::tag_deprecated()) {
2924      // Check for Deprecatd tag - 4276120
2925      if (attribute_length != 0) {
2926        classfile_parse_error(
2927          "Invalid Deprecated classfile attribute length %u in class file %s",
2928          attribute_length, CHECK);
2929      }
2930    } else if (_major_version >= JAVA_1_5_VERSION) {
2931      if (tag == vmSymbols::tag_signature()) {
2932        if (attribute_length != 2) {
2933          classfile_parse_error(
2934            "Wrong Signature attribute length %u in class file %s",
2935            attribute_length, CHECK);
2936        }
2937        parse_classfile_signature_attribute(CHECK);
2938      } else if (tag == vmSymbols::tag_runtime_visible_annotations()) {
2939        if (runtime_visible_annotations != NULL) {
2940          classfile_parse_error(
2941            "Multiple RuntimeVisibleAnnotations attributes in class file %s", CHECK);
2942        }
2943        runtime_visible_annotations_length = attribute_length;
2944        runtime_visible_annotations = cfs->get_u1_buffer();
2945        assert(runtime_visible_annotations != NULL, "null visible annotations");
2946        parse_annotations(runtime_visible_annotations,
2947                          runtime_visible_annotations_length,
2948                          parsed_annotations,
2949                          CHECK);
2950        cfs->skip_u1(runtime_visible_annotations_length, CHECK);
2951      } else if (tag == vmSymbols::tag_runtime_invisible_annotations()) {
2952        if (runtime_invisible_annotations_exists) {
2953          classfile_parse_error(
2954            "Multiple RuntimeInvisibleAnnotations attributes in class file %s", CHECK);
2955        }
2956        runtime_invisible_annotations_exists = true;
2957        if (PreserveAllAnnotations) {
2958          runtime_invisible_annotations_length = attribute_length;
2959          runtime_invisible_annotations = cfs->get_u1_buffer();
2960          assert(runtime_invisible_annotations != NULL, "null invisible annotations");
2961        }
2962        cfs->skip_u1(attribute_length, CHECK);
2963      } else if (tag == vmSymbols::tag_enclosing_method()) {
2964        if (parsed_enclosingmethod_attribute) {
2965          classfile_parse_error("Multiple EnclosingMethod attributes in class file %s", CHECK);
2966        } else {
2967          parsed_enclosingmethod_attribute = true;
2968        }
2969        guarantee_property(attribute_length == 4,
2970          "Wrong EnclosingMethod attribute length %u in class file %s",
2971          attribute_length, CHECK);
2972        cfs->guarantee_more(4, CHECK);  // class_index, method_index
2973        enclosing_method_class_index  = cfs->get_u2_fast();
2974        enclosing_method_method_index = cfs->get_u2_fast();
2975        if (enclosing_method_class_index == 0) {
2976          classfile_parse_error("Invalid class index in EnclosingMethod attribute in class file %s", CHECK);
2977        }
2978        // Validate the constant pool indices and types
2979        check_property(valid_klass_reference_at(enclosing_method_class_index),
2980          "Invalid or out-of-bounds class index in EnclosingMethod attribute in class file %s", CHECK);
2981        if (enclosing_method_method_index != 0 &&
2982            (!_cp->is_within_bounds(enclosing_method_method_index) ||
2983             !_cp->tag_at(enclosing_method_method_index).is_name_and_type())) {
2984          classfile_parse_error("Invalid or out-of-bounds method index in EnclosingMethod attribute in class file %s", CHECK);
2985        }
2986      } else if (tag == vmSymbols::tag_bootstrap_methods() &&
2987                 _major_version >= Verifier::INVOKEDYNAMIC_MAJOR_VERSION) {
2988        if (parsed_bootstrap_methods_attribute)
2989          classfile_parse_error("Multiple BootstrapMethods attributes in class file %s", CHECK);
2990        parsed_bootstrap_methods_attribute = true;
2991        parse_classfile_bootstrap_methods_attribute(attribute_length, CHECK);
2992      } else if (tag == vmSymbols::tag_runtime_visible_type_annotations()) {
2993        if (runtime_visible_type_annotations != NULL) {
2994          classfile_parse_error(
2995            "Multiple RuntimeVisibleTypeAnnotations attributes in class file %s", CHECK);
2996        }
2997        runtime_visible_type_annotations_length = attribute_length;
2998        runtime_visible_type_annotations = cfs->get_u1_buffer();
2999        assert(runtime_visible_type_annotations != NULL, "null visible type annotations");
3000        // No need for the VM to parse Type annotations
3001        cfs->skip_u1(runtime_visible_type_annotations_length, CHECK);
3002      } else if (tag == vmSymbols::tag_runtime_invisible_type_annotations()) {
3003        if (runtime_invisible_type_annotations_exists) {
3004          classfile_parse_error(
3005            "Multiple RuntimeInvisibleTypeAnnotations attributes in class file %s", CHECK);
3006        } else {
3007          runtime_invisible_type_annotations_exists = true;
3008        }
3009        if (PreserveAllAnnotations) {
3010          runtime_invisible_type_annotations_length = attribute_length;
3011          runtime_invisible_type_annotations = cfs->get_u1_buffer();
3012          assert(runtime_invisible_type_annotations != NULL, "null invisible type annotations");
3013        }
3014        cfs->skip_u1(attribute_length, CHECK);
3015      } else {
3016        // Unknown attribute
3017        cfs->skip_u1(attribute_length, CHECK);
3018      }
3019    } else {
3020      // Unknown attribute
3021      cfs->skip_u1(attribute_length, CHECK);
3022    }
3023  }
3024  _annotations = assemble_annotations(runtime_visible_annotations,
3025                                      runtime_visible_annotations_length,
3026                                      runtime_invisible_annotations,
3027                                      runtime_invisible_annotations_length,
3028                                      CHECK);
3029  _type_annotations = assemble_annotations(runtime_visible_type_annotations,
3030                                           runtime_visible_type_annotations_length,
3031                                           runtime_invisible_type_annotations,
3032                                           runtime_invisible_type_annotations_length,
3033                                           CHECK);
3034
3035  if (parsed_innerclasses_attribute || parsed_enclosingmethod_attribute) {
3036    u2 num_of_classes = parse_classfile_inner_classes_attribute(
3037                            inner_classes_attribute_start,
3038                            parsed_innerclasses_attribute,
3039                            enclosing_method_class_index,
3040                            enclosing_method_method_index,
3041                            CHECK);
3042    if (parsed_innerclasses_attribute &&_need_verify && _major_version >= JAVA_1_5_VERSION) {
3043      guarantee_property(
3044        inner_classes_attribute_length == sizeof(num_of_classes) + 4 * sizeof(u2) * num_of_classes,
3045        "Wrong InnerClasses attribute length in class file %s", CHECK);
3046    }
3047  }
3048
3049  if (_max_bootstrap_specifier_index >= 0) {
3050    guarantee_property(parsed_bootstrap_methods_attribute,
3051                       "Missing BootstrapMethods attribute in class file %s", CHECK);
3052  }
3053}
3054
3055void ClassFileParser::apply_parsed_class_attributes(instanceKlassHandle k) {
3056  if (_synthetic_flag)
3057    k->set_is_synthetic();
3058  if (_sourcefile_index != 0) {
3059    k->set_source_file_name_index(_sourcefile_index);
3060  }
3061  if (_generic_signature_index != 0) {
3062    k->set_generic_signature_index(_generic_signature_index);
3063  }
3064  if (_sde_buffer != NULL) {
3065    k->set_source_debug_extension(_sde_buffer, _sde_length);
3066  }
3067}
3068
3069// Create the Annotations object that will
3070// hold the annotations array for the Klass.
3071void ClassFileParser::create_combined_annotations(TRAPS) {
3072    if (_annotations == NULL &&
3073        _type_annotations == NULL &&
3074        _fields_annotations == NULL &&
3075        _fields_type_annotations == NULL) {
3076      // Don't create the Annotations object unnecessarily.
3077      return;
3078    }
3079
3080    Annotations* annotations = Annotations::allocate(_loader_data, CHECK);
3081    annotations->set_class_annotations(_annotations);
3082    annotations->set_class_type_annotations(_type_annotations);
3083    annotations->set_fields_annotations(_fields_annotations);
3084    annotations->set_fields_type_annotations(_fields_type_annotations);
3085
3086    // This is the Annotations object that will be
3087    // assigned to InstanceKlass being constructed.
3088    _combined_annotations = annotations;
3089
3090    // The annotations arrays below has been transfered the
3091    // _combined_annotations so these fields can now be cleared.
3092    _annotations             = NULL;
3093    _type_annotations        = NULL;
3094    _fields_annotations      = NULL;
3095    _fields_type_annotations = NULL;
3096}
3097
3098// Transfer ownership of metadata allocated to the InstanceKlass.
3099void ClassFileParser::apply_parsed_class_metadata(
3100                                            instanceKlassHandle this_klass,
3101                                            int java_fields_count, TRAPS) {
3102  _cp->set_pool_holder(this_klass());
3103  this_klass->set_constants(_cp);
3104  this_klass->set_fields(_fields, java_fields_count);
3105  this_klass->set_methods(_methods);
3106  this_klass->set_inner_classes(_inner_classes);
3107  this_klass->set_local_interfaces(_local_interfaces);
3108  this_klass->set_transitive_interfaces(_transitive_interfaces);
3109  this_klass->set_annotations(_combined_annotations);
3110
3111  // Clear out these fields so they don't get deallocated by the destructor
3112  clear_class_metadata();
3113}
3114
3115AnnotationArray* ClassFileParser::assemble_annotations(u1* runtime_visible_annotations,
3116                                                       int runtime_visible_annotations_length,
3117                                                       u1* runtime_invisible_annotations,
3118                                                       int runtime_invisible_annotations_length, TRAPS) {
3119  AnnotationArray* annotations = NULL;
3120  if (runtime_visible_annotations != NULL ||
3121      runtime_invisible_annotations != NULL) {
3122    annotations = MetadataFactory::new_array<u1>(_loader_data,
3123                                          runtime_visible_annotations_length +
3124                                          runtime_invisible_annotations_length,
3125                                          CHECK_(annotations));
3126    if (runtime_visible_annotations != NULL) {
3127      for (int i = 0; i < runtime_visible_annotations_length; i++) {
3128        annotations->at_put(i, runtime_visible_annotations[i]);
3129      }
3130    }
3131    if (runtime_invisible_annotations != NULL) {
3132      for (int i = 0; i < runtime_invisible_annotations_length; i++) {
3133        int append = runtime_visible_annotations_length+i;
3134        annotations->at_put(append, runtime_invisible_annotations[i]);
3135      }
3136    }
3137  }
3138  return annotations;
3139}
3140
3141instanceKlassHandle ClassFileParser::parse_super_class(int super_class_index,
3142                                                       TRAPS) {
3143  instanceKlassHandle super_klass;
3144  if (super_class_index == 0) {
3145    check_property(_class_name == vmSymbols::java_lang_Object(),
3146                   "Invalid superclass index %u in class file %s",
3147                   super_class_index,
3148                   CHECK_NULL);
3149  } else {
3150    check_property(valid_klass_reference_at(super_class_index),
3151                   "Invalid superclass index %u in class file %s",
3152                   super_class_index,
3153                   CHECK_NULL);
3154    // The class name should be legal because it is checked when parsing constant pool.
3155    // However, make sure it is not an array type.
3156    bool is_array = false;
3157    if (_cp->tag_at(super_class_index).is_klass()) {
3158      super_klass = instanceKlassHandle(THREAD, _cp->resolved_klass_at(super_class_index));
3159      if (_need_verify)
3160        is_array = super_klass->oop_is_array();
3161    } else if (_need_verify) {
3162      is_array = (_cp->klass_name_at(super_class_index)->byte_at(0) == JVM_SIGNATURE_ARRAY);
3163    }
3164    if (_need_verify) {
3165      guarantee_property(!is_array,
3166                        "Bad superclass name in class file %s", CHECK_NULL);
3167    }
3168  }
3169  return super_klass;
3170}
3171
3172
3173// Values needed for oopmap and InstanceKlass creation
3174class FieldLayoutInfo : public StackObj {
3175 public:
3176  int*          nonstatic_oop_offsets;
3177  unsigned int* nonstatic_oop_counts;
3178  unsigned int  nonstatic_oop_map_count;
3179  unsigned int  total_oop_map_count;
3180  int           instance_size;
3181  int           nonstatic_field_size;
3182  int           static_field_size;
3183  bool          has_nonstatic_fields;
3184};
3185
3186// Layout fields and fill in FieldLayoutInfo.  Could use more refactoring!
3187void ClassFileParser::layout_fields(Handle class_loader,
3188                                    FieldAllocationCount* fac,
3189                                    ClassAnnotationCollector* parsed_annotations,
3190                                    FieldLayoutInfo* info,
3191                                    TRAPS) {
3192
3193  // Field size and offset computation
3194  int nonstatic_field_size = _super_klass() == NULL ? 0 : _super_klass()->nonstatic_field_size();
3195  int next_static_oop_offset;
3196  int next_static_double_offset;
3197  int next_static_word_offset;
3198  int next_static_short_offset;
3199  int next_static_byte_offset;
3200  int next_nonstatic_oop_offset;
3201  int next_nonstatic_double_offset;
3202  int next_nonstatic_word_offset;
3203  int next_nonstatic_short_offset;
3204  int next_nonstatic_byte_offset;
3205  int first_nonstatic_oop_offset;
3206  int next_nonstatic_field_offset;
3207  int next_nonstatic_padded_offset;
3208
3209  // Count the contended fields by type.
3210  //
3211  // We ignore static fields, because @Contended is not supported for them.
3212  // The layout code below will also ignore the static fields.
3213  int nonstatic_contended_count = 0;
3214  FieldAllocationCount fac_contended;
3215  for (AllFieldStream fs(_fields, _cp); !fs.done(); fs.next()) {
3216    FieldAllocationType atype = (FieldAllocationType) fs.allocation_type();
3217    if (fs.is_contended()) {
3218      fac_contended.count[atype]++;
3219      if (!fs.access_flags().is_static()) {
3220        nonstatic_contended_count++;
3221      }
3222    }
3223  }
3224
3225
3226  // Calculate the starting byte offsets
3227  next_static_oop_offset      = InstanceMirrorKlass::offset_of_static_fields();
3228  next_static_double_offset   = next_static_oop_offset +
3229                                ((fac->count[STATIC_OOP]) * heapOopSize);
3230  if ( fac->count[STATIC_DOUBLE] &&
3231       (Universe::field_type_should_be_aligned(T_DOUBLE) ||
3232        Universe::field_type_should_be_aligned(T_LONG)) ) {
3233    next_static_double_offset = align_size_up(next_static_double_offset, BytesPerLong);
3234  }
3235
3236  next_static_word_offset     = next_static_double_offset +
3237                                ((fac->count[STATIC_DOUBLE]) * BytesPerLong);
3238  next_static_short_offset    = next_static_word_offset +
3239                                ((fac->count[STATIC_WORD]) * BytesPerInt);
3240  next_static_byte_offset     = next_static_short_offset +
3241                                ((fac->count[STATIC_SHORT]) * BytesPerShort);
3242
3243  int nonstatic_fields_start  = instanceOopDesc::base_offset_in_bytes() +
3244                                nonstatic_field_size * heapOopSize;
3245
3246  next_nonstatic_field_offset = nonstatic_fields_start;
3247
3248  bool is_contended_class     = parsed_annotations->is_contended();
3249
3250  // Class is contended, pad before all the fields
3251  if (is_contended_class) {
3252    next_nonstatic_field_offset += ContendedPaddingWidth;
3253  }
3254
3255  // Compute the non-contended fields count.
3256  // The packing code below relies on these counts to determine if some field
3257  // can be squeezed into the alignment gap. Contended fields are obviously
3258  // exempt from that.
3259  unsigned int nonstatic_double_count = fac->count[NONSTATIC_DOUBLE] - fac_contended.count[NONSTATIC_DOUBLE];
3260  unsigned int nonstatic_word_count   = fac->count[NONSTATIC_WORD]   - fac_contended.count[NONSTATIC_WORD];
3261  unsigned int nonstatic_short_count  = fac->count[NONSTATIC_SHORT]  - fac_contended.count[NONSTATIC_SHORT];
3262  unsigned int nonstatic_byte_count   = fac->count[NONSTATIC_BYTE]   - fac_contended.count[NONSTATIC_BYTE];
3263  unsigned int nonstatic_oop_count    = fac->count[NONSTATIC_OOP]    - fac_contended.count[NONSTATIC_OOP];
3264
3265  // Total non-static fields count, including every contended field
3266  unsigned int nonstatic_fields_count = fac->count[NONSTATIC_DOUBLE] + fac->count[NONSTATIC_WORD] +
3267                                        fac->count[NONSTATIC_SHORT] + fac->count[NONSTATIC_BYTE] +
3268                                        fac->count[NONSTATIC_OOP];
3269
3270  bool super_has_nonstatic_fields =
3271          (_super_klass() != NULL && _super_klass->has_nonstatic_fields());
3272  bool has_nonstatic_fields = super_has_nonstatic_fields || (nonstatic_fields_count != 0);
3273
3274
3275  // Prepare list of oops for oop map generation.
3276  //
3277  // "offset" and "count" lists are describing the set of contiguous oop
3278  // regions. offset[i] is the start of the i-th region, which then has
3279  // count[i] oops following. Before we know how many regions are required,
3280  // we pessimistically allocate the maps to fit all the oops into the
3281  // distinct regions.
3282  //
3283  // TODO: We add +1 to always allocate non-zero resource arrays; we need
3284  // to figure out if we still need to do this.
3285  int* nonstatic_oop_offsets;
3286  unsigned int* nonstatic_oop_counts;
3287  unsigned int nonstatic_oop_map_count = 0;
3288  unsigned int max_nonstatic_oop_maps  = fac->count[NONSTATIC_OOP] + 1;
3289
3290  nonstatic_oop_offsets = NEW_RESOURCE_ARRAY_IN_THREAD(
3291            THREAD, int, max_nonstatic_oop_maps);
3292  nonstatic_oop_counts  = NEW_RESOURCE_ARRAY_IN_THREAD(
3293            THREAD, unsigned int, max_nonstatic_oop_maps);
3294
3295  first_nonstatic_oop_offset = 0; // will be set for first oop field
3296
3297  bool compact_fields   = CompactFields;
3298  int  allocation_style = FieldsAllocationStyle;
3299  if( allocation_style < 0 || allocation_style > 2 ) { // Out of range?
3300    assert(false, "0 <= FieldsAllocationStyle <= 2");
3301    allocation_style = 1; // Optimistic
3302  }
3303
3304  // The next classes have predefined hard-coded fields offsets
3305  // (see in JavaClasses::compute_hard_coded_offsets()).
3306  // Use default fields allocation order for them.
3307  if( (allocation_style != 0 || compact_fields ) && class_loader.is_null() &&
3308      (_class_name == vmSymbols::java_lang_AssertionStatusDirectives() ||
3309       _class_name == vmSymbols::java_lang_Class() ||
3310       _class_name == vmSymbols::java_lang_ClassLoader() ||
3311       _class_name == vmSymbols::java_lang_ref_Reference() ||
3312       _class_name == vmSymbols::java_lang_ref_SoftReference() ||
3313       _class_name == vmSymbols::java_lang_StackTraceElement() ||
3314       _class_name == vmSymbols::java_lang_String() ||
3315       _class_name == vmSymbols::java_lang_Throwable() ||
3316       _class_name == vmSymbols::java_lang_Boolean() ||
3317       _class_name == vmSymbols::java_lang_Character() ||
3318       _class_name == vmSymbols::java_lang_Float() ||
3319       _class_name == vmSymbols::java_lang_Double() ||
3320       _class_name == vmSymbols::java_lang_Byte() ||
3321       _class_name == vmSymbols::java_lang_Short() ||
3322       _class_name == vmSymbols::java_lang_Integer() ||
3323       _class_name == vmSymbols::java_lang_Long())) {
3324    allocation_style = 0;     // Allocate oops first
3325    compact_fields   = false; // Don't compact fields
3326  }
3327
3328  // Rearrange fields for a given allocation style
3329  if( allocation_style == 0 ) {
3330    // Fields order: oops, longs/doubles, ints, shorts/chars, bytes, padded fields
3331    next_nonstatic_oop_offset    = next_nonstatic_field_offset;
3332    next_nonstatic_double_offset = next_nonstatic_oop_offset +
3333                                    (nonstatic_oop_count * heapOopSize);
3334  } else if( allocation_style == 1 ) {
3335    // Fields order: longs/doubles, ints, shorts/chars, bytes, oops, padded fields
3336    next_nonstatic_double_offset = next_nonstatic_field_offset;
3337  } else if( allocation_style == 2 ) {
3338    // Fields allocation: oops fields in super and sub classes are together.
3339    if( nonstatic_field_size > 0 && _super_klass() != NULL &&
3340        _super_klass->nonstatic_oop_map_size() > 0 ) {
3341      unsigned int map_count = _super_klass->nonstatic_oop_map_count();
3342      OopMapBlock* first_map = _super_klass->start_of_nonstatic_oop_maps();
3343      OopMapBlock* last_map = first_map + map_count - 1;
3344      int next_offset = last_map->offset() + (last_map->count() * heapOopSize);
3345      if (next_offset == next_nonstatic_field_offset) {
3346        allocation_style = 0;   // allocate oops first
3347        next_nonstatic_oop_offset    = next_nonstatic_field_offset;
3348        next_nonstatic_double_offset = next_nonstatic_oop_offset +
3349                                       (nonstatic_oop_count * heapOopSize);
3350      }
3351    }
3352    if( allocation_style == 2 ) {
3353      allocation_style = 1;     // allocate oops last
3354      next_nonstatic_double_offset = next_nonstatic_field_offset;
3355    }
3356  } else {
3357    ShouldNotReachHere();
3358  }
3359
3360  int nonstatic_oop_space_count   = 0;
3361  int nonstatic_word_space_count  = 0;
3362  int nonstatic_short_space_count = 0;
3363  int nonstatic_byte_space_count  = 0;
3364  int nonstatic_oop_space_offset;
3365  int nonstatic_word_space_offset;
3366  int nonstatic_short_space_offset;
3367  int nonstatic_byte_space_offset;
3368
3369  // Try to squeeze some of the fields into the gaps due to
3370  // long/double alignment.
3371  if( nonstatic_double_count > 0 ) {
3372    int offset = next_nonstatic_double_offset;
3373    next_nonstatic_double_offset = align_size_up(offset, BytesPerLong);
3374    if( compact_fields && offset != next_nonstatic_double_offset ) {
3375      // Allocate available fields into the gap before double field.
3376      int length = next_nonstatic_double_offset - offset;
3377      assert(length == BytesPerInt, "");
3378      nonstatic_word_space_offset = offset;
3379      if( nonstatic_word_count > 0 ) {
3380        nonstatic_word_count      -= 1;
3381        nonstatic_word_space_count = 1; // Only one will fit
3382        length -= BytesPerInt;
3383        offset += BytesPerInt;
3384      }
3385      nonstatic_short_space_offset = offset;
3386      while( length >= BytesPerShort && nonstatic_short_count > 0 ) {
3387        nonstatic_short_count       -= 1;
3388        nonstatic_short_space_count += 1;
3389        length -= BytesPerShort;
3390        offset += BytesPerShort;
3391      }
3392      nonstatic_byte_space_offset = offset;
3393      while( length > 0 && nonstatic_byte_count > 0 ) {
3394        nonstatic_byte_count       -= 1;
3395        nonstatic_byte_space_count += 1;
3396        length -= 1;
3397      }
3398      // Allocate oop field in the gap if there are no other fields for that.
3399      nonstatic_oop_space_offset = offset;
3400      if( length >= heapOopSize && nonstatic_oop_count > 0 &&
3401          allocation_style != 0 ) { // when oop fields not first
3402        nonstatic_oop_count      -= 1;
3403        nonstatic_oop_space_count = 1; // Only one will fit
3404        length -= heapOopSize;
3405        offset += heapOopSize;
3406      }
3407    }
3408  }
3409
3410  next_nonstatic_word_offset  = next_nonstatic_double_offset +
3411                                (nonstatic_double_count * BytesPerLong);
3412  next_nonstatic_short_offset = next_nonstatic_word_offset +
3413                                (nonstatic_word_count * BytesPerInt);
3414  next_nonstatic_byte_offset  = next_nonstatic_short_offset +
3415                                (nonstatic_short_count * BytesPerShort);
3416  next_nonstatic_padded_offset = next_nonstatic_byte_offset +
3417                                nonstatic_byte_count;
3418
3419  // let oops jump before padding with this allocation style
3420  if( allocation_style == 1 ) {
3421    next_nonstatic_oop_offset = next_nonstatic_padded_offset;
3422    if( nonstatic_oop_count > 0 ) {
3423      next_nonstatic_oop_offset = align_size_up(next_nonstatic_oop_offset, heapOopSize);
3424    }
3425    next_nonstatic_padded_offset = next_nonstatic_oop_offset + (nonstatic_oop_count * heapOopSize);
3426  }
3427
3428  // Iterate over fields again and compute correct offsets.
3429  // The field allocation type was temporarily stored in the offset slot.
3430  // oop fields are located before non-oop fields (static and non-static).
3431  for (AllFieldStream fs(_fields, _cp); !fs.done(); fs.next()) {
3432
3433    // skip already laid out fields
3434    if (fs.is_offset_set()) continue;
3435
3436    // contended instance fields are handled below
3437    if (fs.is_contended() && !fs.access_flags().is_static()) continue;
3438
3439    int real_offset;
3440    FieldAllocationType atype = (FieldAllocationType) fs.allocation_type();
3441
3442    // pack the rest of the fields
3443    switch (atype) {
3444      case STATIC_OOP:
3445        real_offset = next_static_oop_offset;
3446        next_static_oop_offset += heapOopSize;
3447        break;
3448      case STATIC_BYTE:
3449        real_offset = next_static_byte_offset;
3450        next_static_byte_offset += 1;
3451        break;
3452      case STATIC_SHORT:
3453        real_offset = next_static_short_offset;
3454        next_static_short_offset += BytesPerShort;
3455        break;
3456      case STATIC_WORD:
3457        real_offset = next_static_word_offset;
3458        next_static_word_offset += BytesPerInt;
3459        break;
3460      case STATIC_DOUBLE:
3461        real_offset = next_static_double_offset;
3462        next_static_double_offset += BytesPerLong;
3463        break;
3464      case NONSTATIC_OOP:
3465        if( nonstatic_oop_space_count > 0 ) {
3466          real_offset = nonstatic_oop_space_offset;
3467          nonstatic_oop_space_offset += heapOopSize;
3468          nonstatic_oop_space_count  -= 1;
3469        } else {
3470          real_offset = next_nonstatic_oop_offset;
3471          next_nonstatic_oop_offset += heapOopSize;
3472        }
3473
3474        // Record this oop in the oop maps
3475        if( nonstatic_oop_map_count > 0 &&
3476            nonstatic_oop_offsets[nonstatic_oop_map_count - 1] ==
3477            real_offset -
3478            int(nonstatic_oop_counts[nonstatic_oop_map_count - 1]) *
3479            heapOopSize ) {
3480          // This oop is adjacent to the previous one, add to current oop map
3481          assert(nonstatic_oop_map_count - 1 < max_nonstatic_oop_maps, "range check");
3482          nonstatic_oop_counts[nonstatic_oop_map_count - 1] += 1;
3483        } else {
3484          // This oop is not adjacent to the previous one, create new oop map
3485          assert(nonstatic_oop_map_count < max_nonstatic_oop_maps, "range check");
3486          nonstatic_oop_offsets[nonstatic_oop_map_count] = real_offset;
3487          nonstatic_oop_counts [nonstatic_oop_map_count] = 1;
3488          nonstatic_oop_map_count += 1;
3489          if( first_nonstatic_oop_offset == 0 ) { // Undefined
3490            first_nonstatic_oop_offset = real_offset;
3491          }
3492        }
3493        break;
3494      case NONSTATIC_BYTE:
3495        if( nonstatic_byte_space_count > 0 ) {
3496          real_offset = nonstatic_byte_space_offset;
3497          nonstatic_byte_space_offset += 1;
3498          nonstatic_byte_space_count  -= 1;
3499        } else {
3500          real_offset = next_nonstatic_byte_offset;
3501          next_nonstatic_byte_offset += 1;
3502        }
3503        break;
3504      case NONSTATIC_SHORT:
3505        if( nonstatic_short_space_count > 0 ) {
3506          real_offset = nonstatic_short_space_offset;
3507          nonstatic_short_space_offset += BytesPerShort;
3508          nonstatic_short_space_count  -= 1;
3509        } else {
3510          real_offset = next_nonstatic_short_offset;
3511          next_nonstatic_short_offset += BytesPerShort;
3512        }
3513        break;
3514      case NONSTATIC_WORD:
3515        if( nonstatic_word_space_count > 0 ) {
3516          real_offset = nonstatic_word_space_offset;
3517          nonstatic_word_space_offset += BytesPerInt;
3518          nonstatic_word_space_count  -= 1;
3519        } else {
3520          real_offset = next_nonstatic_word_offset;
3521          next_nonstatic_word_offset += BytesPerInt;
3522        }
3523        break;
3524      case NONSTATIC_DOUBLE:
3525        real_offset = next_nonstatic_double_offset;
3526        next_nonstatic_double_offset += BytesPerLong;
3527        break;
3528      default:
3529        ShouldNotReachHere();
3530    }
3531    fs.set_offset(real_offset);
3532  }
3533
3534
3535  // Handle the contended cases.
3536  //
3537  // Each contended field should not intersect the cache line with another contended field.
3538  // In the absence of alignment information, we end up with pessimistically separating
3539  // the fields with full-width padding.
3540  //
3541  // Additionally, this should not break alignment for the fields, so we round the alignment up
3542  // for each field.
3543  if (nonstatic_contended_count > 0) {
3544
3545    // if there is at least one contended field, we need to have pre-padding for them
3546    next_nonstatic_padded_offset += ContendedPaddingWidth;
3547
3548    // collect all contended groups
3549    BitMap bm(_cp->size());
3550    for (AllFieldStream fs(_fields, _cp); !fs.done(); fs.next()) {
3551      // skip already laid out fields
3552      if (fs.is_offset_set()) continue;
3553
3554      if (fs.is_contended()) {
3555        bm.set_bit(fs.contended_group());
3556      }
3557    }
3558
3559    int current_group = -1;
3560    while ((current_group = (int)bm.get_next_one_offset(current_group + 1)) != (int)bm.size()) {
3561
3562      for (AllFieldStream fs(_fields, _cp); !fs.done(); fs.next()) {
3563
3564        // skip already laid out fields
3565        if (fs.is_offset_set()) continue;
3566
3567        // skip non-contended fields and fields from different group
3568        if (!fs.is_contended() || (fs.contended_group() != current_group)) continue;
3569
3570        // handle statics below
3571        if (fs.access_flags().is_static()) continue;
3572
3573        int real_offset;
3574        FieldAllocationType atype = (FieldAllocationType) fs.allocation_type();
3575
3576        switch (atype) {
3577          case NONSTATIC_BYTE:
3578            next_nonstatic_padded_offset = align_size_up(next_nonstatic_padded_offset, 1);
3579            real_offset = next_nonstatic_padded_offset;
3580            next_nonstatic_padded_offset += 1;
3581            break;
3582
3583          case NONSTATIC_SHORT:
3584            next_nonstatic_padded_offset = align_size_up(next_nonstatic_padded_offset, BytesPerShort);
3585            real_offset = next_nonstatic_padded_offset;
3586            next_nonstatic_padded_offset += BytesPerShort;
3587            break;
3588
3589          case NONSTATIC_WORD:
3590            next_nonstatic_padded_offset = align_size_up(next_nonstatic_padded_offset, BytesPerInt);
3591            real_offset = next_nonstatic_padded_offset;
3592            next_nonstatic_padded_offset += BytesPerInt;
3593            break;
3594
3595          case NONSTATIC_DOUBLE:
3596            next_nonstatic_padded_offset = align_size_up(next_nonstatic_padded_offset, BytesPerLong);
3597            real_offset = next_nonstatic_padded_offset;
3598            next_nonstatic_padded_offset += BytesPerLong;
3599            break;
3600
3601          case NONSTATIC_OOP:
3602            next_nonstatic_padded_offset = align_size_up(next_nonstatic_padded_offset, heapOopSize);
3603            real_offset = next_nonstatic_padded_offset;
3604            next_nonstatic_padded_offset += heapOopSize;
3605
3606            // Record this oop in the oop maps
3607            if( nonstatic_oop_map_count > 0 &&
3608                nonstatic_oop_offsets[nonstatic_oop_map_count - 1] ==
3609                real_offset -
3610                int(nonstatic_oop_counts[nonstatic_oop_map_count - 1]) *
3611                heapOopSize ) {
3612              // This oop is adjacent to the previous one, add to current oop map
3613              assert(nonstatic_oop_map_count - 1 < max_nonstatic_oop_maps, "range check");
3614              nonstatic_oop_counts[nonstatic_oop_map_count - 1] += 1;
3615            } else {
3616              // This oop is not adjacent to the previous one, create new oop map
3617              assert(nonstatic_oop_map_count < max_nonstatic_oop_maps, "range check");
3618              nonstatic_oop_offsets[nonstatic_oop_map_count] = real_offset;
3619              nonstatic_oop_counts [nonstatic_oop_map_count] = 1;
3620              nonstatic_oop_map_count += 1;
3621              if( first_nonstatic_oop_offset == 0 ) { // Undefined
3622                first_nonstatic_oop_offset = real_offset;
3623              }
3624            }
3625            break;
3626
3627          default:
3628            ShouldNotReachHere();
3629        }
3630
3631        if (fs.contended_group() == 0) {
3632          // Contended group defines the equivalence class over the fields:
3633          // the fields within the same contended group are not inter-padded.
3634          // The only exception is default group, which does not incur the
3635          // equivalence, and so requires intra-padding.
3636          next_nonstatic_padded_offset += ContendedPaddingWidth;
3637        }
3638
3639        fs.set_offset(real_offset);
3640      } // for
3641
3642      // Start laying out the next group.
3643      // Note that this will effectively pad the last group in the back;
3644      // this is expected to alleviate memory contention effects for
3645      // subclass fields and/or adjacent object.
3646      // If this was the default group, the padding is already in place.
3647      if (current_group != 0) {
3648        next_nonstatic_padded_offset += ContendedPaddingWidth;
3649      }
3650    }
3651
3652    // handle static fields
3653  }
3654
3655  // Entire class is contended, pad in the back.
3656  // This helps to alleviate memory contention effects for subclass fields
3657  // and/or adjacent object.
3658  if (is_contended_class) {
3659    next_nonstatic_padded_offset += ContendedPaddingWidth;
3660  }
3661
3662  int notaligned_nonstatic_fields_end = next_nonstatic_padded_offset;
3663
3664  int nonstatic_fields_end      = align_size_up(notaligned_nonstatic_fields_end, heapOopSize);
3665  int instance_end              = align_size_up(notaligned_nonstatic_fields_end, wordSize);
3666  int static_fields_end         = align_size_up(next_static_byte_offset, wordSize);
3667
3668  int static_field_size         = (static_fields_end -
3669                                   InstanceMirrorKlass::offset_of_static_fields()) / wordSize;
3670  nonstatic_field_size          = nonstatic_field_size +
3671                                  (nonstatic_fields_end - nonstatic_fields_start) / heapOopSize;
3672
3673  int instance_size             = align_object_size(instance_end / wordSize);
3674
3675  assert(instance_size == align_object_size(align_size_up(
3676         (instanceOopDesc::base_offset_in_bytes() + nonstatic_field_size*heapOopSize),
3677          wordSize) / wordSize), "consistent layout helper value");
3678
3679  // Invariant: nonstatic_field end/start should only change if there are
3680  // nonstatic fields in the class, or if the class is contended. We compare
3681  // against the non-aligned value, so that end alignment will not fail the
3682  // assert without actually having the fields.
3683  assert((notaligned_nonstatic_fields_end == nonstatic_fields_start) ||
3684         is_contended_class ||
3685         (nonstatic_fields_count > 0), "double-check nonstatic start/end");
3686
3687  // Number of non-static oop map blocks allocated at end of klass.
3688  const unsigned int total_oop_map_count =
3689    compute_oop_map_count(_super_klass, nonstatic_oop_map_count,
3690                          first_nonstatic_oop_offset);
3691
3692#ifndef PRODUCT
3693  if (PrintFieldLayout) {
3694    print_field_layout(_class_name,
3695          _fields,
3696          _cp,
3697          instance_size,
3698          nonstatic_fields_start,
3699          nonstatic_fields_end,
3700          static_fields_end);
3701  }
3702
3703#endif
3704  // Pass back information needed for InstanceKlass creation
3705  info->nonstatic_oop_offsets = nonstatic_oop_offsets;
3706  info->nonstatic_oop_counts = nonstatic_oop_counts;
3707  info->nonstatic_oop_map_count = nonstatic_oop_map_count;
3708  info->total_oop_map_count = total_oop_map_count;
3709  info->instance_size = instance_size;
3710  info->static_field_size = static_field_size;
3711  info->nonstatic_field_size = nonstatic_field_size;
3712  info->has_nonstatic_fields = has_nonstatic_fields;
3713}
3714
3715
3716instanceKlassHandle ClassFileParser::parseClassFile(Symbol* name,
3717                                                    ClassLoaderData* loader_data,
3718                                                    Handle protection_domain,
3719                                                    KlassHandle host_klass,
3720                                                    GrowableArray<Handle>* cp_patches,
3721                                                    TempNewSymbol& parsed_name,
3722                                                    bool verify,
3723                                                    TRAPS) {
3724
3725  // When a retransformable agent is attached, JVMTI caches the
3726  // class bytes that existed before the first retransformation.
3727  // If RedefineClasses() was used before the retransformable
3728  // agent attached, then the cached class bytes may not be the
3729  // original class bytes.
3730  JvmtiCachedClassFileData *cached_class_file = NULL;
3731  Handle class_loader(THREAD, loader_data->class_loader());
3732  bool has_default_methods = false;
3733  bool declares_default_methods = false;
3734  ResourceMark rm(THREAD);
3735
3736  ClassFileStream* cfs = stream();
3737  // Timing
3738  assert(THREAD->is_Java_thread(), "must be a JavaThread");
3739  JavaThread* jt = (JavaThread*) THREAD;
3740
3741  PerfClassTraceTime ctimer(ClassLoader::perf_class_parse_time(),
3742                            ClassLoader::perf_class_parse_selftime(),
3743                            NULL,
3744                            jt->get_thread_stat()->perf_recursion_counts_addr(),
3745                            jt->get_thread_stat()->perf_timers_addr(),
3746                            PerfClassTraceTime::PARSE_CLASS);
3747
3748  init_parsed_class_attributes(loader_data);
3749
3750  if (JvmtiExport::should_post_class_file_load_hook()) {
3751    // Get the cached class file bytes (if any) from the class that
3752    // is being redefined or retransformed. We use jvmti_thread_state()
3753    // instead of JvmtiThreadState::state_for(jt) so we don't allocate
3754    // a JvmtiThreadState any earlier than necessary. This will help
3755    // avoid the bug described by 7126851.
3756    JvmtiThreadState *state = jt->jvmti_thread_state();
3757    if (state != NULL) {
3758      KlassHandle *h_class_being_redefined =
3759                     state->get_class_being_redefined();
3760      if (h_class_being_redefined != NULL) {
3761        instanceKlassHandle ikh_class_being_redefined =
3762          instanceKlassHandle(THREAD, (*h_class_being_redefined)());
3763        cached_class_file = ikh_class_being_redefined->get_cached_class_file();
3764      }
3765    }
3766
3767    unsigned char* ptr = cfs->buffer();
3768    unsigned char* end_ptr = cfs->buffer() + cfs->length();
3769
3770    JvmtiExport::post_class_file_load_hook(name, class_loader(), protection_domain,
3771                                           &ptr, &end_ptr, &cached_class_file);
3772
3773    if (ptr != cfs->buffer()) {
3774      // JVMTI agent has modified class file data.
3775      // Set new class file stream using JVMTI agent modified
3776      // class file data.
3777      cfs = new ClassFileStream(ptr, end_ptr - ptr, cfs->source());
3778      set_stream(cfs);
3779    }
3780  }
3781
3782  _host_klass = host_klass;
3783  _cp_patches = cp_patches;
3784
3785  instanceKlassHandle nullHandle;
3786
3787  // Figure out whether we can skip format checking (matching classic VM behavior)
3788  if (DumpSharedSpaces) {
3789    // verify == true means it's a 'remote' class (i.e., non-boot class)
3790    // Verification decision is based on BytecodeVerificationRemote flag
3791    // for those classes.
3792    _need_verify = (verify) ? BytecodeVerificationRemote :
3793                              BytecodeVerificationLocal;
3794  } else {
3795    _need_verify = Verifier::should_verify_for(class_loader(), verify);
3796  }
3797
3798  // Set the verify flag in stream
3799  cfs->set_verify(_need_verify);
3800
3801  // Save the class file name for easier error message printing.
3802  _class_name = (name != NULL) ? name : vmSymbols::unknown_class_name();
3803
3804  cfs->guarantee_more(8, CHECK_(nullHandle));  // magic, major, minor
3805  // Magic value
3806  u4 magic = cfs->get_u4_fast();
3807  guarantee_property(magic == JAVA_CLASSFILE_MAGIC,
3808                     "Incompatible magic value %u in class file %s",
3809                     magic, CHECK_(nullHandle));
3810
3811  // Version numbers
3812  u2 minor_version = cfs->get_u2_fast();
3813  u2 major_version = cfs->get_u2_fast();
3814
3815  if (DumpSharedSpaces && major_version < JAVA_1_5_VERSION) {
3816    ResourceMark rm;
3817    warning("Pre JDK 1.5 class not supported by CDS: %u.%u %s",
3818            major_version,  minor_version, name->as_C_string());
3819    Exceptions::fthrow(
3820      THREAD_AND_LOCATION,
3821      vmSymbols::java_lang_UnsupportedClassVersionError(),
3822      "Unsupported major.minor version for dump time %u.%u",
3823      major_version,
3824      minor_version);
3825  }
3826
3827  // Check version numbers - we check this even with verifier off
3828  if (!is_supported_version(major_version, minor_version)) {
3829    if (name == NULL) {
3830      Exceptions::fthrow(
3831        THREAD_AND_LOCATION,
3832        vmSymbols::java_lang_UnsupportedClassVersionError(),
3833        "Unsupported class file version %u.%u, "
3834        "this version of the Java Runtime only recognizes class file versions up to %u.%u",
3835        major_version,
3836        minor_version,
3837        JAVA_MAX_SUPPORTED_VERSION,
3838        JAVA_MAX_SUPPORTED_MINOR_VERSION);
3839    } else {
3840      ResourceMark rm(THREAD);
3841      Exceptions::fthrow(
3842        THREAD_AND_LOCATION,
3843        vmSymbols::java_lang_UnsupportedClassVersionError(),
3844        "%s has been compiled by a more recent version of the Java Runtime (class file version %u.%u), "
3845        "this version of the Java Runtime only recognizes class file versions up to %u.%u",
3846        name->as_C_string(),
3847        major_version,
3848        minor_version,
3849        JAVA_MAX_SUPPORTED_VERSION,
3850        JAVA_MAX_SUPPORTED_MINOR_VERSION);
3851    }
3852    return nullHandle;
3853  }
3854
3855  _major_version = major_version;
3856  _minor_version = minor_version;
3857
3858
3859  // Check if verification needs to be relaxed for this class file
3860  // Do not restrict it to jdk1.0 or jdk1.1 to maintain backward compatibility (4982376)
3861  _relax_verify = Verifier::relax_verify_for(class_loader());
3862
3863  // Constant pool
3864  constantPoolHandle cp = parse_constant_pool(CHECK_(nullHandle));
3865
3866  int cp_size = cp->length();
3867
3868  cfs->guarantee_more(8, CHECK_(nullHandle));  // flags, this_class, super_class, infs_len
3869
3870  // Access flags
3871  AccessFlags access_flags;
3872  jint flags = cfs->get_u2_fast() & JVM_RECOGNIZED_CLASS_MODIFIERS;
3873
3874  if ((flags & JVM_ACC_INTERFACE) && _major_version < JAVA_6_VERSION) {
3875    // Set abstract bit for old class files for backward compatibility
3876    flags |= JVM_ACC_ABSTRACT;
3877  }
3878  verify_legal_class_modifiers(flags, CHECK_(nullHandle));
3879  access_flags.set_flags(flags);
3880
3881  // This class and superclass
3882  u2 this_class_index = cfs->get_u2_fast();
3883  check_property(
3884    valid_cp_range(this_class_index, cp_size) &&
3885      cp->tag_at(this_class_index).is_unresolved_klass(),
3886    "Invalid this class index %u in constant pool in class file %s",
3887    this_class_index, CHECK_(nullHandle));
3888
3889  Symbol*  class_name  = cp->klass_name_at(this_class_index);
3890  assert(class_name != NULL, "class_name can't be null");
3891
3892  // It's important to set parsed_name *before* resolving the super class.
3893  // (it's used for cleanup by the caller if parsing fails)
3894  parsed_name = class_name;
3895  // parsed_name is returned and can be used if there's an error, so add to
3896  // its reference count.  Caller will decrement the refcount.
3897  parsed_name->increment_refcount();
3898
3899  // Update _class_name which could be null previously to be class_name
3900  _class_name = class_name;
3901
3902  // Don't need to check whether this class name is legal or not.
3903  // It has been checked when constant pool is parsed.
3904  // However, make sure it is not an array type.
3905  if (_need_verify) {
3906    guarantee_property(class_name->byte_at(0) != JVM_SIGNATURE_ARRAY,
3907                       "Bad class name in class file %s",
3908                       CHECK_(nullHandle));
3909  }
3910
3911  Klass* preserve_this_klass;   // for storing result across HandleMark
3912
3913  // release all handles when parsing is done
3914  { HandleMark hm(THREAD);
3915
3916    // Checks if name in class file matches requested name
3917    if (name != NULL && class_name != name) {
3918      ResourceMark rm(THREAD);
3919      Exceptions::fthrow(
3920        THREAD_AND_LOCATION,
3921        vmSymbols::java_lang_NoClassDefFoundError(),
3922        "%s (wrong name: %s)",
3923        name->as_C_string(),
3924        class_name->as_C_string()
3925      );
3926      return nullHandle;
3927    }
3928
3929    if (TraceClassLoadingPreorder) {
3930      tty->print("[Loading %s", (name != NULL) ? name->as_klass_external_name() : "NoName");
3931      if (cfs->source() != NULL) tty->print(" from %s", cfs->source());
3932      tty->print_cr("]");
3933    }
3934#if INCLUDE_CDS
3935    if (DumpLoadedClassList != NULL && cfs->source() != NULL && classlist_file->is_open()) {
3936      // Only dump the classes that can be stored into CDS archive
3937      if (SystemDictionaryShared::is_sharing_possible(loader_data)) {
3938        if (name != NULL) {
3939          ResourceMark rm(THREAD);
3940          classlist_file->print_cr("%s", name->as_C_string());
3941          classlist_file->flush();
3942        }
3943      }
3944    }
3945#endif
3946
3947    u2 super_class_index = cfs->get_u2_fast();
3948    instanceKlassHandle super_klass = parse_super_class(super_class_index,
3949                                                        CHECK_NULL);
3950
3951    // Interfaces
3952    u2 itfs_len = cfs->get_u2_fast();
3953    Array<Klass*>* local_interfaces =
3954      parse_interfaces(itfs_len, protection_domain, _class_name,
3955                       &has_default_methods, CHECK_(nullHandle));
3956
3957    u2 java_fields_count = 0;
3958    // Fields (offsets are filled in later)
3959    FieldAllocationCount fac;
3960    Array<u2>* fields = parse_fields(class_name,
3961                                     access_flags.is_interface(),
3962                                     &fac, &java_fields_count,
3963                                     CHECK_(nullHandle));
3964    // Methods
3965    bool has_final_method = false;
3966    AccessFlags promoted_flags;
3967    promoted_flags.set_flags(0);
3968    Array<Method*>* methods = parse_methods(access_flags.is_interface(),
3969                                            &promoted_flags,
3970                                            &has_final_method,
3971                                            &declares_default_methods,
3972                                            CHECK_(nullHandle));
3973
3974    if (declares_default_methods) {
3975      has_default_methods = true;
3976    }
3977
3978    // Additional attributes
3979    ClassAnnotationCollector parsed_annotations;
3980    parse_classfile_attributes(&parsed_annotations, CHECK_(nullHandle));
3981
3982    // Finalize the Annotations metadata object,
3983    // now that all annotation arrays have been created.
3984    create_combined_annotations(CHECK_(nullHandle));
3985
3986    // Make sure this is the end of class file stream
3987    guarantee_property(cfs->at_eos(), "Extra bytes at the end of class file %s", CHECK_(nullHandle));
3988
3989    // We check super class after class file is parsed and format is checked
3990    if (super_class_index > 0 && super_klass.is_null()) {
3991      Symbol*  sk  = cp->klass_name_at(super_class_index);
3992      if (access_flags.is_interface()) {
3993        // Before attempting to resolve the superclass, check for class format
3994        // errors not checked yet.
3995        guarantee_property(sk == vmSymbols::java_lang_Object(),
3996                           "Interfaces must have java.lang.Object as superclass in class file %s",
3997                           CHECK_(nullHandle));
3998      }
3999      Klass* k = SystemDictionary::resolve_super_or_fail(class_name, sk,
4000                                                         class_loader,
4001                                                         protection_domain,
4002                                                         true,
4003                                                         CHECK_(nullHandle));
4004
4005      KlassHandle kh (THREAD, k);
4006      super_klass = instanceKlassHandle(THREAD, kh());
4007    }
4008    if (super_klass.not_null()) {
4009
4010      if (super_klass->has_default_methods()) {
4011        has_default_methods = true;
4012      }
4013
4014      if (super_klass->is_interface()) {
4015        ResourceMark rm(THREAD);
4016        Exceptions::fthrow(
4017          THREAD_AND_LOCATION,
4018          vmSymbols::java_lang_IncompatibleClassChangeError(),
4019          "class %s has interface %s as super class",
4020          class_name->as_klass_external_name(),
4021          super_klass->external_name()
4022        );
4023        return nullHandle;
4024      }
4025      // Make sure super class is not final
4026      if (super_klass->is_final()) {
4027        THROW_MSG_(vmSymbols::java_lang_VerifyError(), "Cannot inherit from final class", nullHandle);
4028      }
4029    }
4030
4031    // save super klass for error handling.
4032    _super_klass = super_klass;
4033
4034    // Compute the transitive list of all unique interfaces implemented by this class
4035    _transitive_interfaces =
4036          compute_transitive_interfaces(super_klass, local_interfaces, CHECK_(nullHandle));
4037
4038    // sort methods
4039    intArray* method_ordering = sort_methods(methods);
4040
4041    // promote flags from parse_methods() to the klass' flags
4042    access_flags.add_promoted_flags(promoted_flags.as_int());
4043
4044    // Size of Java vtable (in words)
4045    int vtable_size = 0;
4046    int itable_size = 0;
4047    int num_miranda_methods = 0;
4048
4049    GrowableArray<Method*> all_mirandas(20);
4050
4051    klassVtable::compute_vtable_size_and_num_mirandas(
4052        &vtable_size, &num_miranda_methods, &all_mirandas, super_klass(), methods,
4053        access_flags, class_loader, class_name, local_interfaces,
4054                                                      CHECK_(nullHandle));
4055
4056    // Size of Java itable (in words)
4057    itable_size = access_flags.is_interface() ? 0 : klassItable::compute_itable_size(_transitive_interfaces);
4058
4059    FieldLayoutInfo info;
4060    layout_fields(class_loader, &fac, &parsed_annotations, &info, CHECK_NULL);
4061
4062    int total_oop_map_size2 =
4063          InstanceKlass::nonstatic_oop_map_size(info.total_oop_map_count);
4064
4065    // Compute reference type
4066    ReferenceType rt;
4067    if (super_klass() == NULL) {
4068      rt = REF_NONE;
4069    } else {
4070      rt = super_klass->reference_type();
4071    }
4072
4073    // We can now create the basic Klass* for this klass
4074    _klass = InstanceKlass::allocate_instance_klass(loader_data,
4075                                                    vtable_size,
4076                                                    itable_size,
4077                                                    info.static_field_size,
4078                                                    total_oop_map_size2,
4079                                                    rt,
4080                                                    access_flags,
4081                                                    name,
4082                                                    super_klass(),
4083                                                    !host_klass.is_null(),
4084                                                    CHECK_(nullHandle));
4085    instanceKlassHandle this_klass (THREAD, _klass);
4086
4087    assert(this_klass->static_field_size() == info.static_field_size, "sanity");
4088    assert(this_klass->nonstatic_oop_map_count() == info.total_oop_map_count,
4089           "sanity");
4090
4091    // Fill in information already parsed
4092    this_klass->set_should_verify_class(verify);
4093    jint lh = Klass::instance_layout_helper(info.instance_size, false);
4094    this_klass->set_layout_helper(lh);
4095    assert(this_klass->oop_is_instance(), "layout is correct");
4096    assert(this_klass->size_helper() == info.instance_size, "correct size_helper");
4097    // Not yet: supers are done below to support the new subtype-checking fields
4098    //this_klass->set_super(super_klass());
4099    this_klass->set_class_loader_data(loader_data);
4100    this_klass->set_nonstatic_field_size(info.nonstatic_field_size);
4101    this_klass->set_has_nonstatic_fields(info.has_nonstatic_fields);
4102    this_klass->set_static_oop_field_count(fac.count[STATIC_OOP]);
4103
4104    apply_parsed_class_metadata(this_klass, java_fields_count, CHECK_NULL);
4105
4106    if (has_final_method) {
4107      this_klass->set_has_final_method();
4108    }
4109    this_klass->copy_method_ordering(method_ordering, CHECK_NULL);
4110    // The InstanceKlass::_methods_jmethod_ids cache
4111    // is managed on the assumption that the initial cache
4112    // size is equal to the number of methods in the class. If
4113    // that changes, then InstanceKlass::idnum_can_increment()
4114    // has to be changed accordingly.
4115    this_klass->set_initial_method_idnum(methods->length());
4116    this_klass->set_name(cp->klass_name_at(this_class_index));
4117    if (is_anonymous())  // I am well known to myself
4118      cp->klass_at_put(this_class_index, this_klass()); // eagerly resolve
4119
4120    this_klass->set_minor_version(minor_version);
4121    this_klass->set_major_version(major_version);
4122    this_klass->set_has_default_methods(has_default_methods);
4123    this_klass->set_declares_default_methods(declares_default_methods);
4124
4125    if (!host_klass.is_null()) {
4126      assert (this_klass->is_anonymous(), "should be the same");
4127      this_klass->set_host_klass(host_klass());
4128    }
4129
4130    // Set up Method*::intrinsic_id as soon as we know the names of methods.
4131    // (We used to do this lazily, but now we query it in Rewriter,
4132    // which is eagerly done for every method, so we might as well do it now,
4133    // when everything is fresh in memory.)
4134    if (Method::klass_id_for_intrinsics(this_klass()) != vmSymbols::NO_SID) {
4135      for (int j = 0; j < methods->length(); j++) {
4136        methods->at(j)->init_intrinsic_id();
4137      }
4138    }
4139
4140    if (cached_class_file != NULL) {
4141      // JVMTI: we have an InstanceKlass now, tell it about the cached bytes
4142      this_klass->set_cached_class_file(cached_class_file);
4143    }
4144
4145    // Fill in field values obtained by parse_classfile_attributes
4146    if (parsed_annotations.has_any_annotations())
4147      parsed_annotations.apply_to(this_klass);
4148    apply_parsed_class_attributes(this_klass);
4149
4150    // Miranda methods
4151    if ((num_miranda_methods > 0) ||
4152        // if this class introduced new miranda methods or
4153        (super_klass.not_null() && (super_klass->has_miranda_methods()))
4154        // super class exists and this class inherited miranda methods
4155        ) {
4156      this_klass->set_has_miranda_methods(); // then set a flag
4157    }
4158
4159    // Fill in information needed to compute superclasses.
4160    this_klass->initialize_supers(super_klass(), CHECK_(nullHandle));
4161
4162    // Initialize itable offset tables
4163    klassItable::setup_itable_offset_table(this_klass);
4164
4165    // Compute transitive closure of interfaces this class implements
4166    // Do final class setup
4167    fill_oop_maps(this_klass, info.nonstatic_oop_map_count, info.nonstatic_oop_offsets, info.nonstatic_oop_counts);
4168
4169    // Fill in has_finalizer, has_vanilla_constructor, and layout_helper
4170    set_precomputed_flags(this_klass);
4171
4172    // reinitialize modifiers, using the InnerClasses attribute
4173    int computed_modifiers = this_klass->compute_modifier_flags(CHECK_(nullHandle));
4174    this_klass->set_modifier_flags(computed_modifiers);
4175
4176    // check if this class can access its super class
4177    check_super_class_access(this_klass, CHECK_(nullHandle));
4178
4179    // check if this class can access its superinterfaces
4180    check_super_interface_access(this_klass, CHECK_(nullHandle));
4181
4182    // check if this class overrides any final method
4183    check_final_method_override(this_klass, CHECK_(nullHandle));
4184
4185    // check that if this class is an interface then it doesn't have static methods
4186    if (this_klass->is_interface()) {
4187      /* An interface in a JAVA 8 classfile can be static */
4188      if (_major_version < JAVA_8_VERSION) {
4189        check_illegal_static_method(this_klass, CHECK_(nullHandle));
4190      }
4191    }
4192
4193    // Allocate mirror and initialize static fields
4194    java_lang_Class::create_mirror(this_klass, class_loader, protection_domain,
4195                                   CHECK_(nullHandle));
4196
4197    // Generate any default methods - default methods are interface methods
4198    // that have a default implementation.  This is new with Lambda project.
4199    if (has_default_methods ) {
4200      DefaultMethods::generate_default_methods(
4201          this_klass(), &all_mirandas, CHECK_(nullHandle));
4202    }
4203
4204    // Update the loader_data graph.
4205    record_defined_class_dependencies(this_klass, CHECK_NULL);
4206
4207    ClassLoadingService::notify_class_loaded(InstanceKlass::cast(this_klass()),
4208                                             false /* not shared class */);
4209
4210    if (TraceClassLoading) {
4211      ResourceMark rm;
4212      // print in a single call to reduce interleaving of output
4213      if (cfs->source() != NULL) {
4214        tty->print("[Loaded %s from %s]\n", this_klass->external_name(),
4215                   cfs->source());
4216      } else if (class_loader.is_null()) {
4217        Klass* caller =
4218            THREAD->is_Java_thread()
4219                ? ((JavaThread*)THREAD)->security_get_caller_class(1)
4220                : NULL;
4221        // caller can be NULL, for example, during a JVMTI VM_Init hook
4222        if (caller != NULL) {
4223          tty->print("[Loaded %s by instance of %s]\n",
4224                     this_klass->external_name(),
4225                     InstanceKlass::cast(caller)->external_name());
4226        } else {
4227          tty->print("[Loaded %s]\n", this_klass->external_name());
4228        }
4229      } else {
4230        tty->print("[Loaded %s from %s]\n", this_klass->external_name(),
4231                   InstanceKlass::cast(class_loader->klass())->external_name());
4232      }
4233    }
4234
4235    if (TraceClassResolution) {
4236      ResourceMark rm;
4237      // print out the superclass.
4238      const char * from = this_klass()->external_name();
4239      if (this_klass->java_super() != NULL) {
4240        tty->print("RESOLVE %s %s (super)\n", from, InstanceKlass::cast(this_klass->java_super())->external_name());
4241      }
4242      // print out each of the interface classes referred to by this class.
4243      Array<Klass*>* local_interfaces = this_klass->local_interfaces();
4244      if (local_interfaces != NULL) {
4245        int length = local_interfaces->length();
4246        for (int i = 0; i < length; i++) {
4247          Klass* k = local_interfaces->at(i);
4248          InstanceKlass* to_class = InstanceKlass::cast(k);
4249          const char * to = to_class->external_name();
4250          tty->print("RESOLVE %s %s (interface)\n", from, to);
4251        }
4252      }
4253    }
4254
4255    // preserve result across HandleMark
4256    preserve_this_klass = this_klass();
4257  }
4258
4259  // Create new handle outside HandleMark (might be needed for
4260  // Extended Class Redefinition)
4261  instanceKlassHandle this_klass (THREAD, preserve_this_klass);
4262  debug_only(this_klass->verify();)
4263
4264  // Clear class if no error has occurred so destructor doesn't deallocate it
4265  _klass = NULL;
4266  return this_klass;
4267}
4268
4269// Destructor to clean up if there's an error
4270ClassFileParser::~ClassFileParser() {
4271  MetadataFactory::free_metadata(_loader_data, _cp);
4272  MetadataFactory::free_array<u2>(_loader_data, _fields);
4273
4274  // Free methods
4275  InstanceKlass::deallocate_methods(_loader_data, _methods);
4276
4277  // beware of the Universe::empty_blah_array!!
4278  if (_inner_classes != Universe::the_empty_short_array()) {
4279    MetadataFactory::free_array<u2>(_loader_data, _inner_classes);
4280  }
4281
4282  // Free interfaces
4283  InstanceKlass::deallocate_interfaces(_loader_data, _super_klass(),
4284                                       _local_interfaces, _transitive_interfaces);
4285
4286  if (_combined_annotations != NULL) {
4287    // After all annotations arrays have been created, they are installed into the
4288    // Annotations object that will be assigned to the InstanceKlass being created.
4289
4290    // Deallocate the Annotations object and the installed annotations arrays.
4291    _combined_annotations->deallocate_contents(_loader_data);
4292
4293    // If the _combined_annotations pointer is non-NULL,
4294    // then the other annotations fields should have been cleared.
4295    assert(_annotations             == NULL, "Should have been cleared");
4296    assert(_type_annotations        == NULL, "Should have been cleared");
4297    assert(_fields_annotations      == NULL, "Should have been cleared");
4298    assert(_fields_type_annotations == NULL, "Should have been cleared");
4299  } else {
4300    // If the annotations arrays were not installed into the Annotations object,
4301    // then they have to be deallocated explicitly.
4302    MetadataFactory::free_array<u1>(_loader_data, _annotations);
4303    MetadataFactory::free_array<u1>(_loader_data, _type_annotations);
4304    Annotations::free_contents(_loader_data, _fields_annotations);
4305    Annotations::free_contents(_loader_data, _fields_type_annotations);
4306  }
4307
4308  clear_class_metadata();
4309
4310  // deallocate the klass if already created.  Don't directly deallocate, but add
4311  // to the deallocate list so that the klass is removed from the CLD::_klasses list
4312  // at a safepoint.
4313  if (_klass != NULL) {
4314    _loader_data->add_to_deallocate_list(_klass);
4315  }
4316  _klass = NULL;
4317}
4318
4319void ClassFileParser::print_field_layout(Symbol* name,
4320                                         Array<u2>* fields,
4321                                         constantPoolHandle cp,
4322                                         int instance_size,
4323                                         int instance_fields_start,
4324                                         int instance_fields_end,
4325                                         int static_fields_end) {
4326  tty->print("%s: field layout\n", name->as_klass_external_name());
4327  tty->print("  @%3d %s\n", instance_fields_start, "--- instance fields start ---");
4328  for (AllFieldStream fs(fields, cp); !fs.done(); fs.next()) {
4329    if (!fs.access_flags().is_static()) {
4330      tty->print("  @%3d \"%s\" %s\n",
4331          fs.offset(),
4332          fs.name()->as_klass_external_name(),
4333          fs.signature()->as_klass_external_name());
4334    }
4335  }
4336  tty->print("  @%3d %s\n", instance_fields_end, "--- instance fields end ---");
4337  tty->print("  @%3d %s\n", instance_size * wordSize, "--- instance ends ---");
4338  tty->print("  @%3d %s\n", InstanceMirrorKlass::offset_of_static_fields(), "--- static fields start ---");
4339  for (AllFieldStream fs(fields, cp); !fs.done(); fs.next()) {
4340    if (fs.access_flags().is_static()) {
4341      tty->print("  @%3d \"%s\" %s\n",
4342          fs.offset(),
4343          fs.name()->as_klass_external_name(),
4344          fs.signature()->as_klass_external_name());
4345    }
4346  }
4347  tty->print("  @%3d %s\n", static_fields_end, "--- static fields end ---");
4348  tty->print("\n");
4349}
4350
4351unsigned int
4352ClassFileParser::compute_oop_map_count(instanceKlassHandle super,
4353                                       unsigned int nonstatic_oop_map_count,
4354                                       int first_nonstatic_oop_offset) {
4355  unsigned int map_count =
4356    super.is_null() ? 0 : super->nonstatic_oop_map_count();
4357  if (nonstatic_oop_map_count > 0) {
4358    // We have oops to add to map
4359    if (map_count == 0) {
4360      map_count = nonstatic_oop_map_count;
4361    } else {
4362      // Check whether we should add a new map block or whether the last one can
4363      // be extended
4364      OopMapBlock* const first_map = super->start_of_nonstatic_oop_maps();
4365      OopMapBlock* const last_map = first_map + map_count - 1;
4366
4367      int next_offset = last_map->offset() + last_map->count() * heapOopSize;
4368      if (next_offset == first_nonstatic_oop_offset) {
4369        // There is no gap bettwen superklass's last oop field and first
4370        // local oop field, merge maps.
4371        nonstatic_oop_map_count -= 1;
4372      } else {
4373        // Superklass didn't end with a oop field, add extra maps
4374        assert(next_offset < first_nonstatic_oop_offset, "just checking");
4375      }
4376      map_count += nonstatic_oop_map_count;
4377    }
4378  }
4379  return map_count;
4380}
4381
4382
4383void ClassFileParser::fill_oop_maps(instanceKlassHandle k,
4384                                    unsigned int nonstatic_oop_map_count,
4385                                    int* nonstatic_oop_offsets,
4386                                    unsigned int* nonstatic_oop_counts) {
4387  OopMapBlock* this_oop_map = k->start_of_nonstatic_oop_maps();
4388  const InstanceKlass* const super = k->superklass();
4389  const unsigned int super_count = super ? super->nonstatic_oop_map_count() : 0;
4390  if (super_count > 0) {
4391    // Copy maps from superklass
4392    OopMapBlock* super_oop_map = super->start_of_nonstatic_oop_maps();
4393    for (unsigned int i = 0; i < super_count; ++i) {
4394      *this_oop_map++ = *super_oop_map++;
4395    }
4396  }
4397
4398  if (nonstatic_oop_map_count > 0) {
4399    if (super_count + nonstatic_oop_map_count > k->nonstatic_oop_map_count()) {
4400      // The counts differ because there is no gap between superklass's last oop
4401      // field and the first local oop field.  Extend the last oop map copied
4402      // from the superklass instead of creating new one.
4403      nonstatic_oop_map_count--;
4404      nonstatic_oop_offsets++;
4405      this_oop_map--;
4406      this_oop_map->set_count(this_oop_map->count() + *nonstatic_oop_counts++);
4407      this_oop_map++;
4408    }
4409
4410    // Add new map blocks, fill them
4411    while (nonstatic_oop_map_count-- > 0) {
4412      this_oop_map->set_offset(*nonstatic_oop_offsets++);
4413      this_oop_map->set_count(*nonstatic_oop_counts++);
4414      this_oop_map++;
4415    }
4416    assert(k->start_of_nonstatic_oop_maps() + k->nonstatic_oop_map_count() ==
4417           this_oop_map, "sanity");
4418  }
4419}
4420
4421
4422void ClassFileParser::set_precomputed_flags(instanceKlassHandle k) {
4423  Klass* super = k->super();
4424
4425  // Check if this klass has an empty finalize method (i.e. one with return bytecode only),
4426  // in which case we don't have to register objects as finalizable
4427  if (!_has_empty_finalizer) {
4428    if (_has_finalizer ||
4429        (super != NULL && super->has_finalizer())) {
4430      k->set_has_finalizer();
4431    }
4432  }
4433
4434#ifdef ASSERT
4435  bool f = false;
4436  Method* m = k->lookup_method(vmSymbols::finalize_method_name(),
4437                                 vmSymbols::void_method_signature());
4438  if (m != NULL && !m->is_empty_method()) {
4439      f = true;
4440  }
4441
4442  // Spec doesn't prevent agent from redefinition of empty finalizer.
4443  // Despite the fact that it's generally bad idea and redefined finalizer
4444  // will not work as expected we shouldn't abort vm in this case
4445  if (!k->has_redefined_this_or_super()) {
4446    assert(f == k->has_finalizer(), "inconsistent has_finalizer");
4447  }
4448#endif
4449
4450  // Check if this klass supports the java.lang.Cloneable interface
4451  if (SystemDictionary::Cloneable_klass_loaded()) {
4452    if (k->is_subtype_of(SystemDictionary::Cloneable_klass())) {
4453      k->set_is_cloneable();
4454    }
4455  }
4456
4457  // Check if this klass has a vanilla default constructor
4458  if (super == NULL) {
4459    // java.lang.Object has empty default constructor
4460    k->set_has_vanilla_constructor();
4461  } else {
4462    if (super->has_vanilla_constructor() &&
4463        _has_vanilla_constructor) {
4464      k->set_has_vanilla_constructor();
4465    }
4466#ifdef ASSERT
4467    bool v = false;
4468    if (super->has_vanilla_constructor()) {
4469      Method* constructor = k->find_method(vmSymbols::object_initializer_name(
4470), vmSymbols::void_method_signature());
4471      if (constructor != NULL && constructor->is_vanilla_constructor()) {
4472        v = true;
4473      }
4474    }
4475    assert(v == k->has_vanilla_constructor(), "inconsistent has_vanilla_constructor");
4476#endif
4477  }
4478
4479  // If it cannot be fast-path allocated, set a bit in the layout helper.
4480  // See documentation of InstanceKlass::can_be_fastpath_allocated().
4481  assert(k->size_helper() > 0, "layout_helper is initialized");
4482  if ((!RegisterFinalizersAtInit && k->has_finalizer())
4483      || k->is_abstract() || k->is_interface()
4484      || (k->name() == vmSymbols::java_lang_Class() && k->class_loader() == NULL)
4485      || k->size_helper() >= FastAllocateSizeLimit) {
4486    // Forbid fast-path allocation.
4487    jint lh = Klass::instance_layout_helper(k->size_helper(), true);
4488    k->set_layout_helper(lh);
4489  }
4490}
4491
4492// Attach super classes and interface classes to class loader data
4493void ClassFileParser::record_defined_class_dependencies(instanceKlassHandle defined_klass, TRAPS) {
4494  ClassLoaderData * defining_loader_data = defined_klass->class_loader_data();
4495  if (defining_loader_data->is_the_null_class_loader_data()) {
4496      // Dependencies to null class loader data are implicit.
4497      return;
4498  } else {
4499    // add super class dependency
4500    Klass* super = defined_klass->super();
4501    if (super != NULL) {
4502      defining_loader_data->record_dependency(super, CHECK);
4503    }
4504
4505    // add super interface dependencies
4506    Array<Klass*>* local_interfaces = defined_klass->local_interfaces();
4507    if (local_interfaces != NULL) {
4508      int length = local_interfaces->length();
4509      for (int i = 0; i < length; i++) {
4510        defining_loader_data->record_dependency(local_interfaces->at(i), CHECK);
4511      }
4512    }
4513  }
4514}
4515
4516// utility methods for appending an array with check for duplicates
4517
4518void append_interfaces(GrowableArray<Klass*>* result, Array<Klass*>* ifs) {
4519  // iterate over new interfaces
4520  for (int i = 0; i < ifs->length(); i++) {
4521    Klass* e = ifs->at(i);
4522    assert(e->is_klass() && InstanceKlass::cast(e)->is_interface(), "just checking");
4523    // add new interface
4524    result->append_if_missing(e);
4525  }
4526}
4527
4528Array<Klass*>* ClassFileParser::compute_transitive_interfaces(
4529                                        instanceKlassHandle super,
4530                                        Array<Klass*>* local_ifs, TRAPS) {
4531  // Compute maximum size for transitive interfaces
4532  int max_transitive_size = 0;
4533  int super_size = 0;
4534  // Add superclass transitive interfaces size
4535  if (super.not_null()) {
4536    super_size = super->transitive_interfaces()->length();
4537    max_transitive_size += super_size;
4538  }
4539  // Add local interfaces' super interfaces
4540  int local_size = local_ifs->length();
4541  for (int i = 0; i < local_size; i++) {
4542    Klass* l = local_ifs->at(i);
4543    max_transitive_size += InstanceKlass::cast(l)->transitive_interfaces()->length();
4544  }
4545  // Finally add local interfaces
4546  max_transitive_size += local_size;
4547  // Construct array
4548  if (max_transitive_size == 0) {
4549    // no interfaces, use canonicalized array
4550    return Universe::the_empty_klass_array();
4551  } else if (max_transitive_size == super_size) {
4552    // no new local interfaces added, share superklass' transitive interface array
4553    return super->transitive_interfaces();
4554  } else if (max_transitive_size == local_size) {
4555    // only local interfaces added, share local interface array
4556    return local_ifs;
4557  } else {
4558    ResourceMark rm;
4559    GrowableArray<Klass*>* result = new GrowableArray<Klass*>(max_transitive_size);
4560
4561    // Copy down from superclass
4562    if (super.not_null()) {
4563      append_interfaces(result, super->transitive_interfaces());
4564    }
4565
4566    // Copy down from local interfaces' superinterfaces
4567    for (int i = 0; i < local_ifs->length(); i++) {
4568      Klass* l = local_ifs->at(i);
4569      append_interfaces(result, InstanceKlass::cast(l)->transitive_interfaces());
4570    }
4571    // Finally add local interfaces
4572    append_interfaces(result, local_ifs);
4573
4574    // length will be less than the max_transitive_size if duplicates were removed
4575    int length = result->length();
4576    assert(length <= max_transitive_size, "just checking");
4577    Array<Klass*>* new_result = MetadataFactory::new_array<Klass*>(_loader_data, length, CHECK_NULL);
4578    for (int i = 0; i < length; i++) {
4579      Klass* e = result->at(i);
4580        assert(e != NULL, "just checking");
4581      new_result->at_put(i, e);
4582    }
4583    return new_result;
4584  }
4585}
4586
4587void ClassFileParser::check_super_class_access(instanceKlassHandle this_klass, TRAPS) {
4588  Klass* super = this_klass->super();
4589  if ((super != NULL) &&
4590      (!Reflection::verify_class_access(this_klass(), super, false))) {
4591    ResourceMark rm(THREAD);
4592    Exceptions::fthrow(
4593      THREAD_AND_LOCATION,
4594      vmSymbols::java_lang_IllegalAccessError(),
4595      "class %s cannot access its superclass %s",
4596      this_klass->external_name(),
4597      InstanceKlass::cast(super)->external_name()
4598    );
4599    return;
4600  }
4601}
4602
4603
4604void ClassFileParser::check_super_interface_access(instanceKlassHandle this_klass, TRAPS) {
4605  Array<Klass*>* local_interfaces = this_klass->local_interfaces();
4606  int lng = local_interfaces->length();
4607  for (int i = lng - 1; i >= 0; i--) {
4608    Klass* k = local_interfaces->at(i);
4609    assert (k != NULL && k->is_interface(), "invalid interface");
4610    if (!Reflection::verify_class_access(this_klass(), k, false)) {
4611      ResourceMark rm(THREAD);
4612      Exceptions::fthrow(
4613        THREAD_AND_LOCATION,
4614        vmSymbols::java_lang_IllegalAccessError(),
4615        "class %s cannot access its superinterface %s",
4616        this_klass->external_name(),
4617        InstanceKlass::cast(k)->external_name()
4618      );
4619      return;
4620    }
4621  }
4622}
4623
4624
4625void ClassFileParser::check_final_method_override(instanceKlassHandle this_klass, TRAPS) {
4626  Array<Method*>* methods = this_klass->methods();
4627  int num_methods = methods->length();
4628
4629  // go thru each method and check if it overrides a final method
4630  for (int index = 0; index < num_methods; index++) {
4631    Method* m = methods->at(index);
4632
4633    // skip private, static, and <init> methods
4634    if ((!m->is_private() && !m->is_static()) &&
4635        (m->name() != vmSymbols::object_initializer_name())) {
4636
4637      Symbol* name = m->name();
4638      Symbol* signature = m->signature();
4639      Klass* k = this_klass->super();
4640      Method* super_m = NULL;
4641      while (k != NULL) {
4642        // skip supers that don't have final methods.
4643        if (k->has_final_method()) {
4644          // lookup a matching method in the super class hierarchy
4645          super_m = InstanceKlass::cast(k)->lookup_method(name, signature);
4646          if (super_m == NULL) {
4647            break; // didn't find any match; get out
4648          }
4649
4650          if (super_m->is_final() && !super_m->is_static() &&
4651              // matching method in super is final, and not static
4652              (Reflection::verify_field_access(this_klass(),
4653                                               super_m->method_holder(),
4654                                               super_m->method_holder(),
4655                                               super_m->access_flags(), false))
4656            // this class can access super final method and therefore override
4657            ) {
4658            ResourceMark rm(THREAD);
4659            Exceptions::fthrow(
4660              THREAD_AND_LOCATION,
4661              vmSymbols::java_lang_VerifyError(),
4662              "class %s overrides final method %s.%s%s",
4663              this_klass->external_name(),
4664              super_m->method_holder()->external_name(),
4665              name->as_C_string(),
4666              signature->as_C_string()
4667            );
4668            return;
4669          }
4670
4671          // continue to look from super_m's holder's super.
4672          k = super_m->method_holder()->super();
4673          continue;
4674        }
4675
4676        k = k->super();
4677      }
4678    }
4679  }
4680}
4681
4682
4683// assumes that this_klass is an interface
4684void ClassFileParser::check_illegal_static_method(instanceKlassHandle this_klass, TRAPS) {
4685  assert(this_klass->is_interface(), "not an interface");
4686  Array<Method*>* methods = this_klass->methods();
4687  int num_methods = methods->length();
4688
4689  for (int index = 0; index < num_methods; index++) {
4690    Method* m = methods->at(index);
4691    // if m is static and not the init method, throw a verify error
4692    if ((m->is_static()) && (m->name() != vmSymbols::class_initializer_name())) {
4693      ResourceMark rm(THREAD);
4694      Exceptions::fthrow(
4695        THREAD_AND_LOCATION,
4696        vmSymbols::java_lang_VerifyError(),
4697        "Illegal static method %s in interface %s",
4698        m->name()->as_C_string(),
4699        this_klass->external_name()
4700      );
4701      return;
4702    }
4703  }
4704}
4705
4706// utility methods for format checking
4707
4708void ClassFileParser::verify_legal_class_modifiers(jint flags, TRAPS) {
4709  if (!_need_verify) { return; }
4710
4711  const bool is_interface  = (flags & JVM_ACC_INTERFACE)  != 0;
4712  const bool is_abstract   = (flags & JVM_ACC_ABSTRACT)   != 0;
4713  const bool is_final      = (flags & JVM_ACC_FINAL)      != 0;
4714  const bool is_super      = (flags & JVM_ACC_SUPER)      != 0;
4715  const bool is_enum       = (flags & JVM_ACC_ENUM)       != 0;
4716  const bool is_annotation = (flags & JVM_ACC_ANNOTATION) != 0;
4717  const bool major_gte_15  = _major_version >= JAVA_1_5_VERSION;
4718
4719  if ((is_abstract && is_final) ||
4720      (is_interface && !is_abstract) ||
4721      (is_interface && major_gte_15 && (is_super || is_enum)) ||
4722      (!is_interface && major_gte_15 && is_annotation)) {
4723    ResourceMark rm(THREAD);
4724    Exceptions::fthrow(
4725      THREAD_AND_LOCATION,
4726      vmSymbols::java_lang_ClassFormatError(),
4727      "Illegal class modifiers in class %s: 0x%X",
4728      _class_name->as_C_string(), flags
4729    );
4730    return;
4731  }
4732}
4733
4734bool ClassFileParser::has_illegal_visibility(jint flags) {
4735  const bool is_public    = (flags & JVM_ACC_PUBLIC)    != 0;
4736  const bool is_protected = (flags & JVM_ACC_PROTECTED) != 0;
4737  const bool is_private   = (flags & JVM_ACC_PRIVATE)   != 0;
4738
4739  return ((is_public && is_protected) ||
4740          (is_public && is_private) ||
4741          (is_protected && is_private));
4742}
4743
4744bool ClassFileParser::is_supported_version(u2 major, u2 minor) {
4745  u2 max_version = JAVA_MAX_SUPPORTED_VERSION;
4746  return (major >= JAVA_MIN_SUPPORTED_VERSION) &&
4747         (major <= max_version) &&
4748         ((major != max_version) ||
4749          (minor <= JAVA_MAX_SUPPORTED_MINOR_VERSION));
4750}
4751
4752void ClassFileParser::verify_legal_field_modifiers(
4753    jint flags, bool is_interface, TRAPS) {
4754  if (!_need_verify) { return; }
4755
4756  const bool is_public    = (flags & JVM_ACC_PUBLIC)    != 0;
4757  const bool is_protected = (flags & JVM_ACC_PROTECTED) != 0;
4758  const bool is_private   = (flags & JVM_ACC_PRIVATE)   != 0;
4759  const bool is_static    = (flags & JVM_ACC_STATIC)    != 0;
4760  const bool is_final     = (flags & JVM_ACC_FINAL)     != 0;
4761  const bool is_volatile  = (flags & JVM_ACC_VOLATILE)  != 0;
4762  const bool is_transient = (flags & JVM_ACC_TRANSIENT) != 0;
4763  const bool is_enum      = (flags & JVM_ACC_ENUM)      != 0;
4764  const bool major_gte_15 = _major_version >= JAVA_1_5_VERSION;
4765
4766  bool is_illegal = false;
4767
4768  if (is_interface) {
4769    if (!is_public || !is_static || !is_final || is_private ||
4770        is_protected || is_volatile || is_transient ||
4771        (major_gte_15 && is_enum)) {
4772      is_illegal = true;
4773    }
4774  } else { // not interface
4775    if (has_illegal_visibility(flags) || (is_final && is_volatile)) {
4776      is_illegal = true;
4777    }
4778  }
4779
4780  if (is_illegal) {
4781    ResourceMark rm(THREAD);
4782    Exceptions::fthrow(
4783      THREAD_AND_LOCATION,
4784      vmSymbols::java_lang_ClassFormatError(),
4785      "Illegal field modifiers in class %s: 0x%X",
4786      _class_name->as_C_string(), flags);
4787    return;
4788  }
4789}
4790
4791void ClassFileParser::verify_legal_method_modifiers(
4792    jint flags, bool is_interface, Symbol* name, TRAPS) {
4793  if (!_need_verify) { return; }
4794
4795  const bool is_public       = (flags & JVM_ACC_PUBLIC)       != 0;
4796  const bool is_private      = (flags & JVM_ACC_PRIVATE)      != 0;
4797  const bool is_static       = (flags & JVM_ACC_STATIC)       != 0;
4798  const bool is_final        = (flags & JVM_ACC_FINAL)        != 0;
4799  const bool is_native       = (flags & JVM_ACC_NATIVE)       != 0;
4800  const bool is_abstract     = (flags & JVM_ACC_ABSTRACT)     != 0;
4801  const bool is_bridge       = (flags & JVM_ACC_BRIDGE)       != 0;
4802  const bool is_strict       = (flags & JVM_ACC_STRICT)       != 0;
4803  const bool is_synchronized = (flags & JVM_ACC_SYNCHRONIZED) != 0;
4804  const bool is_protected    = (flags & JVM_ACC_PROTECTED)    != 0;
4805  const bool major_gte_15    = _major_version >= JAVA_1_5_VERSION;
4806  const bool major_gte_8     = _major_version >= JAVA_8_VERSION;
4807  const bool is_initializer  = (name == vmSymbols::object_initializer_name());
4808
4809  bool is_illegal = false;
4810
4811  if (is_interface) {
4812    if (major_gte_8) {
4813      // Class file version is JAVA_8_VERSION or later Methods of
4814      // interfaces may set any of the flags except ACC_PROTECTED,
4815      // ACC_FINAL, ACC_NATIVE, and ACC_SYNCHRONIZED; they must
4816      // have exactly one of the ACC_PUBLIC or ACC_PRIVATE flags set.
4817      if ((is_public == is_private) || /* Only one of private and public should be true - XNOR */
4818          (is_native || is_protected || is_final || is_synchronized) ||
4819          // If a specific method of a class or interface has its
4820          // ACC_ABSTRACT flag set, it must not have any of its
4821          // ACC_FINAL, ACC_NATIVE, ACC_PRIVATE, ACC_STATIC,
4822          // ACC_STRICT, or ACC_SYNCHRONIZED flags set.  No need to
4823          // check for ACC_FINAL, ACC_NATIVE or ACC_SYNCHRONIZED as
4824          // those flags are illegal irrespective of ACC_ABSTRACT being set or not.
4825          (is_abstract && (is_private || is_static || is_strict))) {
4826        is_illegal = true;
4827      }
4828    } else if (major_gte_15) {
4829      // Class file version in the interval [JAVA_1_5_VERSION, JAVA_8_VERSION)
4830      if (!is_public || is_static || is_final || is_synchronized ||
4831          is_native || !is_abstract || is_strict) {
4832        is_illegal = true;
4833      }
4834    } else {
4835      // Class file version is pre-JAVA_1_5_VERSION
4836      if (!is_public || is_static || is_final || is_native || !is_abstract) {
4837        is_illegal = true;
4838      }
4839    }
4840  } else { // not interface
4841    if (has_illegal_visibility(flags)) {
4842      is_illegal = true;
4843    } else {
4844      if (is_initializer) {
4845        if (is_static || is_final || is_synchronized || is_native ||
4846            is_abstract || (major_gte_15 && is_bridge)) {
4847          is_illegal = true;
4848        }
4849      } else { // not initializer
4850        if (is_abstract) {
4851          if ((is_final || is_native || is_private || is_static ||
4852              (major_gte_15 && (is_synchronized || is_strict)))) {
4853            is_illegal = true;
4854          }
4855        }
4856      }
4857    }
4858  }
4859
4860  if (is_illegal) {
4861    ResourceMark rm(THREAD);
4862    Exceptions::fthrow(
4863      THREAD_AND_LOCATION,
4864      vmSymbols::java_lang_ClassFormatError(),
4865      "Method %s in class %s has illegal modifiers: 0x%X",
4866      name->as_C_string(), _class_name->as_C_string(), flags);
4867    return;
4868  }
4869}
4870
4871void ClassFileParser::verify_legal_utf8(const unsigned char* buffer, int length, TRAPS) {
4872  assert(_need_verify, "only called when _need_verify is true");
4873  int i = 0;
4874  int count = length >> 2;
4875  for (int k=0; k<count; k++) {
4876    unsigned char b0 = buffer[i];
4877    unsigned char b1 = buffer[i+1];
4878    unsigned char b2 = buffer[i+2];
4879    unsigned char b3 = buffer[i+3];
4880    // For an unsigned char v,
4881    // (v | v - 1) is < 128 (highest bit 0) for 0 < v < 128;
4882    // (v | v - 1) is >= 128 (highest bit 1) for v == 0 or v >= 128.
4883    unsigned char res = b0 | b0 - 1 |
4884                        b1 | b1 - 1 |
4885                        b2 | b2 - 1 |
4886                        b3 | b3 - 1;
4887    if (res >= 128) break;
4888    i += 4;
4889  }
4890  for(; i < length; i++) {
4891    unsigned short c;
4892    // no embedded zeros
4893    guarantee_property((buffer[i] != 0), "Illegal UTF8 string in constant pool in class file %s", CHECK);
4894    if(buffer[i] < 128) {
4895      continue;
4896    }
4897    if ((i + 5) < length) { // see if it's legal supplementary character
4898      if (UTF8::is_supplementary_character(&buffer[i])) {
4899        c = UTF8::get_supplementary_character(&buffer[i]);
4900        i += 5;
4901        continue;
4902      }
4903    }
4904    switch (buffer[i] >> 4) {
4905      default: break;
4906      case 0x8: case 0x9: case 0xA: case 0xB: case 0xF:
4907        classfile_parse_error("Illegal UTF8 string in constant pool in class file %s", CHECK);
4908      case 0xC: case 0xD:  // 110xxxxx  10xxxxxx
4909        c = (buffer[i] & 0x1F) << 6;
4910        i++;
4911        if ((i < length) && ((buffer[i] & 0xC0) == 0x80)) {
4912          c += buffer[i] & 0x3F;
4913          if (_major_version <= 47 || c == 0 || c >= 0x80) {
4914            // for classes with major > 47, c must a null or a character in its shortest form
4915            break;
4916          }
4917        }
4918        classfile_parse_error("Illegal UTF8 string in constant pool in class file %s", CHECK);
4919      case 0xE:  // 1110xxxx 10xxxxxx 10xxxxxx
4920        c = (buffer[i] & 0xF) << 12;
4921        i += 2;
4922        if ((i < length) && ((buffer[i-1] & 0xC0) == 0x80) && ((buffer[i] & 0xC0) == 0x80)) {
4923          c += ((buffer[i-1] & 0x3F) << 6) + (buffer[i] & 0x3F);
4924          if (_major_version <= 47 || c >= 0x800) {
4925            // for classes with major > 47, c must be in its shortest form
4926            break;
4927          }
4928        }
4929        classfile_parse_error("Illegal UTF8 string in constant pool in class file %s", CHECK);
4930    }  // end of switch
4931  } // end of for
4932}
4933
4934// Checks if name is a legal class name.
4935void ClassFileParser::verify_legal_class_name(Symbol* name, TRAPS) {
4936  if (!_need_verify || _relax_verify) { return; }
4937
4938  char buf[fixed_buffer_size];
4939  char* bytes = name->as_utf8_flexible_buffer(THREAD, buf, fixed_buffer_size);
4940  unsigned int length = name->utf8_length();
4941  bool legal = false;
4942
4943  if (length > 0) {
4944    char* p;
4945    if (bytes[0] == JVM_SIGNATURE_ARRAY) {
4946      p = skip_over_field_signature(bytes, false, length, CHECK);
4947      legal = (p != NULL) && ((p - bytes) == (int)length);
4948    } else if (_major_version < JAVA_1_5_VERSION) {
4949      if (bytes[0] != '<') {
4950        p = skip_over_field_name(bytes, true, length);
4951        legal = (p != NULL) && ((p - bytes) == (int)length);
4952      }
4953    } else {
4954      // 4900761: relax the constraints based on JSR202 spec
4955      // Class names may be drawn from the entire Unicode character set.
4956      // Identifiers between '/' must be unqualified names.
4957      // The utf8 string has been verified when parsing cpool entries.
4958      legal = verify_unqualified_name(bytes, length, LegalClass);
4959    }
4960  }
4961  if (!legal) {
4962    ResourceMark rm(THREAD);
4963    Exceptions::fthrow(
4964      THREAD_AND_LOCATION,
4965      vmSymbols::java_lang_ClassFormatError(),
4966      "Illegal class name \"%s\" in class file %s", bytes,
4967      _class_name->as_C_string()
4968    );
4969    return;
4970  }
4971}
4972
4973// Checks if name is a legal field name.
4974void ClassFileParser::verify_legal_field_name(Symbol* name, TRAPS) {
4975  if (!_need_verify || _relax_verify) { return; }
4976
4977  char buf[fixed_buffer_size];
4978  char* bytes = name->as_utf8_flexible_buffer(THREAD, buf, fixed_buffer_size);
4979  unsigned int length = name->utf8_length();
4980  bool legal = false;
4981
4982  if (length > 0) {
4983    if (_major_version < JAVA_1_5_VERSION) {
4984      if (bytes[0] != '<') {
4985        char* p = skip_over_field_name(bytes, false, length);
4986        legal = (p != NULL) && ((p - bytes) == (int)length);
4987      }
4988    } else {
4989      // 4881221: relax the constraints based on JSR202 spec
4990      legal = verify_unqualified_name(bytes, length, LegalField);
4991    }
4992  }
4993
4994  if (!legal) {
4995    ResourceMark rm(THREAD);
4996    Exceptions::fthrow(
4997      THREAD_AND_LOCATION,
4998      vmSymbols::java_lang_ClassFormatError(),
4999      "Illegal field name \"%s\" in class %s", bytes,
5000      _class_name->as_C_string()
5001    );
5002    return;
5003  }
5004}
5005
5006// Checks if name is a legal method name.
5007void ClassFileParser::verify_legal_method_name(Symbol* name, TRAPS) {
5008  if (!_need_verify || _relax_verify) { return; }
5009
5010  assert(name != NULL, "method name is null");
5011  char buf[fixed_buffer_size];
5012  char* bytes = name->as_utf8_flexible_buffer(THREAD, buf, fixed_buffer_size);
5013  unsigned int length = name->utf8_length();
5014  bool legal = false;
5015
5016  if (length > 0) {
5017    if (bytes[0] == '<') {
5018      if (name == vmSymbols::object_initializer_name() || name == vmSymbols::class_initializer_name()) {
5019        legal = true;
5020      }
5021    } else if (_major_version < JAVA_1_5_VERSION) {
5022      char* p;
5023      p = skip_over_field_name(bytes, false, length);
5024      legal = (p != NULL) && ((p - bytes) == (int)length);
5025    } else {
5026      // 4881221: relax the constraints based on JSR202 spec
5027      legal = verify_unqualified_name(bytes, length, LegalMethod);
5028    }
5029  }
5030
5031  if (!legal) {
5032    ResourceMark rm(THREAD);
5033    Exceptions::fthrow(
5034      THREAD_AND_LOCATION,
5035      vmSymbols::java_lang_ClassFormatError(),
5036      "Illegal method name \"%s\" in class %s", bytes,
5037      _class_name->as_C_string()
5038    );
5039    return;
5040  }
5041}
5042
5043
5044// Checks if signature is a legal field signature.
5045void ClassFileParser::verify_legal_field_signature(Symbol* name, Symbol* signature, TRAPS) {
5046  if (!_need_verify) { return; }
5047
5048  char buf[fixed_buffer_size];
5049  char* bytes = signature->as_utf8_flexible_buffer(THREAD, buf, fixed_buffer_size);
5050  unsigned int length = signature->utf8_length();
5051  char* p = skip_over_field_signature(bytes, false, length, CHECK);
5052
5053  if (p == NULL || (p - bytes) != (int)length) {
5054    throwIllegalSignature("Field", name, signature, CHECK);
5055  }
5056}
5057
5058// Checks if signature is a legal method signature.
5059// Returns number of parameters
5060int ClassFileParser::verify_legal_method_signature(Symbol* name, Symbol* signature, TRAPS) {
5061  if (!_need_verify) {
5062    // make sure caller's args_size will be less than 0 even for non-static
5063    // method so it will be recomputed in compute_size_of_parameters().
5064    return -2;
5065  }
5066
5067  unsigned int args_size = 0;
5068  char buf[fixed_buffer_size];
5069  char* p = signature->as_utf8_flexible_buffer(THREAD, buf, fixed_buffer_size);
5070  unsigned int length = signature->utf8_length();
5071  char* nextp;
5072
5073  // The first character must be a '('
5074  if ((length > 0) && (*p++ == JVM_SIGNATURE_FUNC)) {
5075    length--;
5076    // Skip over legal field signatures
5077    nextp = skip_over_field_signature(p, false, length, CHECK_0);
5078    while ((length > 0) && (nextp != NULL)) {
5079      args_size++;
5080      if (p[0] == 'J' || p[0] == 'D') {
5081        args_size++;
5082      }
5083      length -= nextp - p;
5084      p = nextp;
5085      nextp = skip_over_field_signature(p, false, length, CHECK_0);
5086    }
5087    // The first non-signature thing better be a ')'
5088    if ((length > 0) && (*p++ == JVM_SIGNATURE_ENDFUNC)) {
5089      length--;
5090      if (name->utf8_length() > 0 && name->byte_at(0) == '<') {
5091        // All internal methods must return void
5092        if ((length == 1) && (p[0] == JVM_SIGNATURE_VOID)) {
5093          return args_size;
5094        }
5095      } else {
5096        // Now we better just have a return value
5097        nextp = skip_over_field_signature(p, true, length, CHECK_0);
5098        if (nextp && ((int)length == (nextp - p))) {
5099          return args_size;
5100        }
5101      }
5102    }
5103  }
5104  // Report error
5105  throwIllegalSignature("Method", name, signature, CHECK_0);
5106  return 0;
5107}
5108
5109
5110// Unqualified names may not contain the characters '.', ';', '[', or '/'.
5111// Method names also may not contain the characters '<' or '>', unless <init>
5112// or <clinit>.  Note that method names may not be <init> or <clinit> in this
5113// method.  Because these names have been checked as special cases before
5114// calling this method in verify_legal_method_name.
5115bool ClassFileParser::verify_unqualified_name(
5116    char* name, unsigned int length, int type) {
5117  jchar ch;
5118
5119  for (char* p = name; p != name + length; ) {
5120    ch = *p;
5121    if (ch < 128) {
5122      p++;
5123      if (ch == '.' || ch == ';' || ch == '[' ) {
5124        return false;   // do not permit '.', ';', or '['
5125      }
5126      if (type != LegalClass && ch == '/') {
5127        return false;   // do not permit '/' unless it's class name
5128      }
5129      if (type == LegalMethod && (ch == '<' || ch == '>')) {
5130        return false;   // do not permit '<' or '>' in method names
5131      }
5132    } else {
5133      char* tmp_p = UTF8::next(p, &ch);
5134      p = tmp_p;
5135    }
5136  }
5137  return true;
5138}
5139
5140
5141// Take pointer to a string. Skip over the longest part of the string that could
5142// be taken as a fieldname. Allow '/' if slash_ok is true.
5143// Return a pointer to just past the fieldname.
5144// Return NULL if no fieldname at all was found, or in the case of slash_ok
5145// being true, we saw consecutive slashes (meaning we were looking for a
5146// qualified path but found something that was badly-formed).
5147char* ClassFileParser::skip_over_field_name(char* name, bool slash_ok, unsigned int length) {
5148  char* p;
5149  jchar ch;
5150  jboolean last_is_slash = false;
5151  jboolean not_first_ch = false;
5152
5153  for (p = name; p != name + length; not_first_ch = true) {
5154    char* old_p = p;
5155    ch = *p;
5156    if (ch < 128) {
5157      p++;
5158      // quick check for ascii
5159      if ((ch >= 'a' && ch <= 'z') ||
5160          (ch >= 'A' && ch <= 'Z') ||
5161          (ch == '_' || ch == '$') ||
5162          (not_first_ch && ch >= '0' && ch <= '9')) {
5163        last_is_slash = false;
5164        continue;
5165      }
5166      if (slash_ok && ch == '/') {
5167        if (last_is_slash) {
5168          return NULL;  // Don't permit consecutive slashes
5169        }
5170        last_is_slash = true;
5171        continue;
5172      }
5173    } else {
5174      jint unicode_ch;
5175      char* tmp_p = UTF8::next_character(p, &unicode_ch);
5176      p = tmp_p;
5177      last_is_slash = false;
5178      // Check if ch is Java identifier start or is Java identifier part
5179      // 4672820: call java.lang.Character methods directly without generating separate tables.
5180      EXCEPTION_MARK;
5181      instanceKlassHandle klass (THREAD, SystemDictionary::Character_klass());
5182
5183      // return value
5184      JavaValue result(T_BOOLEAN);
5185      // Set up the arguments to isJavaIdentifierStart and isJavaIdentifierPart
5186      JavaCallArguments args;
5187      args.push_int(unicode_ch);
5188
5189      // public static boolean isJavaIdentifierStart(char ch);
5190      JavaCalls::call_static(&result,
5191                             klass,
5192                             vmSymbols::isJavaIdentifierStart_name(),
5193                             vmSymbols::int_bool_signature(),
5194                             &args,
5195                             THREAD);
5196
5197      if (HAS_PENDING_EXCEPTION) {
5198        CLEAR_PENDING_EXCEPTION;
5199        return 0;
5200      }
5201      if (result.get_jboolean()) {
5202        continue;
5203      }
5204
5205      if (not_first_ch) {
5206        // public static boolean isJavaIdentifierPart(char ch);
5207        JavaCalls::call_static(&result,
5208                               klass,
5209                               vmSymbols::isJavaIdentifierPart_name(),
5210                               vmSymbols::int_bool_signature(),
5211                               &args,
5212                               THREAD);
5213
5214        if (HAS_PENDING_EXCEPTION) {
5215          CLEAR_PENDING_EXCEPTION;
5216          return 0;
5217        }
5218
5219        if (result.get_jboolean()) {
5220          continue;
5221        }
5222      }
5223    }
5224    return (not_first_ch) ? old_p : NULL;
5225  }
5226  return (not_first_ch) ? p : NULL;
5227}
5228
5229
5230// Take pointer to a string. Skip over the longest part of the string that could
5231// be taken as a field signature. Allow "void" if void_ok.
5232// Return a pointer to just past the signature.
5233// Return NULL if no legal signature is found.
5234char* ClassFileParser::skip_over_field_signature(char* signature,
5235                                                 bool void_ok,
5236                                                 unsigned int length,
5237                                                 TRAPS) {
5238  unsigned int array_dim = 0;
5239  while (length > 0) {
5240    switch (signature[0]) {
5241      case JVM_SIGNATURE_VOID: if (!void_ok) { return NULL; }
5242      case JVM_SIGNATURE_BOOLEAN:
5243      case JVM_SIGNATURE_BYTE:
5244      case JVM_SIGNATURE_CHAR:
5245      case JVM_SIGNATURE_SHORT:
5246      case JVM_SIGNATURE_INT:
5247      case JVM_SIGNATURE_FLOAT:
5248      case JVM_SIGNATURE_LONG:
5249      case JVM_SIGNATURE_DOUBLE:
5250        return signature + 1;
5251      case JVM_SIGNATURE_CLASS: {
5252        if (_major_version < JAVA_1_5_VERSION) {
5253          // Skip over the class name if one is there
5254          char* p = skip_over_field_name(signature + 1, true, --length);
5255
5256          // The next character better be a semicolon
5257          if (p && (p - signature) > 1 && p[0] == ';') {
5258            return p + 1;
5259          }
5260        } else {
5261          // 4900761: For class version > 48, any unicode is allowed in class name.
5262          length--;
5263          signature++;
5264          while (length > 0 && signature[0] != ';') {
5265            if (signature[0] == '.') {
5266              classfile_parse_error("Class name contains illegal character '.' in descriptor in class file %s", CHECK_0);
5267            }
5268            length--;
5269            signature++;
5270          }
5271          if (signature[0] == ';') { return signature + 1; }
5272        }
5273
5274        return NULL;
5275      }
5276      case JVM_SIGNATURE_ARRAY:
5277        array_dim++;
5278        if (array_dim > 255) {
5279          // 4277370: array descriptor is valid only if it represents 255 or fewer dimensions.
5280          classfile_parse_error("Array type descriptor has more than 255 dimensions in class file %s", CHECK_0);
5281        }
5282        // The rest of what's there better be a legal signature
5283        signature++;
5284        length--;
5285        void_ok = false;
5286        break;
5287
5288      default:
5289        return NULL;
5290    }
5291  }
5292  return NULL;
5293}
5294