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