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