hotspot/src/share/vm/classfile/classFileParser.cpp
changeset 13728 882756847a04
parent 13391 30245956af37
child 13738 d67be49a5beb
equal deleted inserted replaced
13727:caf5eb7dd4a7 13728:882756847a04
    23  */
    23  */
    24 
    24 
    25 #include "precompiled.hpp"
    25 #include "precompiled.hpp"
    26 #include "classfile/classFileParser.hpp"
    26 #include "classfile/classFileParser.hpp"
    27 #include "classfile/classLoader.hpp"
    27 #include "classfile/classLoader.hpp"
       
    28 #include "classfile/classLoaderData.hpp"
       
    29 #include "classfile/classLoaderData.inline.hpp"
    28 #include "classfile/javaClasses.hpp"
    30 #include "classfile/javaClasses.hpp"
    29 #include "classfile/symbolTable.hpp"
    31 #include "classfile/symbolTable.hpp"
    30 #include "classfile/systemDictionary.hpp"
    32 #include "classfile/systemDictionary.hpp"
    31 #include "classfile/verificationType.hpp"
    33 #include "classfile/verificationType.hpp"
    32 #include "classfile/verifier.hpp"
    34 #include "classfile/verifier.hpp"
    33 #include "classfile/vmSymbols.hpp"
    35 #include "classfile/vmSymbols.hpp"
    34 #include "memory/allocation.hpp"
    36 #include "memory/allocation.hpp"
    35 #include "memory/gcLocker.hpp"
    37 #include "memory/gcLocker.hpp"
       
    38 #include "memory/metadataFactory.hpp"
    36 #include "memory/oopFactory.hpp"
    39 #include "memory/oopFactory.hpp"
    37 #include "memory/universe.inline.hpp"
    40 #include "memory/universe.inline.hpp"
    38 #include "oops/constantPoolOop.hpp"
    41 #include "oops/constantPool.hpp"
    39 #include "oops/fieldStreams.hpp"
    42 #include "oops/fieldStreams.hpp"
    40 #include "oops/instanceKlass.hpp"
    43 #include "oops/instanceKlass.hpp"
    41 #include "oops/instanceMirrorKlass.hpp"
    44 #include "oops/instanceMirrorKlass.hpp"
    42 #include "oops/klass.inline.hpp"
    45 #include "oops/klass.inline.hpp"
    43 #include "oops/klassOop.hpp"
       
    44 #include "oops/klassVtable.hpp"
    46 #include "oops/klassVtable.hpp"
    45 #include "oops/methodOop.hpp"
    47 #include "oops/method.hpp"
    46 #include "oops/symbol.hpp"
    48 #include "oops/symbol.hpp"
       
    49 #include "prims/jvm.h"
    47 #include "prims/jvmtiExport.hpp"
    50 #include "prims/jvmtiExport.hpp"
    48 #include "prims/jvmtiThreadState.hpp"
    51 #include "prims/jvmtiThreadState.hpp"
    49 #include "runtime/javaCalls.hpp"
    52 #include "runtime/javaCalls.hpp"
    50 #include "runtime/perfData.hpp"
    53 #include "runtime/perfData.hpp"
    51 #include "runtime/reflection.hpp"
    54 #include "runtime/reflection.hpp"
    52 #include "runtime/signature.hpp"
    55 #include "runtime/signature.hpp"
    53 #include "runtime/timer.hpp"
    56 #include "runtime/timer.hpp"
    54 #include "services/classLoadingService.hpp"
    57 #include "services/classLoadingService.hpp"
    55 #include "services/threadService.hpp"
    58 #include "services/threadService.hpp"
       
    59 #include "utilities/array.hpp"
    56 
    60 
    57 // We generally try to create the oops directly when parsing, rather than
    61 // We generally try to create the oops directly when parsing, rather than
    58 // allocating temporary data structures and copying the bytes twice. A
    62 // allocating temporary data structures and copying the bytes twice. A
    59 // temporary area is only needed when parsing utf8 entries in the constant
    63 // temporary area is only needed when parsing utf8 entries in the constant
    60 // pool and when parsing line number tables.
    64 // pool and when parsing line number tables.
    79 // Used for backward compatibility reasons:
    83 // Used for backward compatibility reasons:
    80 // - to check NameAndType_info signatures more aggressively
    84 // - to check NameAndType_info signatures more aggressively
    81 #define JAVA_7_VERSION                    51
    85 #define JAVA_7_VERSION                    51
    82 
    86 
    83 
    87 
    84 void ClassFileParser::parse_constant_pool_entries(Handle class_loader, constantPoolHandle cp, int length, TRAPS) {
    88 void ClassFileParser::parse_constant_pool_entries(ClassLoaderData* loader_data, constantPoolHandle cp, int length, TRAPS) {
    85   // Use a local copy of ClassFileStream. It helps the C++ compiler to optimize
    89   // Use a local copy of ClassFileStream. It helps the C++ compiler to optimize
    86   // this function (_current can be allocated in a register, with scalar
    90   // this function (_current can be allocated in a register, with scalar
    87   // replacement of aggregates). The _current pointer is copied back to
    91   // replacement of aggregates). The _current pointer is copied back to
    88   // stream() when this function returns. DON'T call another method within
    92   // stream() when this function returns. DON'T call another method within
    89   // this method that uses stream().
    93   // this method that uses stream().
    92   ClassFileStream* cfs = &cfs1;
    96   ClassFileStream* cfs = &cfs1;
    93 #ifdef ASSERT
    97 #ifdef ASSERT
    94   assert(cfs->allocated_on_stack(),"should be local");
    98   assert(cfs->allocated_on_stack(),"should be local");
    95   u1* old_current = cfs0->current();
    99   u1* old_current = cfs0->current();
    96 #endif
   100 #endif
       
   101   Handle class_loader(THREAD, loader_data->class_loader());
    97 
   102 
    98   // Used for batching symbol allocations.
   103   // Used for batching symbol allocations.
    99   const char* names[SymbolTable::symbol_alloc_batch_size];
   104   const char* names[SymbolTable::symbol_alloc_batch_size];
   100   int lengths[SymbolTable::symbol_alloc_batch_size];
   105   int lengths[SymbolTable::symbol_alloc_batch_size];
   101   int indices[SymbolTable::symbol_alloc_batch_size];
   106   int indices[SymbolTable::symbol_alloc_batch_size];
   270             names[names_count] = (char*)utf8_buffer;
   275             names[names_count] = (char*)utf8_buffer;
   271             lengths[names_count] = utf8_length;
   276             lengths[names_count] = utf8_length;
   272             indices[names_count] = index;
   277             indices[names_count] = index;
   273             hashValues[names_count++] = hash;
   278             hashValues[names_count++] = hash;
   274             if (names_count == SymbolTable::symbol_alloc_batch_size) {
   279             if (names_count == SymbolTable::symbol_alloc_batch_size) {
   275               SymbolTable::new_symbols(class_loader, cp, names_count, names, lengths, indices, hashValues, CHECK);
   280               SymbolTable::new_symbols(loader_data, cp, names_count, names, lengths, indices, hashValues, CHECK);
   276               names_count = 0;
   281               names_count = 0;
   277             }
   282             }
   278           } else {
   283           } else {
   279             cp->symbol_at_put(index, result);
   284             cp->symbol_at_put(index, result);
   280           }
   285           }
   287     }
   292     }
   288   }
   293   }
   289 
   294 
   290   // Allocate the remaining symbols
   295   // Allocate the remaining symbols
   291   if (names_count > 0) {
   296   if (names_count > 0) {
   292     SymbolTable::new_symbols(class_loader, cp, names_count, names, lengths, indices, hashValues, CHECK);
   297     SymbolTable::new_symbols(loader_data, cp, names_count, names, lengths, indices, hashValues, CHECK);
   293   }
   298   }
   294 
   299 
   295   // Copy _current pointer of local copy back to stream().
   300   // Copy _current pointer of local copy back to stream().
   296 #ifdef ASSERT
   301 #ifdef ASSERT
   297   assert(cfs0->current() == old_current, "non-exclusive use of stream()");
   302   assert(cfs0->current() == old_current, "non-exclusive use of stream()");
   323     return cp->symbol_at(index);
   328     return cp->symbol_at(index);
   324   else
   329   else
   325     return NULL;
   330     return NULL;
   326 }
   331 }
   327 
   332 
   328 constantPoolHandle ClassFileParser::parse_constant_pool(Handle class_loader, TRAPS) {
   333 constantPoolHandle ClassFileParser::parse_constant_pool(ClassLoaderData* loader_data, TRAPS) {
   329   ClassFileStream* cfs = stream();
   334   ClassFileStream* cfs = stream();
   330   constantPoolHandle nullHandle;
   335   constantPoolHandle nullHandle;
   331 
   336 
   332   cfs->guarantee_more(3, CHECK_(nullHandle)); // length, first cp tag
   337   cfs->guarantee_more(3, CHECK_(nullHandle)); // length, first cp tag
   333   u2 length = cfs->get_u2_fast();
   338   u2 length = cfs->get_u2_fast();
   334   guarantee_property(
   339   guarantee_property(
   335     length >= 1, "Illegal constant pool size %u in class file %s",
   340     length >= 1, "Illegal constant pool size %u in class file %s",
   336     length, CHECK_(nullHandle));
   341     length, CHECK_(nullHandle));
   337   constantPoolOop constant_pool =
   342   ConstantPool* constant_pool =
   338                       oopFactory::new_constantPool(length,
   343                       ConstantPool::allocate(loader_data,
   339                                                    oopDesc::IsSafeConc,
   344                                                     length,
   340                                                    CHECK_(nullHandle));
   345                                                    CHECK_(nullHandle));
   341   constantPoolHandle cp (THREAD, constant_pool);
   346   constantPoolHandle cp (THREAD, constant_pool);
   342 
   347 
   343   cp->set_partially_loaded();    // Enables heap verify to work on partial constantPoolOops
       
   344   ConstantPoolCleaner cp_in_error(cp); // set constant pool to be cleaned up.
   348   ConstantPoolCleaner cp_in_error(cp); // set constant pool to be cleaned up.
   345 
   349 
   346   // parsing constant pool entries
   350   // parsing constant pool entries
   347   parse_constant_pool_entries(class_loader, cp, length, CHECK_(nullHandle));
   351   parse_constant_pool_entries(loader_data, cp, length, CHECK_(nullHandle));
   348 
   352 
   349   int index = 1;  // declared outside of loops for portability
   353   int index = 1;  // declared outside of loops for portability
   350 
   354 
   351   // first verification pass - validate cross references and fixup class and string constants
   355   // first verification pass - validate cross references and fixup class and string constants
   352   for (index = 1; index < length; index++) {          // Index 0 is unused
   356   for (index = 1; index < length; index++) {          // Index 0 is unused
   420               cp->tag_at(class_index).is_utf8(),
   424               cp->tag_at(class_index).is_utf8(),
   421             "Invalid constant pool index %u in class file %s",
   425             "Invalid constant pool index %u in class file %s",
   422             class_index, CHECK_(nullHandle));
   426             class_index, CHECK_(nullHandle));
   423           cp->unresolved_klass_at_put(index, cp->symbol_at(class_index));
   427           cp->unresolved_klass_at_put(index, cp->symbol_at(class_index));
   424         }
   428         }
   425         break;
       
   426       case JVM_CONSTANT_UnresolvedString :
       
   427         ShouldNotReachHere();     // Only JVM_CONSTANT_StringIndex should be present
       
   428         break;
   429         break;
   429       case JVM_CONSTANT_StringIndex :
   430       case JVM_CONSTANT_StringIndex :
   430         {
   431         {
   431           int string_index = cp->string_index_at(index);
   432           int string_index = cp->string_index_at(index);
   432           check_property(
   433           check_property(
   528         guarantee_property(index != this_class_index,
   529         guarantee_property(index != this_class_index,
   529                            "Illegal constant pool patch to self at %d in class file %s",
   530                            "Illegal constant pool patch to self at %d in class file %s",
   530                            index, CHECK_(nullHandle));
   531                            index, CHECK_(nullHandle));
   531         patch_constant_pool(cp, index, cp_patch_at(index), CHECK_(nullHandle));
   532         patch_constant_pool(cp, index, cp_patch_at(index), CHECK_(nullHandle));
   532       }
   533       }
   533     }
       
   534     // Ensure that all the patches have been used.
       
   535     for (index = 0; index < _cp_patches->length(); index++) {
       
   536       guarantee_property(!has_cp_patch_at(index),
       
   537                          "Unused constant pool patch at %d in class file %s",
       
   538                          index, CHECK_(nullHandle));
       
   539     }
   534     }
   540   }
   535   }
   541 
   536 
   542   if (!_need_verify) {
   537   if (!_need_verify) {
   543     cp_in_error.set_in_error(false);
   538     cp_in_error.set_in_error(false);
   669 
   664 
   670 
   665 
   671 void ClassFileParser::patch_constant_pool(constantPoolHandle cp, int index, Handle patch, TRAPS) {
   666 void ClassFileParser::patch_constant_pool(constantPoolHandle cp, int index, Handle patch, TRAPS) {
   672   assert(EnableInvokeDynamic, "");
   667   assert(EnableInvokeDynamic, "");
   673   BasicType patch_type = T_VOID;
   668   BasicType patch_type = T_VOID;
       
   669 
   674   switch (cp->tag_at(index).value()) {
   670   switch (cp->tag_at(index).value()) {
   675 
   671 
   676   case JVM_CONSTANT_UnresolvedClass :
   672   case JVM_CONSTANT_UnresolvedClass :
   677     // Patching a class means pre-resolving it.
   673     // Patching a class means pre-resolving it.
   678     // The name in the constant pool is ignored.
   674     // The name in the constant pool is ignored.
   679     if (java_lang_Class::is_instance(patch())) {
   675     if (java_lang_Class::is_instance(patch())) {
   680       guarantee_property(!java_lang_Class::is_primitive(patch()),
   676       guarantee_property(!java_lang_Class::is_primitive(patch()),
   681                          "Illegal class patch at %d in class file %s",
   677                          "Illegal class patch at %d in class file %s",
   682                          index, CHECK);
   678                          index, CHECK);
   683       cp->klass_at_put(index, java_lang_Class::as_klassOop(patch()));
   679       cp->klass_at_put(index, java_lang_Class::as_Klass(patch()));
   684     } else {
   680     } else {
   685       guarantee_property(java_lang_String::is_instance(patch()),
   681       guarantee_property(java_lang_String::is_instance(patch()),
   686                          "Illegal class patch at %d in class file %s",
   682                          "Illegal class patch at %d in class file %s",
   687                          index, CHECK);
   683                          index, CHECK);
   688       Symbol* name = java_lang_String::as_symbol(patch(), CHECK);
   684       Symbol* name = java_lang_String::as_symbol(patch(), CHECK);
   689       cp->unresolved_klass_at_put(index, name);
   685       cp->unresolved_klass_at_put(index, name);
   690     }
   686     }
   691     break;
   687     break;
   692 
   688 
   693   case JVM_CONSTANT_UnresolvedString :
   689   case JVM_CONSTANT_String :
   694     // Patching a string means pre-resolving it.
   690     // skip this patch and don't clear it.  Needs the oop array for resolved
   695     // The spelling in the constant pool is ignored.
   691     // references to be created first.
   696     // The constant reference may be any object whatever.
   692     return;
   697     // If it is not a real interned string, the constant is referred
       
   698     // to as a "pseudo-string", and must be presented to the CP
       
   699     // explicitly, because it may require scavenging.
       
   700     cp->pseudo_string_at_put(index, patch());
       
   701     break;
       
   702 
   693 
   703   case JVM_CONSTANT_Integer : patch_type = T_INT;    goto patch_prim;
   694   case JVM_CONSTANT_Integer : patch_type = T_INT;    goto patch_prim;
   704   case JVM_CONSTANT_Float :   patch_type = T_FLOAT;  goto patch_prim;
   695   case JVM_CONSTANT_Float :   patch_type = T_FLOAT;  goto patch_prim;
   705   case JVM_CONSTANT_Long :    patch_type = T_LONG;   goto patch_prim;
   696   case JVM_CONSTANT_Long :    patch_type = T_LONG;   goto patch_prim;
   706   case JVM_CONSTANT_Double :  patch_type = T_DOUBLE; goto patch_prim;
   697   case JVM_CONSTANT_Double :  patch_type = T_DOUBLE; goto patch_prim;
   787 
   778 
   788   return true;
   779   return true;
   789 }
   780 }
   790 
   781 
   791 
   782 
   792 objArrayHandle ClassFileParser::parse_interfaces(constantPoolHandle cp,
   783 Array<Klass*>* ClassFileParser::parse_interfaces(constantPoolHandle cp,
   793                                                  int length,
   784                                                  int length,
   794                                                  Handle class_loader,
   785                                                    ClassLoaderData* loader_data,
   795                                                  Handle protection_domain,
   786                                                  Handle protection_domain,
   796                                                  Symbol* class_name,
   787                                                  Symbol* class_name,
   797                                                  TRAPS) {
   788                                                  TRAPS) {
   798   ClassFileStream* cfs = stream();
   789   ClassFileStream* cfs = stream();
   799   assert(length > 0, "only called for length>0");
   790   assert(length > 0, "only called for length>0");
   800   objArrayHandle nullHandle;
   791   // FIXME: Leak at later OOM.
   801   objArrayOop interface_oop = oopFactory::new_system_objArray(length, CHECK_(nullHandle));
   792   Array<Klass*>* interfaces = MetadataFactory::new_array<Klass*>(loader_data, length, NULL, CHECK_NULL);
   802   objArrayHandle interfaces (THREAD, interface_oop);
       
   803 
   793 
   804   int index;
   794   int index;
   805   for (index = 0; index < length; index++) {
   795   for (index = 0; index < length; index++) {
   806     u2 interface_index = cfs->get_u2(CHECK_(nullHandle));
   796     u2 interface_index = cfs->get_u2(CHECK_NULL);
   807     KlassHandle interf;
   797     KlassHandle interf;
   808     check_property(
   798     check_property(
   809       valid_cp_range(interface_index, cp->length()) &&
   799       valid_cp_range(interface_index, cp->length()) &&
   810       is_klass_reference(cp, interface_index),
   800       is_klass_reference(cp, interface_index),
   811       "Interface name has bad constant pool index %u in class file %s",
   801       "Interface name has bad constant pool index %u in class file %s",
   812       interface_index, CHECK_(nullHandle));
   802       interface_index, CHECK_NULL);
   813     if (cp->tag_at(interface_index).is_klass()) {
   803     if (cp->tag_at(interface_index).is_klass()) {
   814       interf = KlassHandle(THREAD, cp->resolved_klass_at(interface_index));
   804       interf = KlassHandle(THREAD, cp->resolved_klass_at(interface_index));
   815     } else {
   805     } else {
   816       Symbol*  unresolved_klass  = cp->klass_name_at(interface_index);
   806       Symbol*  unresolved_klass  = cp->klass_name_at(interface_index);
   817 
   807 
   818       // Don't need to check legal name because it's checked when parsing constant pool.
   808       // Don't need to check legal name because it's checked when parsing constant pool.
   819       // But need to make sure it's not an array type.
   809       // But need to make sure it's not an array type.
   820       guarantee_property(unresolved_klass->byte_at(0) != JVM_SIGNATURE_ARRAY,
   810       guarantee_property(unresolved_klass->byte_at(0) != JVM_SIGNATURE_ARRAY,
   821                          "Bad interface name in class file %s", CHECK_(nullHandle));
   811                          "Bad interface name in class file %s", CHECK_NULL);
       
   812       Handle class_loader(THREAD, loader_data->class_loader());
   822 
   813 
   823       // Call resolve_super so classcircularity is checked
   814       // Call resolve_super so classcircularity is checked
   824       klassOop k = SystemDictionary::resolve_super_or_fail(class_name,
   815       Klass* k = SystemDictionary::resolve_super_or_fail(class_name,
   825                     unresolved_klass, class_loader, protection_domain,
   816                     unresolved_klass, class_loader, protection_domain,
   826                     false, CHECK_(nullHandle));
   817                     false, CHECK_NULL);
   827       interf = KlassHandle(THREAD, k);
   818       interf = KlassHandle(THREAD, k);
   828 
   819 
   829       if (LinkWellKnownClasses)  // my super type is well known to me
   820       if (LinkWellKnownClasses)  // my super type is well known to me
   830         cp->klass_at_put(interface_index, interf()); // eagerly resolve
   821         cp->klass_at_put(interface_index, interf()); // eagerly resolve
   831     }
   822     }
   832 
   823 
   833     if (!Klass::cast(interf())->is_interface()) {
   824     if (!Klass::cast(interf())->is_interface()) {
   834       THROW_MSG_(vmSymbols::java_lang_IncompatibleClassChangeError(), "Implementing class", nullHandle);
   825       THROW_MSG_(vmSymbols::java_lang_IncompatibleClassChangeError(), "Implementing class", NULL);
   835     }
   826     }
   836     interfaces->obj_at_put(index, interf());
   827     interfaces->at_put(index, interf());
   837   }
   828   }
   838 
   829 
   839   if (!_need_verify || length <= 1) {
   830   if (!_need_verify || length <= 1) {
   840     return interfaces;
   831     return interfaces;
   841   }
   832   }
   847   initialize_hashtable(interface_names);
   838   initialize_hashtable(interface_names);
   848   bool dup = false;
   839   bool dup = false;
   849   {
   840   {
   850     debug_only(No_Safepoint_Verifier nsv;)
   841     debug_only(No_Safepoint_Verifier nsv;)
   851     for (index = 0; index < length; index++) {
   842     for (index = 0; index < length; index++) {
   852       klassOop k = (klassOop)interfaces->obj_at(index);
   843       Klass* k = interfaces->at(index);
   853       Symbol* name = instanceKlass::cast(k)->name();
   844       Symbol* name = InstanceKlass::cast(k)->name();
   854       // If no duplicates, add (name, NULL) in hashtable interface_names.
   845       // If no duplicates, add (name, NULL) in hashtable interface_names.
   855       if (!put_after_lookup(name, NULL, interface_names)) {
   846       if (!put_after_lookup(name, NULL, interface_names)) {
   856         dup = true;
   847         dup = true;
   857         break;
   848         break;
   858       }
   849       }
   859     }
   850     }
   860   }
   851   }
   861   if (dup) {
   852   if (dup) {
   862     classfile_parse_error("Duplicate interface name in class file %s",
   853     classfile_parse_error("Duplicate interface name in class file %s", CHECK_NULL);
   863                           CHECK_(nullHandle));
       
   864   }
   854   }
   865 
   855 
   866   return interfaces;
   856   return interfaces;
   867 }
   857 }
   868 
   858 
   888     case T_BYTE: case T_CHAR: case T_SHORT: case T_BOOLEAN: case T_INT:
   878     case T_BYTE: case T_CHAR: case T_SHORT: case T_BOOLEAN: case T_INT:
   889       guarantee_property(value_type.is_int(), "Inconsistent constant value type in class file %s", CHECK);
   879       guarantee_property(value_type.is_int(), "Inconsistent constant value type in class file %s", CHECK);
   890       break;
   880       break;
   891     case T_OBJECT:
   881     case T_OBJECT:
   892       guarantee_property((cp->symbol_at(signature_index)->equals("Ljava/lang/String;")
   882       guarantee_property((cp->symbol_at(signature_index)->equals("Ljava/lang/String;")
   893                          && (value_type.is_string() || value_type.is_unresolved_string())),
   883                          && value_type.is_string()),
   894                          "Bad string initial value in class file %s", CHECK);
   884                          "Bad string initial value in class file %s", CHECK);
   895       break;
   885       break;
   896     default:
   886     default:
   897       classfile_parse_error(
   887       classfile_parse_error(
   898         "Unable to set initial value %u in class file %s",
   888         "Unable to set initial value %u in class file %s",
   900   }
   890   }
   901 }
   891 }
   902 
   892 
   903 
   893 
   904 // Parse attributes for a field.
   894 // Parse attributes for a field.
   905 void ClassFileParser::parse_field_attributes(constantPoolHandle cp,
   895 void ClassFileParser::parse_field_attributes(ClassLoaderData* loader_data,
       
   896                                              constantPoolHandle cp,
   906                                              u2 attributes_count,
   897                                              u2 attributes_count,
   907                                              bool is_static, u2 signature_index,
   898                                              bool is_static, u2 signature_index,
   908                                              u2* constantvalue_index_addr,
   899                                              u2* constantvalue_index_addr,
   909                                              bool* is_synthetic_addr,
   900                                              bool* is_synthetic_addr,
   910                                              u2* generic_signature_index_addr,
   901                                              u2* generic_signature_index_addr,
   911                                              typeArrayHandle* field_annotations,
   902                                              AnnotationArray** field_annotations,
   912                                              ClassFileParser::FieldAnnotationCollector* parsed_annotations,
   903                                              ClassFileParser::FieldAnnotationCollector* parsed_annotations,
   913                                              TRAPS) {
   904                                              TRAPS) {
   914   ClassFileStream* cfs = stream();
   905   ClassFileStream* cfs = stream();
   915   assert(attributes_count > 0, "length should be greater than 0");
   906   assert(attributes_count > 0, "length should be greater than 0");
   916   u2 constantvalue_index = 0;
   907   u2 constantvalue_index = 0;
   983   }
   974   }
   984 
   975 
   985   *constantvalue_index_addr = constantvalue_index;
   976   *constantvalue_index_addr = constantvalue_index;
   986   *is_synthetic_addr = is_synthetic;
   977   *is_synthetic_addr = is_synthetic;
   987   *generic_signature_index_addr = generic_signature_index;
   978   *generic_signature_index_addr = generic_signature_index;
   988   *field_annotations = assemble_annotations(runtime_visible_annotations,
   979   *field_annotations = assemble_annotations(loader_data,
       
   980                                             runtime_visible_annotations,
   989                                             runtime_visible_annotations_length,
   981                                             runtime_visible_annotations_length,
   990                                             runtime_invisible_annotations,
   982                                             runtime_invisible_annotations,
   991                                             runtime_invisible_annotations_length,
   983                                             runtime_invisible_annotations_length,
   992                                             CHECK);
   984                                             CHECK);
   993   return;
   985   return;
  1027   NONSTATIC_OOP,       // T_OBJECT   = 12,
  1019   NONSTATIC_OOP,       // T_OBJECT   = 12,
  1028   NONSTATIC_OOP,       // T_ARRAY    = 13,
  1020   NONSTATIC_OOP,       // T_ARRAY    = 13,
  1029   BAD_ALLOCATION_TYPE, // T_VOID     = 14,
  1021   BAD_ALLOCATION_TYPE, // T_VOID     = 14,
  1030   BAD_ALLOCATION_TYPE, // T_ADDRESS  = 15,
  1022   BAD_ALLOCATION_TYPE, // T_ADDRESS  = 15,
  1031   BAD_ALLOCATION_TYPE, // T_NARROWOOP= 16,
  1023   BAD_ALLOCATION_TYPE, // T_NARROWOOP= 16,
  1032   BAD_ALLOCATION_TYPE, // T_CONFLICT = 17,
  1024   BAD_ALLOCATION_TYPE, // T_METADATA = 17,
       
  1025   BAD_ALLOCATION_TYPE, // T_CONFLICT = 18,
  1033   BAD_ALLOCATION_TYPE, // 0
  1026   BAD_ALLOCATION_TYPE, // 0
  1034   BAD_ALLOCATION_TYPE, // 1
  1027   BAD_ALLOCATION_TYPE, // 1
  1035   BAD_ALLOCATION_TYPE, // 2
  1028   BAD_ALLOCATION_TYPE, // 2
  1036   BAD_ALLOCATION_TYPE, // 3
  1029   BAD_ALLOCATION_TYPE, // 3
  1037   STATIC_BYTE ,        // T_BOOLEAN  =  4,
  1030   STATIC_BYTE ,        // T_BOOLEAN  =  4,
  1045   STATIC_OOP,          // T_OBJECT   = 12,
  1038   STATIC_OOP,          // T_OBJECT   = 12,
  1046   STATIC_OOP,          // T_ARRAY    = 13,
  1039   STATIC_OOP,          // T_ARRAY    = 13,
  1047   BAD_ALLOCATION_TYPE, // T_VOID     = 14,
  1040   BAD_ALLOCATION_TYPE, // T_VOID     = 14,
  1048   BAD_ALLOCATION_TYPE, // T_ADDRESS  = 15,
  1041   BAD_ALLOCATION_TYPE, // T_ADDRESS  = 15,
  1049   BAD_ALLOCATION_TYPE, // T_NARROWOOP= 16,
  1042   BAD_ALLOCATION_TYPE, // T_NARROWOOP= 16,
  1050   BAD_ALLOCATION_TYPE, // T_CONFLICT = 17,
  1043   BAD_ALLOCATION_TYPE, // T_METADATA = 17,
       
  1044   BAD_ALLOCATION_TYPE, // T_CONFLICT = 18,
  1051 };
  1045 };
  1052 
  1046 
  1053 static FieldAllocationType basic_type_to_atype(bool is_static, BasicType type) {
  1047 static FieldAllocationType basic_type_to_atype(bool is_static, BasicType type) {
  1054   assert(type >= T_BOOLEAN && type < T_VOID, "only allowable values");
  1048   assert(type >= T_BOOLEAN && type < T_VOID, "only allowable values");
  1055   FieldAllocationType result = _basic_type_to_atype[type + (is_static ? (T_CONFLICT + 1) : 0)];
  1049   FieldAllocationType result = _basic_type_to_atype[type + (is_static ? (T_CONFLICT + 1) : 0)];
  1074     count[atype]++;
  1068     count[atype]++;
  1075     return atype;
  1069     return atype;
  1076   }
  1070   }
  1077 };
  1071 };
  1078 
  1072 
  1079 
  1073 Array<u2>* ClassFileParser::parse_fields(ClassLoaderData* loader_data,
  1080 typeArrayHandle ClassFileParser::parse_fields(Symbol* class_name,
  1074                                          Symbol* class_name,
  1081                                               constantPoolHandle cp, bool is_interface,
  1075                                               constantPoolHandle cp, bool is_interface,
  1082                                               FieldAllocationCount *fac,
  1076                                               FieldAllocationCount *fac,
  1083                                               objArrayHandle* fields_annotations,
  1077                                          Array<AnnotationArray*>** fields_annotations,
  1084                                               u2* java_fields_count_ptr, TRAPS) {
  1078                                               u2* java_fields_count_ptr, TRAPS) {
  1085   ClassFileStream* cfs = stream();
  1079   ClassFileStream* cfs = stream();
  1086   typeArrayHandle nullHandle;
  1080   cfs->guarantee_more(2, CHECK_NULL);  // length
  1087   cfs->guarantee_more(2, CHECK_(nullHandle));  // length
       
  1088   u2 length = cfs->get_u2_fast();
  1081   u2 length = cfs->get_u2_fast();
  1089   *java_fields_count_ptr = length;
  1082   *java_fields_count_ptr = length;
  1090 
  1083 
  1091   int num_injected = 0;
  1084   int num_injected = 0;
  1092   InjectedField* injected = JavaClasses::get_injected(class_name, &num_injected);
  1085   InjectedField* injected = JavaClasses::get_injected(class_name, &num_injected);
  1114   // array and any unused slots will be discarded.
  1107   // array and any unused slots will be discarded.
  1115   ResourceMark rm(THREAD);
  1108   ResourceMark rm(THREAD);
  1116   u2* fa = NEW_RESOURCE_ARRAY_IN_THREAD(
  1109   u2* fa = NEW_RESOURCE_ARRAY_IN_THREAD(
  1117              THREAD, u2, total_fields * (FieldInfo::field_slots + 1));
  1110              THREAD, u2, total_fields * (FieldInfo::field_slots + 1));
  1118 
  1111 
  1119   typeArrayHandle field_annotations;
  1112   AnnotationArray* field_annotations = NULL;
  1120   // The generic signature slots start after all other fields' data.
  1113   // The generic signature slots start after all other fields' data.
  1121   int generic_signature_slot = total_fields * FieldInfo::field_slots;
  1114   int generic_signature_slot = total_fields * FieldInfo::field_slots;
  1122   int num_generic_signature = 0;
  1115   int num_generic_signature = 0;
  1123   for (int n = 0; n < length; n++) {
  1116   for (int n = 0; n < length; n++) {
  1124     cfs->guarantee_more(8, CHECK_(nullHandle));  // access_flags, name_index, descriptor_index, attributes_count
  1117     cfs->guarantee_more(8, CHECK_NULL);  // access_flags, name_index, descriptor_index, attributes_count
  1125 
  1118 
  1126     AccessFlags access_flags;
  1119     AccessFlags access_flags;
  1127     jint flags = cfs->get_u2_fast() & JVM_RECOGNIZED_FIELD_MODIFIERS;
  1120     jint flags = cfs->get_u2_fast() & JVM_RECOGNIZED_FIELD_MODIFIERS;
  1128     verify_legal_field_modifiers(flags, is_interface, CHECK_(nullHandle));
  1121     verify_legal_field_modifiers(flags, is_interface, CHECK_NULL);
  1129     access_flags.set_flags(flags);
  1122     access_flags.set_flags(flags);
  1130 
  1123 
  1131     u2 name_index = cfs->get_u2_fast();
  1124     u2 name_index = cfs->get_u2_fast();
  1132     int cp_size = cp->length();
  1125     int cp_size = cp->length();
  1133     check_property(
  1126     check_property(
  1134       valid_cp_range(name_index, cp_size) && cp->tag_at(name_index).is_utf8(),
  1127       valid_cp_range(name_index, cp_size) && cp->tag_at(name_index).is_utf8(),
  1135       "Invalid constant pool index %u for field name in class file %s",
  1128       "Invalid constant pool index %u for field name in class file %s",
  1136       name_index, CHECK_(nullHandle));
  1129       name_index, CHECK_NULL);
  1137     Symbol*  name = cp->symbol_at(name_index);
  1130     Symbol*  name = cp->symbol_at(name_index);
  1138     verify_legal_field_name(name, CHECK_(nullHandle));
  1131     verify_legal_field_name(name, CHECK_NULL);
  1139 
  1132 
  1140     u2 signature_index = cfs->get_u2_fast();
  1133     u2 signature_index = cfs->get_u2_fast();
  1141     check_property(
  1134     check_property(
  1142       valid_cp_range(signature_index, cp_size) &&
  1135       valid_cp_range(signature_index, cp_size) &&
  1143         cp->tag_at(signature_index).is_utf8(),
  1136         cp->tag_at(signature_index).is_utf8(),
  1144       "Invalid constant pool index %u for field signature in class file %s",
  1137       "Invalid constant pool index %u for field signature in class file %s",
  1145       signature_index, CHECK_(nullHandle));
  1138       signature_index, CHECK_NULL);
  1146     Symbol*  sig = cp->symbol_at(signature_index);
  1139     Symbol*  sig = cp->symbol_at(signature_index);
  1147     verify_legal_field_signature(name, sig, CHECK_(nullHandle));
  1140     verify_legal_field_signature(name, sig, CHECK_NULL);
  1148 
  1141 
  1149     u2 constantvalue_index = 0;
  1142     u2 constantvalue_index = 0;
  1150     bool is_synthetic = false;
  1143     bool is_synthetic = false;
  1151     u2 generic_signature_index = 0;
  1144     u2 generic_signature_index = 0;
  1152     bool is_static = access_flags.is_static();
  1145     bool is_static = access_flags.is_static();
  1153     FieldAnnotationCollector parsed_annotations;
  1146     FieldAnnotationCollector parsed_annotations;
  1154 
  1147 
  1155     u2 attributes_count = cfs->get_u2_fast();
  1148     u2 attributes_count = cfs->get_u2_fast();
  1156     if (attributes_count > 0) {
  1149     if (attributes_count > 0) {
  1157       parse_field_attributes(cp, attributes_count, is_static, signature_index,
  1150       parse_field_attributes(loader_data,
       
  1151                              cp, attributes_count, is_static, signature_index,
  1158                              &constantvalue_index, &is_synthetic,
  1152                              &constantvalue_index, &is_synthetic,
  1159                              &generic_signature_index, &field_annotations,
  1153                              &generic_signature_index, &field_annotations,
  1160                              &parsed_annotations,
  1154                              &parsed_annotations,
  1161                              CHECK_(nullHandle));
  1155                              CHECK_NULL);
  1162       if (field_annotations.not_null()) {
  1156       if (field_annotations != NULL) {
  1163         if (fields_annotations->is_null()) {
  1157         if (*fields_annotations == NULL) {
  1164           objArrayOop md = oopFactory::new_system_objArray(length, CHECK_(nullHandle));
  1158           *fields_annotations = MetadataFactory::new_array<AnnotationArray*>(
  1165           *fields_annotations = objArrayHandle(THREAD, md);
  1159                                              loader_data, length, NULL,
  1166         }
  1160                                              CHECK_NULL);
  1167         (*fields_annotations)->obj_at_put(n, field_annotations());
  1161         }
       
  1162         (*fields_annotations)->at_put(n, field_annotations);
  1168       }
  1163       }
  1169       if (is_synthetic) {
  1164       if (is_synthetic) {
  1170         access_flags.set_is_synthetic();
  1165         access_flags.set_is_synthetic();
  1171       }
  1166       }
  1172       if (generic_signature_index != 0) {
  1167       if (generic_signature_index != 0) {
  1242   // Now copy the fields' data from the temporary resource array.
  1237   // Now copy the fields' data from the temporary resource array.
  1243   // Sometimes injected fields already exist in the Java source so
  1238   // Sometimes injected fields already exist in the Java source so
  1244   // the fields array could be too long.  In that case the
  1239   // the fields array could be too long.  In that case the
  1245   // fields array is trimed. Also unused slots that were reserved
  1240   // fields array is trimed. Also unused slots that were reserved
  1246   // for generic signature indexes are discarded.
  1241   // for generic signature indexes are discarded.
  1247   typeArrayOop new_fields = oopFactory::new_permanent_shortArray(
  1242   Array<u2>* fields = MetadataFactory::new_array<u2>(
  1248     index * FieldInfo::field_slots + num_generic_signature,
  1243           loader_data, index * FieldInfo::field_slots + num_generic_signature,
  1249     CHECK_(nullHandle));
  1244           CHECK_NULL);
  1250   typeArrayHandle fields(THREAD, new_fields);
       
  1251   {
  1245   {
  1252     int i = 0;
  1246     int i = 0;
  1253     for (; i < index * FieldInfo::field_slots; i++) {
  1247     for (; i < index * FieldInfo::field_slots; i++) {
  1254       new_fields->short_at_put(i, fa[i]);
  1248       fields->at_put(i, fa[i]);
  1255     }
  1249     }
  1256     for (int j = total_fields * FieldInfo::field_slots;
  1250     for (int j = total_fields * FieldInfo::field_slots;
  1257          j < generic_signature_slot; j++) {
  1251          j < generic_signature_slot; j++) {
  1258       new_fields->short_at_put(i++, fa[j]);
  1252       fields->at_put(i++, fa[j]);
  1259     }
  1253     }
  1260     assert(i == new_fields->length(), "");
  1254     assert(i == fields->length(), "");
  1261   }
  1255   }
  1262 
  1256 
  1263   if (_need_verify && length > 1) {
  1257   if (_need_verify && length > 1) {
  1264     // Check duplicated fields
  1258     // Check duplicated fields
  1265     ResourceMark rm(THREAD);
  1259     ResourceMark rm(THREAD);
  1279         }
  1273         }
  1280       }
  1274       }
  1281     }
  1275     }
  1282     if (dup) {
  1276     if (dup) {
  1283       classfile_parse_error("Duplicate field name&signature in class file %s",
  1277       classfile_parse_error("Duplicate field name&signature in class file %s",
  1284                             CHECK_(nullHandle));
  1278                             CHECK_NULL);
  1285     }
  1279     }
  1286   }
  1280   }
  1287 
  1281 
  1288   return fields;
  1282   return fields;
  1289 }
  1283 }
  1294     *dest++ = Bytes::get_Java_u2((u1*) (src++));
  1288     *dest++ = Bytes::get_Java_u2((u1*) (src++));
  1295   }
  1289   }
  1296 }
  1290 }
  1297 
  1291 
  1298 
  1292 
  1299 u2* ClassFileParser::parse_exception_table(u4 code_length,
  1293 u2* ClassFileParser::parse_exception_table(ClassLoaderData* loader_data,
       
  1294                                            u4 code_length,
  1300                                            u4 exception_table_length,
  1295                                            u4 exception_table_length,
  1301                                            constantPoolHandle cp,
  1296                                            constantPoolHandle cp,
  1302                                            TRAPS) {
  1297                                            TRAPS) {
  1303   ClassFileStream* cfs = stream();
  1298   ClassFileStream* cfs = stream();
  1304 
  1299 
  1576   u2_array[*u2_index] = index;
  1571   u2_array[*u2_index] = index;
  1577   *u1_index = i1;
  1572   *u1_index = i1;
  1578   *u2_index = i2;
  1573   *u2_index = i2;
  1579 }
  1574 }
  1580 
  1575 
  1581 typeArrayOop ClassFileParser::parse_stackmap_table(
  1576 Array<u1>* ClassFileParser::parse_stackmap_table(
       
  1577     ClassLoaderData* loader_data,
  1582     u4 code_attribute_length, TRAPS) {
  1578     u4 code_attribute_length, TRAPS) {
  1583   if (code_attribute_length == 0)
  1579   if (code_attribute_length == 0)
  1584     return NULL;
  1580     return NULL;
  1585 
  1581 
  1586   ClassFileStream* cfs = stream();
  1582   ClassFileStream* cfs = stream();
  1592 
  1588 
  1593   if (!_need_verify && !DumpSharedSpaces) {
  1589   if (!_need_verify && !DumpSharedSpaces) {
  1594     return NULL;
  1590     return NULL;
  1595   }
  1591   }
  1596 
  1592 
  1597   typeArrayOop stackmap_data =
  1593   Array<u1>* stackmap_data =
  1598     oopFactory::new_permanent_byteArray(code_attribute_length, CHECK_NULL);
  1594     MetadataFactory::new_array<u1>(loader_data, code_attribute_length, 0, CHECK_NULL);
  1599 
  1595 
  1600   stackmap_data->set_length(code_attribute_length);
  1596   memcpy((void*)stackmap_data->adr_at(0),
  1601   memcpy((void*)stackmap_data->byte_at_addr(0),
       
  1602          (void*)stackmap_table_start, code_attribute_length);
  1597          (void*)stackmap_table_start, code_attribute_length);
  1603   return stackmap_data;
  1598   return stackmap_data;
  1604 }
  1599 }
  1605 
  1600 
  1606 u2* ClassFileParser::parse_checked_exceptions(u2* checked_exceptions_length,
  1601 u2* ClassFileParser::parse_checked_exceptions(u2* checked_exceptions_length,
  1811 #define MAX_CODE_SIZE 65535
  1806 #define MAX_CODE_SIZE 65535
  1812 #define INITIAL_MAX_LVT_NUMBER 256
  1807 #define INITIAL_MAX_LVT_NUMBER 256
  1813 
  1808 
  1814 // Note: the parse_method below is big and clunky because all parsing of the code and exceptions
  1809 // Note: the parse_method below is big and clunky because all parsing of the code and exceptions
  1815 // attribute is inlined. This is cumbersome to avoid since we inline most of the parts in the
  1810 // attribute is inlined. This is cumbersome to avoid since we inline most of the parts in the
  1816 // methodOop to save footprint, so we only know the size of the resulting methodOop when the
  1811 // Method* to save footprint, so we only know the size of the resulting Method* when the
  1817 // entire method attribute is parsed.
  1812 // entire method attribute is parsed.
  1818 //
  1813 //
  1819 // The promoted_flags parameter is used to pass relevant access_flags
  1814 // The promoted_flags parameter is used to pass relevant access_flags
  1820 // from the method back up to the containing klass. These flag values
  1815 // from the method back up to the containing klass. These flag values
  1821 // are added to klass's access_flags.
  1816 // are added to klass's access_flags.
  1822 
  1817 
  1823 methodHandle ClassFileParser::parse_method(constantPoolHandle cp, bool is_interface,
  1818 methodHandle ClassFileParser::parse_method(ClassLoaderData* loader_data,
       
  1819                                            constantPoolHandle cp,
       
  1820                                            bool is_interface,
  1824                                            AccessFlags *promoted_flags,
  1821                                            AccessFlags *promoted_flags,
  1825                                            typeArrayHandle* method_annotations,
  1822                                            AnnotationArray** method_annotations,
  1826                                            typeArrayHandle* method_parameter_annotations,
  1823                                            AnnotationArray** method_parameter_annotations,
  1827                                            typeArrayHandle* method_default_annotations,
  1824                                            AnnotationArray** method_default_annotations,
  1828                                            TRAPS) {
  1825                                            TRAPS) {
  1829   ClassFileStream* cfs = stream();
  1826   ClassFileStream* cfs = stream();
  1830   methodHandle nullHandle;
  1827   methodHandle nullHandle;
  1831   ResourceMark rm(THREAD);
  1828   ResourceMark rm(THREAD);
  1832   // Parse fixed parts
  1829   // Parse fixed parts
  1880   u2 max_locals = 0;
  1877   u2 max_locals = 0;
  1881   u4 code_length = 0;
  1878   u4 code_length = 0;
  1882   u1* code_start = 0;
  1879   u1* code_start = 0;
  1883   u2 exception_table_length = 0;
  1880   u2 exception_table_length = 0;
  1884   u2* exception_table_start = NULL;
  1881   u2* exception_table_start = NULL;
  1885   typeArrayHandle exception_handlers(THREAD, Universe::the_empty_int_array());
  1882   Array<int>* exception_handlers = Universe::the_empty_int_array();
  1886   u2 checked_exceptions_length = 0;
  1883   u2 checked_exceptions_length = 0;
  1887   u2* checked_exceptions_start = NULL;
  1884   u2* checked_exceptions_start = NULL;
  1888   CompressedLineNumberWriteStream* linenumber_table = NULL;
  1885   CompressedLineNumberWriteStream* linenumber_table = NULL;
  1889   int linenumber_table_length = 0;
  1886   int linenumber_table_length = 0;
  1890   int total_lvt_length = 0;
  1887   int total_lvt_length = 0;
  1899   u2** localvariable_type_table_start;
  1896   u2** localvariable_type_table_start;
  1900   bool parsed_code_attribute = false;
  1897   bool parsed_code_attribute = false;
  1901   bool parsed_checked_exceptions_attribute = false;
  1898   bool parsed_checked_exceptions_attribute = false;
  1902   bool parsed_stackmap_attribute = false;
  1899   bool parsed_stackmap_attribute = false;
  1903   // stackmap attribute - JDK1.5
  1900   // stackmap attribute - JDK1.5
  1904   typeArrayHandle stackmap_data;
  1901   Array<u1>* stackmap_data = NULL;
  1905   u2 generic_signature_index = 0;
  1902   u2 generic_signature_index = 0;
  1906   MethodAnnotationCollector parsed_annotations;
  1903   MethodAnnotationCollector parsed_annotations;
  1907   u1* runtime_visible_annotations = NULL;
  1904   u1* runtime_visible_annotations = NULL;
  1908   int runtime_visible_annotations_length = 0;
  1905   int runtime_visible_annotations_length = 0;
  1909   u1* runtime_invisible_annotations = NULL;
  1906   u1* runtime_invisible_annotations = NULL;
  1968       // Exception handler table
  1965       // Exception handler table
  1969       cfs->guarantee_more(2, CHECK_(nullHandle));  // exception_table_length
  1966       cfs->guarantee_more(2, CHECK_(nullHandle));  // exception_table_length
  1970       exception_table_length = cfs->get_u2_fast();
  1967       exception_table_length = cfs->get_u2_fast();
  1971       if (exception_table_length > 0) {
  1968       if (exception_table_length > 0) {
  1972         exception_table_start =
  1969         exception_table_start =
  1973               parse_exception_table(code_length, exception_table_length, cp, CHECK_(nullHandle));
  1970               parse_exception_table(loader_data, code_length, exception_table_length, cp, CHECK_(nullHandle));
  1974       }
  1971       }
  1975 
  1972 
  1976       // Parse additional attributes in code attribute
  1973       // Parse additional attributes in code attribute
  1977       cfs->guarantee_more(2, CHECK_(nullHandle));  // code_attributes_count
  1974       cfs->guarantee_more(2, CHECK_(nullHandle));  // code_attributes_count
  1978       u2 code_attributes_count = cfs->get_u2_fast();
  1975       u2 code_attributes_count = cfs->get_u2_fast();
  2077                    cp->symbol_at(code_attribute_name_index) == vmSymbols::tag_stack_map_table()) {
  2074                    cp->symbol_at(code_attribute_name_index) == vmSymbols::tag_stack_map_table()) {
  2078           // Stack map is only needed by the new verifier in JDK1.5.
  2075           // Stack map is only needed by the new verifier in JDK1.5.
  2079           if (parsed_stackmap_attribute) {
  2076           if (parsed_stackmap_attribute) {
  2080             classfile_parse_error("Multiple StackMapTable attributes in class file %s", CHECK_(nullHandle));
  2077             classfile_parse_error("Multiple StackMapTable attributes in class file %s", CHECK_(nullHandle));
  2081           }
  2078           }
  2082           typeArrayOop sm =
  2079           stackmap_data = parse_stackmap_table(loader_data, code_attribute_length, CHECK_(nullHandle));
  2083             parse_stackmap_table(code_attribute_length, CHECK_(nullHandle));
       
  2084           stackmap_data = typeArrayHandle(THREAD, sm);
       
  2085           parsed_stackmap_attribute = true;
  2080           parsed_stackmap_attribute = true;
  2086         } else {
  2081         } else {
  2087           // Skip unknown attributes
  2082           // Skip unknown attributes
  2088           cfs->skip_u1(code_attribute_length, CHECK_(nullHandle));
  2083           cfs->skip_u1(code_attribute_length, CHECK_(nullHandle));
  2089         }
  2084         }
  2171   if (_need_verify) {
  2166   if (_need_verify) {
  2172     guarantee_property(access_flags.is_native() || access_flags.is_abstract() || parsed_code_attribute,
  2167     guarantee_property(access_flags.is_native() || access_flags.is_abstract() || parsed_code_attribute,
  2173                       "Absent Code attribute in method that is not native or abstract in class file %s", CHECK_(nullHandle));
  2168                       "Absent Code attribute in method that is not native or abstract in class file %s", CHECK_(nullHandle));
  2174   }
  2169   }
  2175 
  2170 
  2176   // All sizing information for a methodOop is finally available, now create it
  2171   // All sizing information for a Method* is finally available, now create it
  2177   methodOop m_oop  = oopFactory::new_method(code_length, access_flags,
  2172   Method* m = Method::allocate(loader_data,
       
  2173                                         code_length,
       
  2174                                         access_flags,
  2178                                             linenumber_table_length,
  2175                                             linenumber_table_length,
  2179                                             total_lvt_length,
  2176                                             total_lvt_length,
  2180                                             exception_table_length,
  2177                                             exception_table_length,
  2181                                             checked_exceptions_length,
  2178                                             checked_exceptions_length,
  2182                                             oopDesc::IsSafeConc,
       
  2183                                             CHECK_(nullHandle));
  2179                                             CHECK_(nullHandle));
  2184   methodHandle m (THREAD, m_oop);
  2180 
  2185 
  2181   ClassLoadingService::add_class_method_size(m->size()*HeapWordSize);
  2186   ClassLoadingService::add_class_method_size(m_oop->size()*HeapWordSize);
       
  2187 
  2182 
  2188   // Fill in information from fixed part (access_flags already set)
  2183   // Fill in information from fixed part (access_flags already set)
  2189   m->set_constants(cp());
  2184   m->set_constants(cp());
  2190   m->set_name_index(name_index);
  2185   m->set_name_index(name_index);
  2191   m->set_signature_index(signature_index);
  2186   m->set_signature_index(signature_index);
  2210 
  2205 
  2211   // Fill in code attribute information
  2206   // Fill in code attribute information
  2212   m->set_max_stack(max_stack);
  2207   m->set_max_stack(max_stack);
  2213   m->set_max_locals(max_locals);
  2208   m->set_max_locals(max_locals);
  2214 
  2209 
  2215   /**
  2210   m->constMethod()->set_stackmap_data(stackmap_data);
  2216    * The stackmap_data field is the flag used to indicate
       
  2217    * that the methodOop and it's associated constMethodOop are partially
       
  2218    * initialized and thus are exempt from pre/post GC verification.  Once
       
  2219    * the field is set, the oops are considered fully initialized so make
       
  2220    * sure that the oops can pass verification when this field is set.
       
  2221    */
       
  2222   m->constMethod()->set_stackmap_data(stackmap_data());
       
  2223 
  2211 
  2224   // Copy byte codes
  2212   // Copy byte codes
  2225   m->set_code(code_start);
  2213   m->set_code(code_start);
  2226 
  2214 
  2227   // Copy line number table
  2215   // Copy line number table
  2319     clear_hashtable(lvt_Hash);
  2307     clear_hashtable(lvt_Hash);
  2320   }
  2308   }
  2321 
  2309 
  2322   if (parsed_annotations.has_any_annotations())
  2310   if (parsed_annotations.has_any_annotations())
  2323     parsed_annotations.apply_to(m);
  2311     parsed_annotations.apply_to(m);
  2324   *method_annotations = assemble_annotations(runtime_visible_annotations,
  2312   *method_annotations = assemble_annotations(loader_data,
       
  2313                                              runtime_visible_annotations,
  2325                                              runtime_visible_annotations_length,
  2314                                              runtime_visible_annotations_length,
  2326                                              runtime_invisible_annotations,
  2315                                              runtime_invisible_annotations,
  2327                                              runtime_invisible_annotations_length,
  2316                                              runtime_invisible_annotations_length,
  2328                                              CHECK_(nullHandle));
  2317                                              CHECK_(nullHandle));
  2329   *method_parameter_annotations = assemble_annotations(runtime_visible_parameter_annotations,
  2318   *method_parameter_annotations = assemble_annotations(loader_data,
       
  2319                                                        runtime_visible_parameter_annotations,
  2330                                                        runtime_visible_parameter_annotations_length,
  2320                                                        runtime_visible_parameter_annotations_length,
  2331                                                        runtime_invisible_parameter_annotations,
  2321                                                        runtime_invisible_parameter_annotations,
  2332                                                        runtime_invisible_parameter_annotations_length,
  2322                                                        runtime_invisible_parameter_annotations_length,
  2333                                                        CHECK_(nullHandle));
  2323                                                        CHECK_(nullHandle));
  2334   *method_default_annotations = assemble_annotations(annotation_default,
  2324   *method_default_annotations = assemble_annotations(loader_data,
       
  2325                                                      annotation_default,
  2335                                                      annotation_default_length,
  2326                                                      annotation_default_length,
  2336                                                      NULL,
  2327                                                      NULL,
  2337                                                      0,
  2328                                                      0,
  2338                                                      CHECK_(nullHandle));
  2329                                                      CHECK_(nullHandle));
  2339 
  2330 
  2357 
  2348 
  2358 // The promoted_flags parameter is used to pass relevant access_flags
  2349 // The promoted_flags parameter is used to pass relevant access_flags
  2359 // from the methods back up to the containing klass. These flag values
  2350 // from the methods back up to the containing klass. These flag values
  2360 // are added to klass's access_flags.
  2351 // are added to klass's access_flags.
  2361 
  2352 
  2362 objArrayHandle ClassFileParser::parse_methods(constantPoolHandle cp, bool is_interface,
  2353 Array<Method*>* ClassFileParser::parse_methods(ClassLoaderData* loader_data,
       
  2354                                                  constantPoolHandle cp,
       
  2355                                                  bool is_interface,
  2363                                               AccessFlags* promoted_flags,
  2356                                               AccessFlags* promoted_flags,
  2364                                               bool* has_final_method,
  2357                                               bool* has_final_method,
  2365                                               objArrayOop* methods_annotations_oop,
  2358                                                  Array<AnnotationArray*>** methods_annotations,
  2366                                               objArrayOop* methods_parameter_annotations_oop,
  2359                                                  Array<AnnotationArray*>** methods_parameter_annotations,
  2367                                               objArrayOop* methods_default_annotations_oop,
  2360                                                  Array<AnnotationArray*>** methods_default_annotations,
  2368                                               TRAPS) {
  2361                                               TRAPS) {
  2369   ClassFileStream* cfs = stream();
  2362   ClassFileStream* cfs = stream();
  2370   objArrayHandle nullHandle;
  2363   AnnotationArray* method_annotations = NULL;
  2371   typeArrayHandle method_annotations;
  2364   AnnotationArray* method_parameter_annotations = NULL;
  2372   typeArrayHandle method_parameter_annotations;
  2365   AnnotationArray* method_default_annotations = NULL;
  2373   typeArrayHandle method_default_annotations;
  2366   cfs->guarantee_more(2, CHECK_NULL);  // length
  2374   cfs->guarantee_more(2, CHECK_(nullHandle));  // length
       
  2375   u2 length = cfs->get_u2_fast();
  2367   u2 length = cfs->get_u2_fast();
  2376   if (length == 0) {
  2368   if (length == 0) {
  2377     return objArrayHandle(THREAD, Universe::the_empty_system_obj_array());
  2369     return Universe::the_empty_method_array();
  2378   } else {
  2370   } else {
  2379     objArrayOop m = oopFactory::new_system_objArray(length, CHECK_(nullHandle));
  2371     // FIXME: Handle leaks at later failures.
  2380     objArrayHandle methods(THREAD, m);
  2372     Array<Method*>* methods = MetadataFactory::new_array<Method*>(loader_data, length, NULL, CHECK_NULL);
       
  2373 
  2381     HandleMark hm(THREAD);
  2374     HandleMark hm(THREAD);
  2382     objArrayHandle methods_annotations;
       
  2383     objArrayHandle methods_parameter_annotations;
       
  2384     objArrayHandle methods_default_annotations;
       
  2385     for (int index = 0; index < length; index++) {
  2375     for (int index = 0; index < length; index++) {
  2386       methodHandle method = parse_method(cp, is_interface,
  2376       methodHandle method = parse_method(loader_data,
       
  2377                                          cp, is_interface,
  2387                                          promoted_flags,
  2378                                          promoted_flags,
  2388                                          &method_annotations,
  2379                                          &method_annotations,
  2389                                          &method_parameter_annotations,
  2380                                          &method_parameter_annotations,
  2390                                          &method_default_annotations,
  2381                                          &method_default_annotations,
  2391                                          CHECK_(nullHandle));
  2382                                          CHECK_NULL);
       
  2383 
  2392       if (method->is_final()) {
  2384       if (method->is_final()) {
  2393         *has_final_method = true;
  2385         *has_final_method = true;
  2394       }
  2386       }
  2395       methods->obj_at_put(index, method());
  2387       methods->at_put(index, method());
  2396       if (method_annotations.not_null()) {
  2388       if (*methods_annotations == NULL) {
  2397         if (methods_annotations.is_null()) {
  2389         *methods_annotations =
  2398           objArrayOop md = oopFactory::new_system_objArray(length, CHECK_(nullHandle));
  2390              MetadataFactory::new_array<AnnotationArray*>(loader_data, length, NULL, CHECK_NULL);
  2399           methods_annotations = objArrayHandle(THREAD, md);
  2391       }
  2400         }
  2392       (*methods_annotations)->at_put(index, method_annotations);
  2401         methods_annotations->obj_at_put(index, method_annotations());
  2393       if (*methods_parameter_annotations == NULL) {
  2402       }
  2394         *methods_parameter_annotations =
  2403       if (method_parameter_annotations.not_null()) {
  2395             MetadataFactory::new_array<AnnotationArray*>(loader_data, length, NULL, CHECK_NULL);
  2404         if (methods_parameter_annotations.is_null()) {
  2396       }
  2405           objArrayOop md = oopFactory::new_system_objArray(length, CHECK_(nullHandle));
  2397       (*methods_parameter_annotations)->at_put(index, method_parameter_annotations);
  2406           methods_parameter_annotations = objArrayHandle(THREAD, md);
  2398       if (*methods_default_annotations == NULL) {
  2407         }
  2399         *methods_default_annotations =
  2408         methods_parameter_annotations->obj_at_put(index, method_parameter_annotations());
  2400             MetadataFactory::new_array<AnnotationArray*>(loader_data, length, NULL, CHECK_NULL);
  2409       }
  2401       }
  2410       if (method_default_annotations.not_null()) {
  2402       (*methods_default_annotations)->at_put(index, method_default_annotations);
  2411         if (methods_default_annotations.is_null()) {
       
  2412           objArrayOop md = oopFactory::new_system_objArray(length, CHECK_(nullHandle));
       
  2413           methods_default_annotations = objArrayHandle(THREAD, md);
       
  2414         }
       
  2415         methods_default_annotations->obj_at_put(index, method_default_annotations());
       
  2416       }
       
  2417     }
  2403     }
  2418     if (_need_verify && length > 1) {
  2404     if (_need_verify && length > 1) {
  2419       // Check duplicated methods
  2405       // Check duplicated methods
  2420       ResourceMark rm(THREAD);
  2406       ResourceMark rm(THREAD);
  2421       NameSigHash** names_and_sigs = NEW_RESOURCE_ARRAY_IN_THREAD(
  2407       NameSigHash** names_and_sigs = NEW_RESOURCE_ARRAY_IN_THREAD(
  2423       initialize_hashtable(names_and_sigs);
  2409       initialize_hashtable(names_and_sigs);
  2424       bool dup = false;
  2410       bool dup = false;
  2425       {
  2411       {
  2426         debug_only(No_Safepoint_Verifier nsv;)
  2412         debug_only(No_Safepoint_Verifier nsv;)
  2427         for (int i = 0; i < length; i++) {
  2413         for (int i = 0; i < length; i++) {
  2428           methodOop m = (methodOop)methods->obj_at(i);
  2414           Method* m = methods->at(i);
  2429           // If no duplicates, add name/signature in hashtable names_and_sigs.
  2415           // If no duplicates, add name/signature in hashtable names_and_sigs.
  2430           if (!put_after_lookup(m->name(), m->signature(), names_and_sigs)) {
  2416           if (!put_after_lookup(m->name(), m->signature(), names_and_sigs)) {
  2431             dup = true;
  2417             dup = true;
  2432             break;
  2418             break;
  2433           }
  2419           }
  2434         }
  2420         }
  2435       }
  2421       }
  2436       if (dup) {
  2422       if (dup) {
  2437         classfile_parse_error("Duplicate method name&signature in class file %s",
  2423         classfile_parse_error("Duplicate method name&signature in class file %s",
  2438                               CHECK_(nullHandle));
  2424                               CHECK_NULL);
  2439       }
  2425       }
  2440     }
  2426     }
  2441 
       
  2442     *methods_annotations_oop = methods_annotations();
       
  2443     *methods_parameter_annotations_oop = methods_parameter_annotations();
       
  2444     *methods_default_annotations_oop = methods_default_annotations();
       
  2445 
       
  2446     return methods;
  2427     return methods;
  2447   }
  2428   }
  2448 }
  2429 }
  2449 
  2430 
  2450 
  2431 
  2451 typeArrayHandle ClassFileParser::sort_methods(objArrayHandle methods,
  2432 Array<int>* ClassFileParser::sort_methods(ClassLoaderData* loader_data,
  2452                                               objArrayHandle methods_annotations,
  2433                                           Array<Method*>* methods,
  2453                                               objArrayHandle methods_parameter_annotations,
  2434                                           Array<AnnotationArray*>* methods_annotations,
  2454                                               objArrayHandle methods_default_annotations,
  2435                                           Array<AnnotationArray*>* methods_parameter_annotations,
       
  2436                                           Array<AnnotationArray*>* methods_default_annotations,
  2455                                               TRAPS) {
  2437                                               TRAPS) {
  2456   typeArrayHandle nullHandle;
  2438   int length = methods->length();
  2457   int length = methods()->length();
       
  2458   // If JVMTI original method ordering or sharing is enabled we have to
  2439   // If JVMTI original method ordering or sharing is enabled we have to
  2459   // remember the original class file ordering.
  2440   // remember the original class file ordering.
  2460   // We temporarily use the vtable_index field in the methodOop to store the
  2441   // We temporarily use the vtable_index field in the Method* to store the
  2461   // class file index, so we can read in after calling qsort.
  2442   // class file index, so we can read in after calling qsort.
  2462   // Put the method ordering in the shared archive.
  2443   // Put the method ordering in the shared archive.
  2463   if (JvmtiExport::can_maintain_original_method_order() || DumpSharedSpaces) {
  2444   if (JvmtiExport::can_maintain_original_method_order() || DumpSharedSpaces) {
  2464     for (int index = 0; index < length; index++) {
  2445     for (int index = 0; index < length; index++) {
  2465       methodOop m = methodOop(methods->obj_at(index));
  2446       Method* m = methods->at(index);
  2466       assert(!m->valid_vtable_index(), "vtable index should not be set");
  2447       assert(!m->valid_vtable_index(), "vtable index should not be set");
  2467       m->set_vtable_index(index);
  2448       m->set_vtable_index(index);
  2468     }
  2449     }
  2469   }
  2450   }
  2470   // Sort method array by ascending method name (for faster lookups & vtable construction)
  2451   // Sort method array by ascending method name (for faster lookups & vtable construction)
  2471   // Note that the ordering is not alphabetical, see Symbol::fast_compare
  2452   // Note that the ordering is not alphabetical, see Symbol::fast_compare
  2472   methodOopDesc::sort_methods(methods(),
  2453   Method::sort_methods(methods,
  2473                               methods_annotations(),
  2454                               methods_annotations,
  2474                               methods_parameter_annotations(),
  2455                               methods_parameter_annotations,
  2475                               methods_default_annotations());
  2456                               methods_default_annotations);
  2476 
  2457 
  2477   // If JVMTI original method ordering or sharing is enabled construct int
  2458   // If JVMTI original method ordering or sharing is enabled construct int
  2478   // array remembering the original ordering
  2459   // array remembering the original ordering
  2479   if (JvmtiExport::can_maintain_original_method_order() || DumpSharedSpaces) {
  2460   if (JvmtiExport::can_maintain_original_method_order() || DumpSharedSpaces) {
  2480     typeArrayOop new_ordering = oopFactory::new_permanent_intArray(length, CHECK_(nullHandle));
  2461     Array<int>* method_ordering = MetadataFactory::new_array<int>(loader_data, length, CHECK_NULL);
  2481     typeArrayHandle method_ordering(THREAD, new_ordering);
       
  2482     for (int index = 0; index < length; index++) {
  2462     for (int index = 0; index < length; index++) {
  2483       methodOop m = methodOop(methods->obj_at(index));
  2463       Method* m = methods->at(index);
  2484       int old_index = m->vtable_index();
  2464       int old_index = m->vtable_index();
  2485       assert(old_index >= 0 && old_index < length, "invalid method index");
  2465       assert(old_index >= 0 && old_index < length, "invalid method index");
  2486       method_ordering->int_at_put(index, old_index);
  2466       method_ordering->at_put(index, old_index);
  2487       m->set_vtable_index(methodOopDesc::invalid_vtable_index);
  2467       m->set_vtable_index(Method::invalid_vtable_index);
  2488     }
  2468     }
  2489     return method_ordering;
  2469     return method_ordering;
  2490   } else {
  2470   } else {
  2491     return typeArrayHandle(THREAD, Universe::the_empty_int_array());
  2471     return Universe::the_empty_int_array();
  2492   }
  2472   }
  2493 }
  2473 }
  2494 
  2474 
  2495 
  2475 
  2496 void ClassFileParser::parse_classfile_sourcefile_attribute(constantPoolHandle cp, TRAPS) {
  2476 void ClassFileParser::parse_classfile_sourcefile_attribute(constantPoolHandle cp, TRAPS) {
  2530 
  2510 
  2531 // Inner classes can be static, private or protected (classic VM does this)
  2511 // Inner classes can be static, private or protected (classic VM does this)
  2532 #define RECOGNIZED_INNER_CLASS_MODIFIERS (JVM_RECOGNIZED_CLASS_MODIFIERS | JVM_ACC_PRIVATE | JVM_ACC_PROTECTED | JVM_ACC_STATIC)
  2512 #define RECOGNIZED_INNER_CLASS_MODIFIERS (JVM_RECOGNIZED_CLASS_MODIFIERS | JVM_ACC_PRIVATE | JVM_ACC_PROTECTED | JVM_ACC_STATIC)
  2533 
  2513 
  2534 // Return number of classes in the inner classes attribute table
  2514 // Return number of classes in the inner classes attribute table
  2535 u2 ClassFileParser::parse_classfile_inner_classes_attribute(u1* inner_classes_attribute_start,
  2515 u2 ClassFileParser::parse_classfile_inner_classes_attribute(ClassLoaderData* loader_data,
       
  2516                                                             u1* inner_classes_attribute_start,
  2536                                                             bool parsed_enclosingmethod_attribute,
  2517                                                             bool parsed_enclosingmethod_attribute,
  2537                                                             u2 enclosing_method_class_index,
  2518                                                             u2 enclosing_method_class_index,
  2538                                                             u2 enclosing_method_method_index,
  2519                                                             u2 enclosing_method_method_index,
  2539                                                             constantPoolHandle cp,
  2520                                                             constantPoolHandle cp,
  2540                                                             TRAPS) {
  2521                                                             TRAPS) {
  2555   //    inner_class_access_flags,
  2536   //    inner_class_access_flags,
  2556   //    ...
  2537   //    ...
  2557   //    enclosing_method_class_index,
  2538   //    enclosing_method_class_index,
  2558   //    enclosing_method_method_index]
  2539   //    enclosing_method_method_index]
  2559   int size = length * 4 + (parsed_enclosingmethod_attribute ? 2 : 0);
  2540   int size = length * 4 + (parsed_enclosingmethod_attribute ? 2 : 0);
  2560   typeArrayOop ic = oopFactory::new_permanent_shortArray(size, CHECK_0);
  2541   // FIXME: Will leak on exceptions.
  2561   typeArrayHandle inner_classes(THREAD, ic);
  2542   Array<u2>* inner_classes = MetadataFactory::new_array<u2>(loader_data, size, CHECK_0);
  2562   int index = 0;
  2543   int index = 0;
  2563   int cp_size = cp->length();
  2544   int cp_size = cp->length();
  2564   cfs->guarantee_more(8 * length, CHECK_0);  // 4-tuples of u2
  2545   cfs->guarantee_more(8 * length, CHECK_0);  // 4-tuples of u2
  2565   for (int n = 0; n < length; n++) {
  2546   for (int n = 0; n < length; n++) {
  2566     // Inner class index
  2547     // Inner class index
  2598       flags |= JVM_ACC_ABSTRACT;
  2579       flags |= JVM_ACC_ABSTRACT;
  2599     }
  2580     }
  2600     verify_legal_class_modifiers(flags, CHECK_0);
  2581     verify_legal_class_modifiers(flags, CHECK_0);
  2601     inner_access_flags.set_flags(flags);
  2582     inner_access_flags.set_flags(flags);
  2602 
  2583 
  2603     inner_classes->short_at_put(index++, inner_class_info_index);
  2584     inner_classes->at_put(index++, inner_class_info_index);
  2604     inner_classes->short_at_put(index++, outer_class_info_index);
  2585     inner_classes->at_put(index++, outer_class_info_index);
  2605     inner_classes->short_at_put(index++, inner_name_index);
  2586     inner_classes->at_put(index++, inner_name_index);
  2606     inner_classes->short_at_put(index++, inner_access_flags.as_short());
  2587     inner_classes->at_put(index++, inner_access_flags.as_short());
  2607   }
  2588   }
  2608 
  2589 
  2609   // 4347400: make sure there's no duplicate entry in the classes array
  2590   // 4347400: make sure there's no duplicate entry in the classes array
  2610   if (_need_verify && _major_version >= JAVA_1_5_VERSION) {
  2591   if (_need_verify && _major_version >= JAVA_1_5_VERSION) {
  2611     for(int i = 0; i < length * 4; i += 4) {
  2592     for(int i = 0; i < length * 4; i += 4) {
  2612       for(int j = i + 4; j < length * 4; j += 4) {
  2593       for(int j = i + 4; j < length * 4; j += 4) {
  2613         guarantee_property((inner_classes->ushort_at(i)   != inner_classes->ushort_at(j) ||
  2594         guarantee_property((inner_classes->at(i)   != inner_classes->at(j) ||
  2614                             inner_classes->ushort_at(i+1) != inner_classes->ushort_at(j+1) ||
  2595                             inner_classes->at(i+1) != inner_classes->at(j+1) ||
  2615                             inner_classes->ushort_at(i+2) != inner_classes->ushort_at(j+2) ||
  2596                             inner_classes->at(i+2) != inner_classes->at(j+2) ||
  2616                             inner_classes->ushort_at(i+3) != inner_classes->ushort_at(j+3)),
  2597                             inner_classes->at(i+3) != inner_classes->at(j+3)),
  2617                             "Duplicate entry in InnerClasses in class file %s",
  2598                             "Duplicate entry in InnerClasses in class file %s",
  2618                             CHECK_0);
  2599                             CHECK_0);
  2619       }
  2600       }
  2620     }
  2601     }
  2621   }
  2602   }
  2622 
  2603 
  2623   // Set EnclosingMethod class and method indexes.
  2604   // Set EnclosingMethod class and method indexes.
  2624   if (parsed_enclosingmethod_attribute) {
  2605   if (parsed_enclosingmethod_attribute) {
  2625     inner_classes->short_at_put(index++, enclosing_method_class_index);
  2606     inner_classes->at_put(index++, enclosing_method_class_index);
  2626     inner_classes->short_at_put(index++, enclosing_method_method_index);
  2607     inner_classes->at_put(index++, enclosing_method_method_index);
  2627   }
  2608   }
  2628   assert(index == size, "wrong size");
  2609   assert(index == size, "wrong size");
  2629 
  2610 
  2630   // Update instanceKlass with inner class info.
  2611   // Update InstanceKlass with inner class info.
  2631   set_class_inner_classes(inner_classes);
  2612   set_class_inner_classes(inner_classes);
  2632 
  2613 
  2633   // Restore buffer's current position.
  2614   // Restore buffer's current position.
  2634   cfs->set_current(current_mark);
  2615   cfs->set_current(current_mark);
  2635 
  2616 
  2649     "Invalid constant pool index %u in Signature attribute in class file %s",
  2630     "Invalid constant pool index %u in Signature attribute in class file %s",
  2650     signature_index, CHECK);
  2631     signature_index, CHECK);
  2651   set_class_generic_signature(cp->symbol_at(signature_index));
  2632   set_class_generic_signature(cp->symbol_at(signature_index));
  2652 }
  2633 }
  2653 
  2634 
  2654 void ClassFileParser::parse_classfile_bootstrap_methods_attribute(constantPoolHandle cp,
  2635 void ClassFileParser::parse_classfile_bootstrap_methods_attribute(ClassLoaderData* loader_data,
       
  2636                                                                   constantPoolHandle cp,
  2655                                                                   u4 attribute_byte_length, TRAPS) {
  2637                                                                   u4 attribute_byte_length, TRAPS) {
  2656   ClassFileStream* cfs = stream();
  2638   ClassFileStream* cfs = stream();
  2657   u1* current_start = cfs->current();
  2639   u1* current_start = cfs->current();
  2658 
  2640 
  2659   cfs->guarantee_more(2, CHECK);  // length
  2641   cfs->guarantee_more(2, CHECK);  // length
  2671 
  2653 
  2672   // The attribute is copied into a short[] array.
  2654   // The attribute is copied into a short[] array.
  2673   // The array begins with a series of short[2] pairs, one for each tuple.
  2655   // The array begins with a series of short[2] pairs, one for each tuple.
  2674   int index_size = (attribute_array_length * 2);
  2656   int index_size = (attribute_array_length * 2);
  2675 
  2657 
  2676   typeArrayOop operands_oop = oopFactory::new_permanent_intArray(index_size + operand_count, CHECK);
  2658   Array<u2>* operands = MetadataFactory::new_array<u2>(loader_data, index_size + operand_count, CHECK);
  2677   typeArrayHandle operands(THREAD, operands_oop);
       
  2678   operands_oop = NULL; // tidy
       
  2679 
  2659 
  2680   int operand_fill_index = index_size;
  2660   int operand_fill_index = index_size;
  2681   int cp_size = cp->length();
  2661   int cp_size = cp->length();
  2682 
  2662 
  2683   for (int n = 0; n < attribute_array_length; n++) {
  2663   for (int n = 0; n < attribute_array_length; n++) {
  2684     // Store a 32-bit offset into the header of the operand array.
  2664     // Store a 32-bit offset into the header of the operand array.
  2685     assert(constantPoolOopDesc::operand_offset_at(operands(), n) == 0, "");
  2665     ConstantPool::operand_offset_at_put(operands, n, operand_fill_index);
  2686     constantPoolOopDesc::operand_offset_at_put(operands(), n, operand_fill_index);
       
  2687 
  2666 
  2688     // Read a bootstrap specifier.
  2667     // Read a bootstrap specifier.
  2689     cfs->guarantee_more(sizeof(u2) * 2, CHECK);  // bsm, argc
  2668     cfs->guarantee_more(sizeof(u2) * 2, CHECK);  // bsm, argc
  2690     u2 bootstrap_method_index = cfs->get_u2_fast();
  2669     u2 bootstrap_method_index = cfs->get_u2_fast();
  2691     u2 argument_count = cfs->get_u2_fast();
  2670     u2 argument_count = cfs->get_u2_fast();
  2693       valid_cp_range(bootstrap_method_index, cp_size) &&
  2672       valid_cp_range(bootstrap_method_index, cp_size) &&
  2694       cp->tag_at(bootstrap_method_index).is_method_handle(),
  2673       cp->tag_at(bootstrap_method_index).is_method_handle(),
  2695       "bootstrap_method_index %u has bad constant type in class file %s",
  2674       "bootstrap_method_index %u has bad constant type in class file %s",
  2696       bootstrap_method_index,
  2675       bootstrap_method_index,
  2697       CHECK);
  2676       CHECK);
  2698     operands->short_at_put(operand_fill_index++, bootstrap_method_index);
  2677     operands->at_put(operand_fill_index++, bootstrap_method_index);
  2699     operands->short_at_put(operand_fill_index++, argument_count);
  2678     operands->at_put(operand_fill_index++, argument_count);
  2700 
  2679 
  2701     cfs->guarantee_more(sizeof(u2) * argument_count, CHECK);  // argv[argc]
  2680     cfs->guarantee_more(sizeof(u2) * argument_count, CHECK);  // argv[argc]
  2702     for (int j = 0; j < argument_count; j++) {
  2681     for (int j = 0; j < argument_count; j++) {
  2703       u2 argument_index = cfs->get_u2_fast();
  2682       u2 argument_index = cfs->get_u2_fast();
  2704       check_property(
  2683       check_property(
  2705         valid_cp_range(argument_index, cp_size) &&
  2684         valid_cp_range(argument_index, cp_size) &&
  2706         cp->tag_at(argument_index).is_loadable_constant(),
  2685         cp->tag_at(argument_index).is_loadable_constant(),
  2707         "argument_index %u has bad constant type in class file %s",
  2686         "argument_index %u has bad constant type in class file %s",
  2708         argument_index,
  2687         argument_index,
  2709         CHECK);
  2688         CHECK);
  2710       operands->short_at_put(operand_fill_index++, argument_index);
  2689       operands->at_put(operand_fill_index++, argument_index);
  2711     }
  2690     }
  2712   }
  2691   }
  2713 
  2692 
  2714   assert(operand_fill_index == operands()->length(), "exact fill");
  2693   assert(operand_fill_index == operands->length(), "exact fill");
  2715   assert(constantPoolOopDesc::operand_array_length(operands()) == attribute_array_length, "correct decode");
  2694   assert(ConstantPool::operand_array_length(operands) == attribute_array_length, "correct decode");
  2716 
  2695 
  2717   u1* current_end = cfs->current();
  2696   u1* current_end = cfs->current();
  2718   guarantee_property(current_end == current_start + attribute_byte_length,
  2697   guarantee_property(current_end == current_start + attribute_byte_length,
  2719                      "Bad length on BootstrapMethods in class file %s",
  2698                      "Bad length on BootstrapMethods in class file %s",
  2720                      CHECK);
  2699                      CHECK);
  2721 
  2700 
  2722   cp->set_operands(operands());
  2701   cp->set_operands(operands);
  2723 }
  2702 }
  2724 
  2703 
  2725 
  2704 void ClassFileParser::parse_classfile_attributes(ClassLoaderData* loader_data,
  2726 void ClassFileParser::parse_classfile_attributes(constantPoolHandle cp,
  2705                                                  constantPoolHandle cp,
  2727                                                  ClassFileParser::ClassAnnotationCollector* parsed_annotations,
  2706                                                  ClassFileParser::ClassAnnotationCollector* parsed_annotations,
  2728                                                  TRAPS) {
  2707                                                  TRAPS) {
  2729   ClassFileStream* cfs = stream();
  2708   ClassFileStream* cfs = stream();
  2730   // Set inner classes attribute to default sentinel
  2709   // Set inner classes attribute to default sentinel
  2731   set_class_inner_classes(typeArrayHandle(THREAD, Universe::the_empty_short_array()));
  2710   set_class_inner_classes(Universe::the_empty_short_array());
  2732   cfs->guarantee_more(2, CHECK);  // attributes_count
  2711   cfs->guarantee_more(2, CHECK);  // attributes_count
  2733   u2 attributes_count = cfs->get_u2_fast();
  2712   u2 attributes_count = cfs->get_u2_fast();
  2734   bool parsed_sourcefile_attribute = false;
  2713   bool parsed_sourcefile_attribute = false;
  2735   bool parsed_innerclasses_attribute = false;
  2714   bool parsed_innerclasses_attribute = false;
  2736   bool parsed_enclosingmethod_attribute = false;
  2715   bool parsed_enclosingmethod_attribute = false;
  2842       } else if (tag == vmSymbols::tag_bootstrap_methods() &&
  2821       } else if (tag == vmSymbols::tag_bootstrap_methods() &&
  2843                  _major_version >= Verifier::INVOKEDYNAMIC_MAJOR_VERSION) {
  2822                  _major_version >= Verifier::INVOKEDYNAMIC_MAJOR_VERSION) {
  2844         if (parsed_bootstrap_methods_attribute)
  2823         if (parsed_bootstrap_methods_attribute)
  2845           classfile_parse_error("Multiple BootstrapMethods attributes in class file %s", CHECK);
  2824           classfile_parse_error("Multiple BootstrapMethods attributes in class file %s", CHECK);
  2846         parsed_bootstrap_methods_attribute = true;
  2825         parsed_bootstrap_methods_attribute = true;
  2847         parse_classfile_bootstrap_methods_attribute(cp, attribute_length, CHECK);
  2826         parse_classfile_bootstrap_methods_attribute(loader_data, cp, attribute_length, CHECK);
  2848       } else {
  2827       } else {
  2849         // Unknown attribute
  2828         // Unknown attribute
  2850         cfs->skip_u1(attribute_length, CHECK);
  2829         cfs->skip_u1(attribute_length, CHECK);
  2851       }
  2830       }
  2852     } else {
  2831     } else {
  2853       // Unknown attribute
  2832       // Unknown attribute
  2854       cfs->skip_u1(attribute_length, CHECK);
  2833       cfs->skip_u1(attribute_length, CHECK);
  2855     }
  2834     }
  2856   }
  2835   }
  2857   typeArrayHandle annotations = assemble_annotations(runtime_visible_annotations,
  2836   AnnotationArray* annotations = assemble_annotations(loader_data,
       
  2837                                                       runtime_visible_annotations,
  2858                                                      runtime_visible_annotations_length,
  2838                                                      runtime_visible_annotations_length,
  2859                                                      runtime_invisible_annotations,
  2839                                                      runtime_invisible_annotations,
  2860                                                      runtime_invisible_annotations_length,
  2840                                                      runtime_invisible_annotations_length,
  2861                                                      CHECK);
  2841                                                      CHECK);
  2862   set_class_annotations(annotations);
  2842   set_class_annotations(annotations);
  2863 
  2843 
  2864   if (parsed_innerclasses_attribute || parsed_enclosingmethod_attribute) {
  2844   if (parsed_innerclasses_attribute || parsed_enclosingmethod_attribute) {
  2865     u2 num_of_classes = parse_classfile_inner_classes_attribute(
  2845     u2 num_of_classes = parse_classfile_inner_classes_attribute(
       
  2846                             loader_data,
  2866                             inner_classes_attribute_start,
  2847                             inner_classes_attribute_start,
  2867                             parsed_innerclasses_attribute,
  2848                             parsed_innerclasses_attribute,
  2868                             enclosing_method_class_index,
  2849                             enclosing_method_class_index,
  2869                             enclosing_method_method_index,
  2850                             enclosing_method_method_index,
  2870                             cp, CHECK);
  2851                             cp, CHECK);
  2893     k->set_generic_signature(_generic_signature);
  2874     k->set_generic_signature(_generic_signature);
  2894   }
  2875   }
  2895   if (_sde_buffer != NULL) {
  2876   if (_sde_buffer != NULL) {
  2896     k->set_source_debug_extension(_sde_buffer, _sde_length);
  2877     k->set_source_debug_extension(_sde_buffer, _sde_length);
  2897   }
  2878   }
  2898   k->set_inner_classes(_inner_classes());
  2879   k->set_inner_classes(_inner_classes);
  2899   k->set_class_annotations(_annotations());
  2880   if (_annotations != NULL) {
  2900 }
  2881     k->annotations()->set_class_annotations(_annotations);
  2901 
  2882   }
  2902 typeArrayHandle ClassFileParser::assemble_annotations(u1* runtime_visible_annotations,
  2883 }
       
  2884 
       
  2885 AnnotationArray* ClassFileParser::assemble_annotations(ClassLoaderData* loader_data,
       
  2886                                                        u1* runtime_visible_annotations,
  2903                                                       int runtime_visible_annotations_length,
  2887                                                       int runtime_visible_annotations_length,
  2904                                                       u1* runtime_invisible_annotations,
  2888                                                       u1* runtime_invisible_annotations,
  2905                                                       int runtime_invisible_annotations_length, TRAPS) {
  2889                                                       int runtime_invisible_annotations_length, TRAPS) {
  2906   typeArrayHandle annotations;
  2890   AnnotationArray* annotations = NULL;
  2907   if (runtime_visible_annotations != NULL ||
  2891   if (runtime_visible_annotations != NULL ||
  2908       runtime_invisible_annotations != NULL) {
  2892       runtime_invisible_annotations != NULL) {
  2909     typeArrayOop anno = oopFactory::new_permanent_byteArray(runtime_visible_annotations_length +
  2893     annotations = MetadataFactory::new_array<u1>(loader_data,
  2910                                                             runtime_invisible_annotations_length, CHECK_(annotations));
  2894                                           runtime_visible_annotations_length +
  2911     annotations = typeArrayHandle(THREAD, anno);
  2895                                           runtime_invisible_annotations_length,
       
  2896                                           CHECK_(annotations));
  2912     if (runtime_visible_annotations != NULL) {
  2897     if (runtime_visible_annotations != NULL) {
  2913       memcpy(annotations->byte_at_addr(0), runtime_visible_annotations, runtime_visible_annotations_length);
  2898       for (int i = 0; i < runtime_visible_annotations_length; i++) {
       
  2899         annotations->at_put(i, runtime_visible_annotations[i]);
       
  2900       }
  2914     }
  2901     }
  2915     if (runtime_invisible_annotations != NULL) {
  2902     if (runtime_invisible_annotations != NULL) {
  2916       memcpy(annotations->byte_at_addr(runtime_visible_annotations_length), runtime_invisible_annotations, runtime_invisible_annotations_length);
  2903       for (int i = 0; i < runtime_invisible_annotations_length; i++) {
       
  2904         int append = runtime_visible_annotations_length+i;
       
  2905         annotations->at_put(append, runtime_invisible_annotations[i]);
       
  2906       }
  2917     }
  2907     }
  2918   }
  2908   }
  2919   return annotations;
  2909   return annotations;
  2920 }
  2910 }
  2921 
  2911 
  2933   // If RedefineClasses() was used before the retransformable
  2923   // If RedefineClasses() was used before the retransformable
  2934   // agent attached, then the cached class bytes may not be the
  2924   // agent attached, then the cached class bytes may not be the
  2935   // original class bytes.
  2925   // original class bytes.
  2936   unsigned char *cached_class_file_bytes = NULL;
  2926   unsigned char *cached_class_file_bytes = NULL;
  2937   jint cached_class_file_length;
  2927   jint cached_class_file_length;
       
  2928   ClassLoaderData* loader_data = ClassLoaderData::class_loader_data(class_loader());
  2938 
  2929 
  2939   ClassFileStream* cfs = stream();
  2930   ClassFileStream* cfs = stream();
  2940   // Timing
  2931   // Timing
  2941   assert(THREAD->is_Java_thread(), "must be a JavaThread");
  2932   assert(THREAD->is_Java_thread(), "must be a JavaThread");
  2942   JavaThread* jt = (JavaThread*) THREAD;
  2933   JavaThread* jt = (JavaThread*) THREAD;
  3041   // Check if verification needs to be relaxed for this class file
  3032   // Check if verification needs to be relaxed for this class file
  3042   // Do not restrict it to jdk1.0 or jdk1.1 to maintain backward compatibility (4982376)
  3033   // Do not restrict it to jdk1.0 or jdk1.1 to maintain backward compatibility (4982376)
  3043   _relax_verify = Verifier::relax_verify_for(class_loader());
  3034   _relax_verify = Verifier::relax_verify_for(class_loader());
  3044 
  3035 
  3045   // Constant pool
  3036   // Constant pool
  3046   constantPoolHandle cp = parse_constant_pool(class_loader, CHECK_(nullHandle));
  3037   constantPoolHandle cp = parse_constant_pool(loader_data, CHECK_(nullHandle));
  3047   ConstantPoolCleaner error_handler(cp); // set constant pool to be cleaned up.
  3038   ConstantPoolCleaner error_handler(cp); // set constant pool to be cleaned up.
  3048 
  3039 
  3049   int cp_size = cp->length();
  3040   int cp_size = cp->length();
  3050 
  3041 
  3051   cfs->guarantee_more(8, CHECK_(nullHandle));  // flags, this_class, super_class, infs_len
  3042   cfs->guarantee_more(8, CHECK_(nullHandle));  // flags, this_class, super_class, infs_len
  3090     guarantee_property(class_name->byte_at(0) != JVM_SIGNATURE_ARRAY,
  3081     guarantee_property(class_name->byte_at(0) != JVM_SIGNATURE_ARRAY,
  3091                        "Bad class name in class file %s",
  3082                        "Bad class name in class file %s",
  3092                        CHECK_(nullHandle));
  3083                        CHECK_(nullHandle));
  3093   }
  3084   }
  3094 
  3085 
  3095   klassOop preserve_this_klass;   // for storing result across HandleMark
  3086   Klass* preserve_this_klass;   // for storing result across HandleMark
  3096 
  3087 
  3097   // release all handles when parsing is done
  3088   // release all handles when parsing is done
  3098   { HandleMark hm(THREAD);
  3089   { HandleMark hm(THREAD);
  3099 
  3090 
  3100     // Checks if name in class file matches requested name
  3091     // Checks if name in class file matches requested name
  3144       }
  3135       }
  3145     }
  3136     }
  3146 
  3137 
  3147     // Interfaces
  3138     // Interfaces
  3148     u2 itfs_len = cfs->get_u2_fast();
  3139     u2 itfs_len = cfs->get_u2_fast();
  3149     objArrayHandle local_interfaces;
  3140     Array<Klass*>* local_interfaces;
  3150     if (itfs_len == 0) {
  3141     if (itfs_len == 0) {
  3151       local_interfaces = objArrayHandle(THREAD, Universe::the_empty_system_obj_array());
  3142       local_interfaces = Universe::the_empty_klass_array();
  3152     } else {
  3143     } else {
  3153       local_interfaces = parse_interfaces(cp, itfs_len, class_loader, protection_domain, _class_name, CHECK_(nullHandle));
  3144       local_interfaces = parse_interfaces(cp, itfs_len, loader_data, protection_domain, _class_name, CHECK_(nullHandle));
  3154     }
  3145     }
  3155 
  3146 
  3156     u2 java_fields_count = 0;
  3147     u2 java_fields_count = 0;
  3157     // Fields (offsets are filled in later)
  3148     // Fields (offsets are filled in later)
  3158     FieldAllocationCount fac;
  3149     FieldAllocationCount fac;
  3159     objArrayHandle fields_annotations;
  3150     Array<AnnotationArray*>* fields_annotations = NULL;
  3160     typeArrayHandle fields = parse_fields(class_name, cp, access_flags.is_interface(), &fac, &fields_annotations,
  3151     Array<u2>* fields = parse_fields(loader_data, class_name, cp, access_flags.is_interface(), &fac, &fields_annotations,
  3161                                           &java_fields_count,
  3152                                           &java_fields_count,
  3162                                           CHECK_(nullHandle));
  3153                                           CHECK_(nullHandle));
  3163     // Methods
  3154     // Methods
  3164     bool has_final_method = false;
  3155     bool has_final_method = false;
  3165     AccessFlags promoted_flags;
  3156     AccessFlags promoted_flags;
  3166     promoted_flags.set_flags(0);
  3157     promoted_flags.set_flags(0);
  3167     // These need to be oop pointers because they are allocated lazily
  3158     // These need to be oop pointers because they are allocated lazily
  3168     // inside parse_methods inside a nested HandleMark
  3159     // inside parse_methods inside a nested HandleMark
  3169     objArrayOop methods_annotations_oop = NULL;
  3160     Array<AnnotationArray*>* methods_annotations = NULL;
  3170     objArrayOop methods_parameter_annotations_oop = NULL;
  3161     Array<AnnotationArray*>* methods_parameter_annotations = NULL;
  3171     objArrayOop methods_default_annotations_oop = NULL;
  3162     Array<AnnotationArray*>* methods_default_annotations = NULL;
  3172     objArrayHandle methods = parse_methods(cp, access_flags.is_interface(),
  3163     Array<Method*>* methods = parse_methods(loader_data,
       
  3164                                               cp, access_flags.is_interface(),
  3173                                            &promoted_flags,
  3165                                            &promoted_flags,
  3174                                            &has_final_method,
  3166                                            &has_final_method,
  3175                                            &methods_annotations_oop,
  3167                                               &methods_annotations,
  3176                                            &methods_parameter_annotations_oop,
  3168                                               &methods_parameter_annotations,
  3177                                            &methods_default_annotations_oop,
  3169                                               &methods_default_annotations,
  3178                                            CHECK_(nullHandle));
  3170                                            CHECK_(nullHandle));
  3179 
       
  3180     objArrayHandle methods_annotations(THREAD, methods_annotations_oop);
       
  3181     objArrayHandle methods_parameter_annotations(THREAD, methods_parameter_annotations_oop);
       
  3182     objArrayHandle methods_default_annotations(THREAD, methods_default_annotations_oop);
       
  3183 
  3171 
  3184     // Additional attributes
  3172     // Additional attributes
  3185     ClassAnnotationCollector parsed_annotations;
  3173     ClassAnnotationCollector parsed_annotations;
  3186     parse_classfile_attributes(cp, &parsed_annotations, CHECK_(nullHandle));
  3174     parse_classfile_attributes(loader_data, cp, &parsed_annotations, CHECK_(nullHandle));
  3187 
  3175 
  3188     // Make sure this is the end of class file stream
  3176     // Make sure this is the end of class file stream
  3189     guarantee_property(cfs->at_eos(), "Extra bytes at the end of class file %s", CHECK_(nullHandle));
  3177     guarantee_property(cfs->at_eos(), "Extra bytes at the end of class file %s", CHECK_(nullHandle));
  3190 
  3178 
  3191     // We check super class after class file is parsed and format is checked
  3179     // We check super class after class file is parsed and format is checked
  3196         // errors not checked yet.
  3184         // errors not checked yet.
  3197         guarantee_property(sk == vmSymbols::java_lang_Object(),
  3185         guarantee_property(sk == vmSymbols::java_lang_Object(),
  3198                            "Interfaces must have java.lang.Object as superclass in class file %s",
  3186                            "Interfaces must have java.lang.Object as superclass in class file %s",
  3199                            CHECK_(nullHandle));
  3187                            CHECK_(nullHandle));
  3200       }
  3188       }
  3201       klassOop k = SystemDictionary::resolve_super_or_fail(class_name,
  3189       Klass* k = SystemDictionary::resolve_super_or_fail(class_name,
  3202                                                            sk,
  3190                                                            sk,
  3203                                                            class_loader,
  3191                                                            class_loader,
  3204                                                            protection_domain,
  3192                                                            protection_domain,
  3205                                                            true,
  3193                                                            true,
  3206                                                            CHECK_(nullHandle));
  3194                                                            CHECK_(nullHandle));
  3227         THROW_MSG_(vmSymbols::java_lang_VerifyError(), "Cannot inherit from final class", nullHandle);
  3215         THROW_MSG_(vmSymbols::java_lang_VerifyError(), "Cannot inherit from final class", nullHandle);
  3228       }
  3216       }
  3229     }
  3217     }
  3230 
  3218 
  3231     // Compute the transitive list of all unique interfaces implemented by this class
  3219     // Compute the transitive list of all unique interfaces implemented by this class
  3232     objArrayHandle transitive_interfaces = compute_transitive_interfaces(super_klass, local_interfaces, CHECK_(nullHandle));
  3220     Array<Klass*>* transitive_interfaces = compute_transitive_interfaces(loader_data, super_klass, local_interfaces, CHECK_(nullHandle));
  3233 
  3221 
  3234     // sort methods
  3222     // sort methods
  3235     typeArrayHandle method_ordering = sort_methods(methods,
  3223     Array<int>* method_ordering = sort_methods(loader_data,
       
  3224                                                methods,
  3236                                                    methods_annotations,
  3225                                                    methods_annotations,
  3237                                                    methods_parameter_annotations,
  3226                                                    methods_parameter_annotations,
  3238                                                    methods_default_annotations,
  3227                                                    methods_default_annotations,
  3239                                                    CHECK_(nullHandle));
  3228                                                    CHECK_(nullHandle));
  3240 
  3229 
  3247     int num_miranda_methods = 0;
  3236     int num_miranda_methods = 0;
  3248 
  3237 
  3249     klassVtable::compute_vtable_size_and_num_mirandas(vtable_size,
  3238     klassVtable::compute_vtable_size_and_num_mirandas(vtable_size,
  3250                                                       num_miranda_methods,
  3239                                                       num_miranda_methods,
  3251                                                       super_klass(),
  3240                                                       super_klass(),
  3252                                                       methods(),
  3241                                                       methods,
  3253                                                       access_flags,
  3242                                                       access_flags,
  3254                                                       class_loader,
  3243                                                       class_loader,
  3255                                                       class_name,
  3244                                                       class_name,
  3256                                                       local_interfaces(),
  3245                                                       local_interfaces,
  3257                                                       CHECK_(nullHandle));
  3246                                                       CHECK_(nullHandle));
  3258 
  3247 
  3259     // Size of Java itable (in words)
  3248     // Size of Java itable (in words)
  3260     itable_size = access_flags.is_interface() ? 0 : klassItable::compute_itable_size(transitive_interfaces);
  3249     itable_size = access_flags.is_interface() ? 0 : klassItable::compute_itable_size(transitive_interfaces);
  3261 
  3250 
  3595       rt = REF_NONE;
  3584       rt = REF_NONE;
  3596     } else {
  3585     } else {
  3597       rt = super_klass->reference_type();
  3586       rt = super_klass->reference_type();
  3598     }
  3587     }
  3599 
  3588 
  3600     // We can now create the basic klassOop for this klass
  3589     // We can now create the basic Klass* for this klass
  3601     klassOop ik = oopFactory::new_instanceKlass(name, vtable_size, itable_size,
  3590     int total_oop_map_size2 =
       
  3591       InstanceKlass::nonstatic_oop_map_size(total_oop_map_count);
       
  3592 
       
  3593     Klass* ik = InstanceKlass::allocate_instance_klass(loader_data,
       
  3594                                                          vtable_size,
       
  3595                                                          itable_size,
  3602                                                 static_field_size,
  3596                                                 static_field_size,
  3603                                                 total_oop_map_count,
  3597                                                          total_oop_map_size2,
       
  3598                                                          rt,
  3604                                                 access_flags,
  3599                                                 access_flags,
  3605                                                 rt, host_klass,
  3600                                                          name,
       
  3601                                                          super_klass(),
       
  3602                                                          host_klass,
  3606                                                 CHECK_(nullHandle));
  3603                                                 CHECK_(nullHandle));
       
  3604 
       
  3605     // Add all classes to our internal class loader list here,
       
  3606     // including classes in the bootstrap (NULL) class loader.
       
  3607     loader_data->add_class(ik);
       
  3608 
  3607     instanceKlassHandle this_klass (THREAD, ik);
  3609     instanceKlassHandle this_klass (THREAD, ik);
  3608 
  3610 
  3609     assert(this_klass->static_field_size() == static_field_size, "sanity");
  3611     assert(this_klass->static_field_size() == static_field_size, "sanity");
  3610     assert(this_klass->nonstatic_oop_map_count() == total_oop_map_count,
  3612     assert(this_klass->nonstatic_oop_map_count() == total_oop_map_count,
  3611            "sanity");
  3613            "sanity");
  3616     this_klass->set_layout_helper(lh);
  3618     this_klass->set_layout_helper(lh);
  3617     assert(this_klass->oop_is_instance(), "layout is correct");
  3619     assert(this_klass->oop_is_instance(), "layout is correct");
  3618     assert(this_klass->size_helper() == instance_size, "correct size_helper");
  3620     assert(this_klass->size_helper() == instance_size, "correct size_helper");
  3619     // Not yet: supers are done below to support the new subtype-checking fields
  3621     // Not yet: supers are done below to support the new subtype-checking fields
  3620     //this_klass->set_super(super_klass());
  3622     //this_klass->set_super(super_klass());
  3621     this_klass->set_class_loader(class_loader());
  3623     this_klass->set_class_loader_data(loader_data);
  3622     this_klass->set_nonstatic_field_size(nonstatic_field_size);
  3624     this_klass->set_nonstatic_field_size(nonstatic_field_size);
  3623     this_klass->set_has_nonstatic_fields(has_nonstatic_fields);
  3625     this_klass->set_has_nonstatic_fields(has_nonstatic_fields);
  3624     this_klass->set_static_oop_field_count(fac.count[STATIC_OOP]);
  3626     this_klass->set_static_oop_field_count(fac.count[STATIC_OOP]);
  3625     cp->set_pool_holder(this_klass());
  3627     cp->set_pool_holder(this_klass());
  3626     error_handler.set_in_error(false);   // turn off error handler for cp
  3628     error_handler.set_in_error(false);   // turn off error handler for cp
  3627     this_klass->set_constants(cp());
  3629     this_klass->set_constants(cp());
  3628     this_klass->set_local_interfaces(local_interfaces());
  3630     this_klass->set_local_interfaces(local_interfaces);
  3629     this_klass->set_fields(fields(), java_fields_count);
  3631     this_klass->set_fields(fields, java_fields_count);
  3630     this_klass->set_methods(methods());
  3632     this_klass->set_methods(methods);
  3631     if (has_final_method) {
  3633     if (has_final_method) {
  3632       this_klass->set_has_final_method();
  3634       this_klass->set_has_final_method();
  3633     }
  3635     }
  3634     this_klass->set_method_ordering(method_ordering());
  3636     this_klass->set_method_ordering(method_ordering);
  3635     // The instanceKlass::_methods_jmethod_ids cache and the
  3637     // The InstanceKlass::_methods_jmethod_ids cache and the
  3636     // instanceKlass::_methods_cached_itable_indices cache are
  3638     // InstanceKlass::_methods_cached_itable_indices cache are
  3637     // both managed on the assumption that the initial cache
  3639     // both managed on the assumption that the initial cache
  3638     // size is equal to the number of methods in the class. If
  3640     // size is equal to the number of methods in the class. If
  3639     // that changes, then instanceKlass::idnum_can_increment()
  3641     // that changes, then InstanceKlass::idnum_can_increment()
  3640     // has to be changed accordingly.
  3642     // has to be changed accordingly.
  3641     this_klass->set_initial_method_idnum(methods->length());
  3643     this_klass->set_initial_method_idnum(methods->length());
  3642     this_klass->set_name(cp->klass_name_at(this_class_index));
  3644     this_klass->set_name(cp->klass_name_at(this_class_index));
  3643     if (LinkWellKnownClasses || is_anonymous())  // I am well known to myself
  3645     if (LinkWellKnownClasses || is_anonymous())  // I am well known to myself
  3644       cp->klass_at_put(this_class_index, this_klass()); // eagerly resolve
  3646       cp->klass_at_put(this_class_index, this_klass()); // eagerly resolve
  3645     this_klass->set_protection_domain(protection_domain());
  3647 
  3646     this_klass->set_fields_annotations(fields_annotations());
  3648     if (fields_annotations != NULL ||
  3647     this_klass->set_methods_annotations(methods_annotations());
  3649         methods_annotations != NULL ||
  3648     this_klass->set_methods_parameter_annotations(methods_parameter_annotations());
  3650         methods_parameter_annotations != NULL ||
  3649     this_klass->set_methods_default_annotations(methods_default_annotations());
  3651         methods_default_annotations != NULL) {
       
  3652       // Allocate an annotation type if needed.
       
  3653       Annotations* anno = Annotations::allocate(loader_data,
       
  3654                             fields_annotations, methods_annotations,
       
  3655                             methods_parameter_annotations,
       
  3656                             methods_default_annotations, CHECK_(nullHandle));
       
  3657       this_klass->set_annotations(anno);
       
  3658     } else {
       
  3659       this_klass->set_annotations(NULL);
       
  3660     }
       
  3661 
  3650 
  3662 
  3651     this_klass->set_minor_version(minor_version);
  3663     this_klass->set_minor_version(minor_version);
  3652     this_klass->set_major_version(major_version);
  3664     this_klass->set_major_version(major_version);
  3653 
  3665 
  3654     // Set up methodOop::intrinsic_id as soon as we know the names of methods.
  3666     // Set up Method*::intrinsic_id as soon as we know the names of methods.
  3655     // (We used to do this lazily, but now we query it in Rewriter,
  3667     // (We used to do this lazily, but now we query it in Rewriter,
  3656     // which is eagerly done for every method, so we might as well do it now,
  3668     // which is eagerly done for every method, so we might as well do it now,
  3657     // when everything is fresh in memory.)
  3669     // when everything is fresh in memory.)
  3658     if (methodOopDesc::klass_id_for_intrinsics(this_klass->as_klassOop()) != vmSymbols::NO_SID) {
  3670     if (Method::klass_id_for_intrinsics(this_klass()) != vmSymbols::NO_SID) {
  3659       for (int j = 0; j < methods->length(); j++) {
  3671       for (int j = 0; j < methods->length(); j++) {
  3660         ((methodOop)methods->obj_at(j))->init_intrinsic_id();
  3672         methods->at(j)->init_intrinsic_id();
  3661       }
  3673       }
  3662     }
  3674     }
  3663 
  3675 
  3664     if (cached_class_file_bytes != NULL) {
  3676     if (cached_class_file_bytes != NULL) {
  3665       // JVMTI: we have an instanceKlass now, tell it about the cached bytes
  3677       // JVMTI: we have an InstanceKlass now, tell it about the cached bytes
  3666       this_klass->set_cached_class_file(cached_class_file_bytes,
  3678       this_klass->set_cached_class_file(cached_class_file_bytes,
  3667                                         cached_class_file_length);
  3679                                         cached_class_file_length);
  3668     }
  3680     }
  3669 
  3681 
  3670     // Miranda methods
  3682     // Miranda methods
  3675         ) {
  3687         ) {
  3676       this_klass->set_has_miranda_methods(); // then set a flag
  3688       this_klass->set_has_miranda_methods(); // then set a flag
  3677     }
  3689     }
  3678 
  3690 
  3679     // Fill in field values obtained by parse_classfile_attributes
  3691     // Fill in field values obtained by parse_classfile_attributes
  3680     if (parsed_annotations.has_any_annotations())
  3692     if (parsed_annotations.has_any_annotations()) {
  3681       parsed_annotations.apply_to(this_klass);
  3693       parsed_annotations.apply_to(this_klass);
       
  3694     }
       
  3695     // Create annotations
       
  3696     if (_annotations != NULL && this_klass->annotations() == NULL) {
       
  3697       Annotations* anno = Annotations::allocate(loader_data, CHECK_NULL);
       
  3698       this_klass->set_annotations(anno);
       
  3699     }
  3682     apply_parsed_class_attributes(this_klass);
  3700     apply_parsed_class_attributes(this_klass);
  3683 
  3701 
  3684     // VerifyOops believes that once this has been set, the object is completely loaded.
       
  3685     // Compute transitive closure of interfaces this class implements
  3702     // Compute transitive closure of interfaces this class implements
  3686     this_klass->set_transitive_interfaces(transitive_interfaces());
  3703     this_klass->set_transitive_interfaces(transitive_interfaces);
  3687 
  3704 
  3688     // Fill in information needed to compute superclasses.
  3705     // Fill in information needed to compute superclasses.
  3689     this_klass->initialize_supers(super_klass(), CHECK_(nullHandle));
  3706     this_klass->initialize_supers(super_klass(), CHECK_(nullHandle));
  3690 
  3707 
  3691     // Initialize itable offset tables
  3708     // Initialize itable offset tables
  3716     }
  3733     }
  3717 
  3734 
  3718     // Allocate mirror and initialize static fields
  3735     // Allocate mirror and initialize static fields
  3719     java_lang_Class::create_mirror(this_klass, CHECK_(nullHandle));
  3736     java_lang_Class::create_mirror(this_klass, CHECK_(nullHandle));
  3720 
  3737 
  3721     ClassLoadingService::notify_class_loaded(instanceKlass::cast(this_klass()),
  3738     // Allocate a simple java object for locking during class initialization.
       
  3739     // This needs to be a java object because it can be held across a java call.
       
  3740     typeArrayOop r = oopFactory::new_typeArray(T_INT, 0, CHECK_NULL);
       
  3741     this_klass->set_init_lock(r);
       
  3742 
       
  3743     // TODO: Move these oops to the mirror
       
  3744     this_klass->set_protection_domain(protection_domain());
       
  3745 
       
  3746     // Update the loader_data graph.
       
  3747     record_defined_class_dependencies(this_klass, CHECK_NULL);
       
  3748 
       
  3749     ClassLoadingService::notify_class_loaded(InstanceKlass::cast(this_klass()),
  3722                                              false /* not shared class */);
  3750                                              false /* not shared class */);
  3723 
  3751 
  3724     if (TraceClassLoading) {
  3752     if (TraceClassLoading) {
  3725       // print in a single call to reduce interleaving of output
  3753       // print in a single call to reduce interleaving of output
  3726       if (cfs->source() != NULL) {
  3754       if (cfs->source() != NULL) {
  3727         tty->print("[Loaded %s from %s]\n", this_klass->external_name(),
  3755         tty->print("[Loaded %s from %s]\n", this_klass->external_name(),
  3728                    cfs->source());
  3756                    cfs->source());
  3729       } else if (class_loader.is_null()) {
  3757       } else if (class_loader.is_null()) {
  3730         if (THREAD->is_Java_thread()) {
  3758         if (THREAD->is_Java_thread()) {
  3731           klassOop caller = ((JavaThread*)THREAD)->security_get_caller_class(1);
  3759           Klass* caller = ((JavaThread*)THREAD)->security_get_caller_class(1);
  3732           tty->print("[Loaded %s by instance of %s]\n",
  3760           tty->print("[Loaded %s by instance of %s]\n",
  3733                      this_klass->external_name(),
  3761                      this_klass->external_name(),
  3734                      instanceKlass::cast(caller)->external_name());
  3762                      InstanceKlass::cast(caller)->external_name());
  3735         } else {
  3763         } else {
  3736           tty->print("[Loaded %s]\n", this_klass->external_name());
  3764           tty->print("[Loaded %s]\n", this_klass->external_name());
  3737         }
  3765         }
  3738       } else {
  3766       } else {
  3739         ResourceMark rm;
  3767         ResourceMark rm;
  3740         tty->print("[Loaded %s from %s]\n", this_klass->external_name(),
  3768         tty->print("[Loaded %s from %s]\n", this_klass->external_name(),
  3741                    instanceKlass::cast(class_loader->klass())->external_name());
  3769                    InstanceKlass::cast(class_loader->klass())->external_name());
  3742       }
  3770       }
  3743     }
  3771     }
  3744 
  3772 
  3745     if (TraceClassResolution) {
  3773     if (TraceClassResolution) {
  3746       // print out the superclass.
  3774       // print out the superclass.
  3747       const char * from = Klass::cast(this_klass())->external_name();
  3775       const char * from = Klass::cast(this_klass())->external_name();
  3748       if (this_klass->java_super() != NULL) {
  3776       if (this_klass->java_super() != NULL) {
  3749         tty->print("RESOLVE %s %s (super)\n", from, instanceKlass::cast(this_klass->java_super())->external_name());
  3777         tty->print("RESOLVE %s %s (super)\n", from, InstanceKlass::cast(this_klass->java_super())->external_name());
  3750       }
  3778       }
  3751       // print out each of the interface classes referred to by this class.
  3779       // print out each of the interface classes referred to by this class.
  3752       objArrayHandle local_interfaces(THREAD, this_klass->local_interfaces());
  3780       Array<Klass*>* local_interfaces = this_klass->local_interfaces();
  3753       if (!local_interfaces.is_null()) {
  3781       if (local_interfaces != NULL) {
  3754         int length = local_interfaces->length();
  3782         int length = local_interfaces->length();
  3755         for (int i = 0; i < length; i++) {
  3783         for (int i = 0; i < length; i++) {
  3756           klassOop k = klassOop(local_interfaces->obj_at(i));
  3784           Klass* k = local_interfaces->at(i);
  3757           instanceKlass* to_class = instanceKlass::cast(k);
  3785           InstanceKlass* to_class = InstanceKlass::cast(k);
  3758           const char * to = to_class->external_name();
  3786           const char * to = to_class->external_name();
  3759           tty->print("RESOLVE %s %s (interface)\n", from, to);
  3787           tty->print("RESOLVE %s %s (interface)\n", from, to);
  3760         }
  3788         }
  3761       }
  3789       }
  3762     }
  3790     }
  3779 
  3807 
  3780     // preserve result across HandleMark
  3808     // preserve result across HandleMark
  3781     preserve_this_klass = this_klass();
  3809     preserve_this_klass = this_klass();
  3782   }
  3810   }
  3783 
  3811 
  3784   // Create new handle outside HandleMark
  3812   // Create new handle outside HandleMark (might be needed for
       
  3813   // Extended Class Redefinition)
  3785   instanceKlassHandle this_klass (THREAD, preserve_this_klass);
  3814   instanceKlassHandle this_klass (THREAD, preserve_this_klass);
  3786   debug_only(this_klass->as_klassOop()->verify();)
  3815   debug_only(this_klass->verify();)
  3787 
  3816 
  3788   return this_klass;
  3817   return this_klass;
  3789 }
  3818 }
  3790 
  3819 
  3791 
  3820 
  3824 void ClassFileParser::fill_oop_maps(instanceKlassHandle k,
  3853 void ClassFileParser::fill_oop_maps(instanceKlassHandle k,
  3825                                     unsigned int nonstatic_oop_map_count,
  3854                                     unsigned int nonstatic_oop_map_count,
  3826                                     int* nonstatic_oop_offsets,
  3855                                     int* nonstatic_oop_offsets,
  3827                                     unsigned int* nonstatic_oop_counts) {
  3856                                     unsigned int* nonstatic_oop_counts) {
  3828   OopMapBlock* this_oop_map = k->start_of_nonstatic_oop_maps();
  3857   OopMapBlock* this_oop_map = k->start_of_nonstatic_oop_maps();
  3829   const instanceKlass* const super = k->superklass();
  3858   const InstanceKlass* const super = k->superklass();
  3830   const unsigned int super_count = super ? super->nonstatic_oop_map_count() : 0;
  3859   const unsigned int super_count = super ? super->nonstatic_oop_map_count() : 0;
  3831   if (super_count > 0) {
  3860   if (super_count > 0) {
  3832     // Copy maps from superklass
  3861     // Copy maps from superklass
  3833     OopMapBlock* super_oop_map = super->start_of_nonstatic_oop_maps();
  3862     OopMapBlock* super_oop_map = super->start_of_nonstatic_oop_maps();
  3834     for (unsigned int i = 0; i < super_count; ++i) {
  3863     for (unsigned int i = 0; i < super_count; ++i) {
  3859   }
  3888   }
  3860 }
  3889 }
  3861 
  3890 
  3862 
  3891 
  3863 void ClassFileParser::set_precomputed_flags(instanceKlassHandle k) {
  3892 void ClassFileParser::set_precomputed_flags(instanceKlassHandle k) {
  3864   klassOop super = k->super();
  3893   Klass* super = k->super();
  3865 
  3894 
  3866   // Check if this klass has an empty finalize method (i.e. one with return bytecode only),
  3895   // Check if this klass has an empty finalize method (i.e. one with return bytecode only),
  3867   // in which case we don't have to register objects as finalizable
  3896   // in which case we don't have to register objects as finalizable
  3868   if (!_has_empty_finalizer) {
  3897   if (!_has_empty_finalizer) {
  3869     if (_has_finalizer ||
  3898     if (_has_finalizer ||
  3870         (super != NULL && super->klass_part()->has_finalizer())) {
  3899         (super != NULL && super->has_finalizer())) {
  3871       k->set_has_finalizer();
  3900       k->set_has_finalizer();
  3872     }
  3901     }
  3873   }
  3902   }
  3874 
  3903 
  3875 #ifdef ASSERT
  3904 #ifdef ASSERT
  3876   bool f = false;
  3905   bool f = false;
  3877   methodOop m = k->lookup_method(vmSymbols::finalize_method_name(),
  3906   Method* m = k->lookup_method(vmSymbols::finalize_method_name(),
  3878                                  vmSymbols::void_method_signature());
  3907                                  vmSymbols::void_method_signature());
  3879   if (m != NULL && !m->is_empty_method()) {
  3908   if (m != NULL && !m->is_empty_method()) {
  3880     f = true;
  3909     f = true;
  3881   }
  3910   }
  3882   assert(f == k->has_finalizer(), "inconsistent has_finalizer");
  3911   assert(f == k->has_finalizer(), "inconsistent has_finalizer");
  3899       k->set_has_vanilla_constructor();
  3928       k->set_has_vanilla_constructor();
  3900     }
  3929     }
  3901 #ifdef ASSERT
  3930 #ifdef ASSERT
  3902     bool v = false;
  3931     bool v = false;
  3903     if (Klass::cast(super)->has_vanilla_constructor()) {
  3932     if (Klass::cast(super)->has_vanilla_constructor()) {
  3904       methodOop constructor = k->find_method(vmSymbols::object_initializer_name(
  3933       Method* constructor = k->find_method(vmSymbols::object_initializer_name(
  3905 ), vmSymbols::void_method_signature());
  3934 ), vmSymbols::void_method_signature());
  3906       if (constructor != NULL && constructor->is_vanilla_constructor()) {
  3935       if (constructor != NULL && constructor->is_vanilla_constructor()) {
  3907         v = true;
  3936         v = true;
  3908       }
  3937       }
  3909     }
  3938     }
  3910     assert(v == k->has_vanilla_constructor(), "inconsistent has_vanilla_constructor");
  3939     assert(v == k->has_vanilla_constructor(), "inconsistent has_vanilla_constructor");
  3911 #endif
  3940 #endif
  3912   }
  3941   }
  3913 
  3942 
  3914   // If it cannot be fast-path allocated, set a bit in the layout helper.
  3943   // If it cannot be fast-path allocated, set a bit in the layout helper.
  3915   // See documentation of instanceKlass::can_be_fastpath_allocated().
  3944   // See documentation of InstanceKlass::can_be_fastpath_allocated().
  3916   assert(k->size_helper() > 0, "layout_helper is initialized");
  3945   assert(k->size_helper() > 0, "layout_helper is initialized");
  3917   if ((!RegisterFinalizersAtInit && k->has_finalizer())
  3946   if ((!RegisterFinalizersAtInit && k->has_finalizer())
  3918       || k->is_abstract() || k->is_interface()
  3947       || k->is_abstract() || k->is_interface()
  3919       || (k->name() == vmSymbols::java_lang_Class()
  3948       || (k->name() == vmSymbols::java_lang_Class()
  3920           && k->class_loader() == NULL)
  3949           && k->class_loader_data()->is_the_null_class_loader_data())
  3921       || k->size_helper() >= FastAllocateSizeLimit) {
  3950       || k->size_helper() >= FastAllocateSizeLimit) {
  3922     // Forbid fast-path allocation.
  3951     // Forbid fast-path allocation.
  3923     jint lh = Klass::instance_layout_helper(k->size_helper(), true);
  3952     jint lh = Klass::instance_layout_helper(k->size_helper(), true);
  3924     k->set_layout_helper(lh);
  3953     k->set_layout_helper(lh);
  3925   }
  3954   }
  3926 }
  3955 }
  3927 
  3956 
       
  3957 // Attach super classes and interface classes to class loader data
       
  3958 void ClassFileParser::record_defined_class_dependencies(instanceKlassHandle defined_klass, TRAPS) {
       
  3959   ClassLoaderData * defining_loader_data = defined_klass->class_loader_data();
       
  3960   if (defining_loader_data->is_the_null_class_loader_data()) {
       
  3961       // Dependencies to null class loader data are implicit.
       
  3962       return;
       
  3963   } else {
       
  3964     // add super class dependency
       
  3965     Klass* super = defined_klass->super();
       
  3966     if (super != NULL) {
       
  3967       defining_loader_data->record_dependency(super, CHECK);
       
  3968     }
       
  3969 
       
  3970     // add super interface dependencies
       
  3971     Array<Klass*>* local_interfaces = defined_klass->local_interfaces();
       
  3972     if (local_interfaces != NULL) {
       
  3973       int length = local_interfaces->length();
       
  3974       for (int i = 0; i < length; i++) {
       
  3975         defining_loader_data->record_dependency(local_interfaces->at(i), CHECK);
       
  3976       }
       
  3977     }
       
  3978   }
       
  3979 }
  3928 
  3980 
  3929 // utility method for appending and array with check for duplicates
  3981 // utility method for appending and array with check for duplicates
  3930 
  3982 
  3931 void append_interfaces(objArrayHandle result, int& index, objArrayOop ifs) {
  3983 void append_interfaces(GrowableArray<Klass*>* result, Array<Klass*>* ifs) {
  3932   // iterate over new interfaces
  3984   // iterate over new interfaces
  3933   for (int i = 0; i < ifs->length(); i++) {
  3985   for (int i = 0; i < ifs->length(); i++) {
  3934     oop e = ifs->obj_at(i);
  3986     Klass* e = ifs->at(i);
  3935     assert(e->is_klass() && instanceKlass::cast(klassOop(e))->is_interface(), "just checking");
  3987     assert(e->is_klass() && InstanceKlass::cast(e)->is_interface(), "just checking");
  3936     // check for duplicates
       
  3937     bool duplicate = false;
       
  3938     for (int j = 0; j < index; j++) {
       
  3939       if (result->obj_at(j) == e) {
       
  3940         duplicate = true;
       
  3941         break;
       
  3942       }
       
  3943     }
       
  3944     // add new interface
  3988     // add new interface
  3945     if (!duplicate) {
  3989     result->append_if_missing(e);
  3946       result->obj_at_put(index++, e);
  3990   }
  3947     }
  3991 }
  3948   }
  3992 
  3949 }
  3993 
  3950 
  3994 Array<Klass*>* ClassFileParser::compute_transitive_interfaces(ClassLoaderData* loader_data, instanceKlassHandle super, Array<Klass*>* local_ifs, TRAPS) {
  3951 objArrayHandle ClassFileParser::compute_transitive_interfaces(instanceKlassHandle super, objArrayHandle local_ifs, TRAPS) {
       
  3952   // Compute maximum size for transitive interfaces
  3995   // Compute maximum size for transitive interfaces
  3953   int max_transitive_size = 0;
  3996   int max_transitive_size = 0;
  3954   int super_size = 0;
  3997   int super_size = 0;
  3955   // Add superclass transitive interfaces size
  3998   // Add superclass transitive interfaces size
  3956   if (super.not_null()) {
  3999   if (super.not_null()) {
  3958     max_transitive_size += super_size;
  4001     max_transitive_size += super_size;
  3959   }
  4002   }
  3960   // Add local interfaces' super interfaces
  4003   // Add local interfaces' super interfaces
  3961   int local_size = local_ifs->length();
  4004   int local_size = local_ifs->length();
  3962   for (int i = 0; i < local_size; i++) {
  4005   for (int i = 0; i < local_size; i++) {
  3963     klassOop l = klassOop(local_ifs->obj_at(i));
  4006     Klass* l = local_ifs->at(i);
  3964     max_transitive_size += instanceKlass::cast(l)->transitive_interfaces()->length();
  4007     max_transitive_size += InstanceKlass::cast(l)->transitive_interfaces()->length();
  3965   }
  4008   }
  3966   // Finally add local interfaces
  4009   // Finally add local interfaces
  3967   max_transitive_size += local_size;
  4010   max_transitive_size += local_size;
  3968   // Construct array
  4011   // Construct array
  3969   objArrayHandle result;
       
  3970   if (max_transitive_size == 0) {
  4012   if (max_transitive_size == 0) {
  3971     // no interfaces, use canonicalized array
  4013     // no interfaces, use canonicalized array
  3972     result = objArrayHandle(THREAD, Universe::the_empty_system_obj_array());
  4014     return Universe::the_empty_klass_array();
  3973   } else if (max_transitive_size == super_size) {
  4015   } else if (max_transitive_size == super_size) {
  3974     // no new local interfaces added, share superklass' transitive interface array
  4016     // no new local interfaces added, share superklass' transitive interface array
  3975     result = objArrayHandle(THREAD, super->transitive_interfaces());
  4017     return super->transitive_interfaces();
  3976   } else if (max_transitive_size == local_size) {
  4018   } else if (max_transitive_size == local_size) {
  3977     // only local interfaces added, share local interface array
  4019     // only local interfaces added, share local interface array
  3978     result = local_ifs;
  4020     return local_ifs;
  3979   } else {
  4021   } else {
  3980     objArrayHandle nullHandle;
  4022     ResourceMark rm;
  3981     objArrayOop new_objarray = oopFactory::new_system_objArray(max_transitive_size, CHECK_(nullHandle));
  4023     GrowableArray<Klass*>* result = new GrowableArray<Klass*>(max_transitive_size);
  3982     result = objArrayHandle(THREAD, new_objarray);
  4024 
  3983     int index = 0;
       
  3984     // Copy down from superclass
  4025     // Copy down from superclass
  3985     if (super.not_null()) {
  4026     if (super.not_null()) {
  3986       append_interfaces(result, index, super->transitive_interfaces());
  4027       append_interfaces(result, super->transitive_interfaces());
  3987     }
  4028     }
       
  4029 
  3988     // Copy down from local interfaces' superinterfaces
  4030     // Copy down from local interfaces' superinterfaces
  3989     for (int i = 0; i < local_ifs->length(); i++) {
  4031     for (int i = 0; i < local_ifs->length(); i++) {
  3990       klassOop l = klassOop(local_ifs->obj_at(i));
  4032       Klass* l = local_ifs->at(i);
  3991       append_interfaces(result, index, instanceKlass::cast(l)->transitive_interfaces());
  4033       append_interfaces(result, InstanceKlass::cast(l)->transitive_interfaces());
  3992     }
  4034     }
  3993     // Finally add local interfaces
  4035     // Finally add local interfaces
  3994     append_interfaces(result, index, local_ifs());
  4036     append_interfaces(result, local_ifs);
  3995 
  4037 
  3996     // Check if duplicates were removed
  4038     // length will be less than the max_transitive_size if duplicates were removed
  3997     if (index != max_transitive_size) {
  4039     int length = result->length();
  3998       assert(index < max_transitive_size, "just checking");
  4040     assert(length <= max_transitive_size, "just checking");
  3999       objArrayOop new_result = oopFactory::new_system_objArray(index, CHECK_(nullHandle));
  4041     Array<Klass*>* new_result = MetadataFactory::new_array<Klass*>(loader_data, length, CHECK_NULL);
  4000       for (int i = 0; i < index; i++) {
  4042     for (int i = 0; i < length; i++) {
  4001         oop e = result->obj_at(i);
  4043       Klass* e = result->at(i);
  4002         assert(e != NULL, "just checking");
  4044         assert(e != NULL, "just checking");
  4003         new_result->obj_at_put(i, e);
  4045       new_result->at_put(i, e);
  4004       }
  4046     }
  4005       result = objArrayHandle(THREAD, new_result);
  4047     return new_result;
  4006     }
  4048   }
  4007   }
       
  4008   return result;
       
  4009 }
  4049 }
  4010 
  4050 
  4011 
  4051 
  4012 void ClassFileParser::check_super_class_access(instanceKlassHandle this_klass, TRAPS) {
  4052 void ClassFileParser::check_super_class_access(instanceKlassHandle this_klass, TRAPS) {
  4013   klassOop super = this_klass->super();
  4053   Klass* super = this_klass->super();
  4014   if ((super != NULL) &&
  4054   if ((super != NULL) &&
  4015       (!Reflection::verify_class_access(this_klass->as_klassOop(), super, false))) {
  4055       (!Reflection::verify_class_access(this_klass(), super, false))) {
  4016     ResourceMark rm(THREAD);
  4056     ResourceMark rm(THREAD);
  4017     Exceptions::fthrow(
  4057     Exceptions::fthrow(
  4018       THREAD_AND_LOCATION,
  4058       THREAD_AND_LOCATION,
  4019       vmSymbols::java_lang_IllegalAccessError(),
  4059       vmSymbols::java_lang_IllegalAccessError(),
  4020       "class %s cannot access its superclass %s",
  4060       "class %s cannot access its superclass %s",
  4021       this_klass->external_name(),
  4061       this_klass->external_name(),
  4022       instanceKlass::cast(super)->external_name()
  4062       InstanceKlass::cast(super)->external_name()
  4023     );
  4063     );
  4024     return;
  4064     return;
  4025   }
  4065   }
  4026 }
  4066 }
  4027 
  4067 
  4028 
  4068 
  4029 void ClassFileParser::check_super_interface_access(instanceKlassHandle this_klass, TRAPS) {
  4069 void ClassFileParser::check_super_interface_access(instanceKlassHandle this_klass, TRAPS) {
  4030   objArrayHandle local_interfaces (THREAD, this_klass->local_interfaces());
  4070   Array<Klass*>* local_interfaces = this_klass->local_interfaces();
  4031   int lng = local_interfaces->length();
  4071   int lng = local_interfaces->length();
  4032   for (int i = lng - 1; i >= 0; i--) {
  4072   for (int i = lng - 1; i >= 0; i--) {
  4033     klassOop k = klassOop(local_interfaces->obj_at(i));
  4073     Klass* k = local_interfaces->at(i);
  4034     assert (k != NULL && Klass::cast(k)->is_interface(), "invalid interface");
  4074     assert (k != NULL && Klass::cast(k)->is_interface(), "invalid interface");
  4035     if (!Reflection::verify_class_access(this_klass->as_klassOop(), k, false)) {
  4075     if (!Reflection::verify_class_access(this_klass(), k, false)) {
  4036       ResourceMark rm(THREAD);
  4076       ResourceMark rm(THREAD);
  4037       Exceptions::fthrow(
  4077       Exceptions::fthrow(
  4038         THREAD_AND_LOCATION,
  4078         THREAD_AND_LOCATION,
  4039         vmSymbols::java_lang_IllegalAccessError(),
  4079         vmSymbols::java_lang_IllegalAccessError(),
  4040         "class %s cannot access its superinterface %s",
  4080         "class %s cannot access its superinterface %s",
  4041         this_klass->external_name(),
  4081         this_klass->external_name(),
  4042         instanceKlass::cast(k)->external_name()
  4082         InstanceKlass::cast(k)->external_name()
  4043       );
  4083       );
  4044       return;
  4084       return;
  4045     }
  4085     }
  4046   }
  4086   }
  4047 }
  4087 }
  4048 
  4088 
  4049 
  4089 
  4050 void ClassFileParser::check_final_method_override(instanceKlassHandle this_klass, TRAPS) {
  4090 void ClassFileParser::check_final_method_override(instanceKlassHandle this_klass, TRAPS) {
  4051   objArrayHandle methods (THREAD, this_klass->methods());
  4091   Array<Method*>* methods = this_klass->methods();
  4052   int num_methods = methods->length();
  4092   int num_methods = methods->length();
  4053 
  4093 
  4054   // go thru each method and check if it overrides a final method
  4094   // go thru each method and check if it overrides a final method
  4055   for (int index = 0; index < num_methods; index++) {
  4095   for (int index = 0; index < num_methods; index++) {
  4056     methodOop m = (methodOop)methods->obj_at(index);
  4096     Method* m = methods->at(index);
  4057 
  4097 
  4058     // skip private, static and <init> methods
  4098     // skip private, static and <init> methods
  4059     if ((!m->is_private()) &&
  4099     if ((!m->is_private()) &&
  4060         (!m->is_static()) &&
  4100         (!m->is_static()) &&
  4061         (m->name() != vmSymbols::object_initializer_name())) {
  4101         (m->name() != vmSymbols::object_initializer_name())) {
  4062 
  4102 
  4063       Symbol* name = m->name();
  4103       Symbol* name = m->name();
  4064       Symbol* signature = m->signature();
  4104       Symbol* signature = m->signature();
  4065       klassOop k = this_klass->super();
  4105       Klass* k = this_klass->super();
  4066       methodOop super_m = NULL;
  4106       Method* super_m = NULL;
  4067       while (k != NULL) {
  4107       while (k != NULL) {
  4068         // skip supers that don't have final methods.
  4108         // skip supers that don't have final methods.
  4069         if (k->klass_part()->has_final_method()) {
  4109         if (k->has_final_method()) {
  4070           // lookup a matching method in the super class hierarchy
  4110           // lookup a matching method in the super class hierarchy
  4071           super_m = instanceKlass::cast(k)->lookup_method(name, signature);
  4111           super_m = InstanceKlass::cast(k)->lookup_method(name, signature);
  4072           if (super_m == NULL) {
  4112           if (super_m == NULL) {
  4073             break; // didn't find any match; get out
  4113             break; // didn't find any match; get out
  4074           }
  4114           }
  4075 
  4115 
  4076           if (super_m->is_final() &&
  4116           if (super_m->is_final() &&
  4077               // matching method in super is final
  4117               // matching method in super is final
  4078               (Reflection::verify_field_access(this_klass->as_klassOop(),
  4118               (Reflection::verify_field_access(this_klass(),
  4079                                                super_m->method_holder(),
  4119                                                super_m->method_holder(),
  4080                                                super_m->method_holder(),
  4120                                                super_m->method_holder(),
  4081                                                super_m->access_flags(), false))
  4121                                                super_m->access_flags(), false))
  4082             // this class can access super final method and therefore override
  4122             // this class can access super final method and therefore override
  4083             ) {
  4123             ) {
  4092             );
  4132             );
  4093             return;
  4133             return;
  4094           }
  4134           }
  4095 
  4135 
  4096           // continue to look from super_m's holder's super.
  4136           // continue to look from super_m's holder's super.
  4097           k = instanceKlass::cast(super_m->method_holder())->super();
  4137           k = InstanceKlass::cast(super_m->method_holder())->super();
  4098           continue;
  4138           continue;
  4099         }
  4139         }
  4100 
  4140 
  4101         k = k->klass_part()->super();
  4141         k = k->super();
  4102       }
  4142       }
  4103     }
  4143     }
  4104   }
  4144   }
  4105 }
  4145 }
  4106 
  4146 
  4107 
  4147 
  4108 // assumes that this_klass is an interface
  4148 // assumes that this_klass is an interface
  4109 void ClassFileParser::check_illegal_static_method(instanceKlassHandle this_klass, TRAPS) {
  4149 void ClassFileParser::check_illegal_static_method(instanceKlassHandle this_klass, TRAPS) {
  4110   assert(this_klass->is_interface(), "not an interface");
  4150   assert(this_klass->is_interface(), "not an interface");
  4111   objArrayHandle methods (THREAD, this_klass->methods());
  4151   Array<Method*>* methods = this_klass->methods();
  4112   int num_methods = methods->length();
  4152   int num_methods = methods->length();
  4113 
  4153 
  4114   for (int index = 0; index < num_methods; index++) {
  4154   for (int index = 0; index < num_methods; index++) {
  4115     methodOop m = (methodOop)methods->obj_at(index);
  4155     Method* m = methods->at(index);
  4116     // if m is static and not the init method, throw a verify error
  4156     // if m is static and not the init method, throw a verify error
  4117     if ((m->is_static()) && (m->name() != vmSymbols::class_initializer_name())) {
  4157     if ((m->is_static()) && (m->name() != vmSymbols::class_initializer_name())) {
  4118       ResourceMark rm(THREAD);
  4158       ResourceMark rm(THREAD);
  4119       Exceptions::fthrow(
  4159       Exceptions::fthrow(
  4120         THREAD_AND_LOCATION,
  4160         THREAD_AND_LOCATION,