1 /*
   2  * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 #include "precompiled.hpp"
  26 #include "classfile/dictionary.hpp"
  27 #include "classfile/javaClasses.hpp"
  28 #include "classfile/loaderConstraints.hpp"
  29 #include "classfile/placeholders.hpp"
  30 #include "classfile/resolutionErrors.hpp"
  31 #include "classfile/systemDictionary.hpp"
  32 #include "classfile/vmSymbols.hpp"
  33 #include "interpreter/bytecodeStream.hpp"
  34 #include "interpreter/interpreter.hpp"
  35 #include "memory/gcLocker.hpp"
  36 #include "memory/oopFactory.hpp"
  37 #include "oops/instanceKlass.hpp"
  38 #include "oops/instanceRefKlass.hpp"
  39 #include "oops/klass.inline.hpp"
  40 #include "oops/methodDataOop.hpp"
  41 #include "oops/objArrayKlass.hpp"
  42 #include "oops/oop.inline.hpp"
  43 #include "oops/oop.inline2.hpp"
  44 #include "oops/typeArrayKlass.hpp"
  45 #include "prims/jvmtiEnvBase.hpp"
  46 #include "prims/methodHandles.hpp"
  47 #include "runtime/biasedLocking.hpp"
  48 #include "runtime/fieldType.hpp"
  49 #include "runtime/handles.inline.hpp"
  50 #include "runtime/java.hpp"
  51 #include "runtime/javaCalls.hpp"
  52 #include "runtime/mutexLocker.hpp"
  53 #include "runtime/signature.hpp"
  54 #include "services/classLoadingService.hpp"
  55 #include "services/threadService.hpp"
  56 
  57 
  58 Dictionary*            SystemDictionary::_dictionary          = NULL;
  59 PlaceholderTable*      SystemDictionary::_placeholders        = NULL;
  60 Dictionary*            SystemDictionary::_shared_dictionary   = NULL;
  61 LoaderConstraintTable* SystemDictionary::_loader_constraints  = NULL;
  62 ResolutionErrorTable*  SystemDictionary::_resolution_errors   = NULL;
  63 SymbolPropertyTable*   SystemDictionary::_invoke_method_table = NULL;
  64 
  65 
  66 int         SystemDictionary::_number_of_modifications = 0;
  67 int         SystemDictionary::_sdgeneration               = 0;
  68 const int   SystemDictionary::_primelist[_prime_array_size] = {1009,2017,4049,5051,10103,
  69               20201,40423,99991};
  70 
  71 oop         SystemDictionary::_system_loader_lock_obj     =  NULL;
  72 
  73 klassOop    SystemDictionary::_well_known_klasses[SystemDictionary::WKID_LIMIT]
  74                                                           =  { NULL /*, NULL...*/ };
  75 
  76 klassOop    SystemDictionary::_box_klasses[T_VOID+1]      =  { NULL /*, NULL...*/ };
  77 
  78 oop         SystemDictionary::_java_system_loader         =  NULL;
  79 
  80 bool        SystemDictionary::_has_loadClassInternal      =  false;
  81 bool        SystemDictionary::_has_checkPackageAccess     =  false;
  82 
  83 // lazily initialized klass variables
  84 volatile klassOop    SystemDictionary::_abstract_ownable_synchronizer_klass = NULL;
  85 
  86 
  87 // ----------------------------------------------------------------------------
  88 // Java-level SystemLoader
  89 
  90 oop SystemDictionary::java_system_loader() {
  91   return _java_system_loader;
  92 }
  93 
  94 void SystemDictionary::compute_java_system_loader(TRAPS) {
  95   KlassHandle system_klass(THREAD, WK_KLASS(ClassLoader_klass));
  96   JavaValue result(T_OBJECT);
  97   JavaCalls::call_static(&result,
  98                          KlassHandle(THREAD, WK_KLASS(ClassLoader_klass)),
  99                          vmSymbols::getSystemClassLoader_name(),
 100                          vmSymbols::void_classloader_signature(),
 101                          CHECK);
 102 
 103   _java_system_loader = (oop)result.get_jobject();
 104 }
 105 
 106 
 107 // ----------------------------------------------------------------------------
 108 // debugging
 109 
 110 #ifdef ASSERT
 111 
 112 // return true if class_name contains no '.' (internal format is '/')
 113 bool SystemDictionary::is_internal_format(Symbol* class_name) {
 114   if (class_name != NULL) {
 115     ResourceMark rm;
 116     char* name = class_name->as_C_string();
 117     return strchr(name, '.') == NULL;
 118   } else {
 119     return true;
 120   }
 121 }
 122 
 123 #endif
 124 
 125 // ----------------------------------------------------------------------------
 126 // Parallel class loading check
 127 
 128 bool SystemDictionary::is_parallelCapable(Handle class_loader) {
 129   if (UnsyncloadClass || class_loader.is_null()) return true;
 130   if (AlwaysLockClassLoader) return false;
 131   return java_lang_ClassLoader::parallelCapable(class_loader());
 132 }
 133 // ----------------------------------------------------------------------------
 134 // ParallelDefineClass flag does not apply to bootclass loader
 135 bool SystemDictionary::is_parallelDefine(Handle class_loader) {
 136    if (class_loader.is_null()) return false;
 137    if (AllowParallelDefineClass && java_lang_ClassLoader::parallelCapable(class_loader())) {
 138      return true;
 139    }
 140    return false;
 141 }
 142 // ----------------------------------------------------------------------------
 143 // Resolving of classes
 144 
 145 // Forwards to resolve_or_null
 146 
 147 klassOop SystemDictionary::resolve_or_fail(Symbol* class_name, Handle class_loader, Handle protection_domain, bool throw_error, TRAPS) {
 148   klassOop klass = resolve_or_null(class_name, class_loader, protection_domain, THREAD);
 149   if (HAS_PENDING_EXCEPTION || klass == NULL) {
 150     KlassHandle k_h(THREAD, klass);
 151     // can return a null klass
 152     klass = handle_resolution_exception(class_name, class_loader, protection_domain, throw_error, k_h, THREAD);
 153   }
 154   return klass;
 155 }
 156 
 157 klassOop SystemDictionary::handle_resolution_exception(Symbol* class_name, Handle class_loader, Handle protection_domain, bool throw_error, KlassHandle klass_h, TRAPS) {
 158   if (HAS_PENDING_EXCEPTION) {
 159     // If we have a pending exception we forward it to the caller, unless throw_error is true,
 160     // in which case we have to check whether the pending exception is a ClassNotFoundException,
 161     // and if so convert it to a NoClassDefFoundError
 162     // And chain the original ClassNotFoundException
 163     if (throw_error && PENDING_EXCEPTION->is_a(SystemDictionary::ClassNotFoundException_klass())) {
 164       ResourceMark rm(THREAD);
 165       assert(klass_h() == NULL, "Should not have result with exception pending");
 166       Handle e(THREAD, PENDING_EXCEPTION);
 167       CLEAR_PENDING_EXCEPTION;
 168       THROW_MSG_CAUSE_0(vmSymbols::java_lang_NoClassDefFoundError(), class_name->as_C_string(), e);
 169     } else {
 170       return NULL;
 171     }
 172   }
 173   // Class not found, throw appropriate error or exception depending on value of throw_error
 174   if (klass_h() == NULL) {
 175     ResourceMark rm(THREAD);
 176     if (throw_error) {
 177       THROW_MSG_0(vmSymbols::java_lang_NoClassDefFoundError(), class_name->as_C_string());
 178     } else {
 179       THROW_MSG_0(vmSymbols::java_lang_ClassNotFoundException(), class_name->as_C_string());
 180     }
 181   }
 182   return (klassOop)klass_h();
 183 }
 184 
 185 
 186 klassOop SystemDictionary::resolve_or_fail(Symbol* class_name,
 187                                            bool throw_error, TRAPS)
 188 {
 189   return resolve_or_fail(class_name, Handle(), Handle(), throw_error, THREAD);
 190 }
 191 
 192 
 193 // Forwards to resolve_instance_class_or_null
 194 
 195 klassOop SystemDictionary::resolve_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS) {
 196   assert(!THREAD->is_Compiler_thread(), "Can not load classes with the Compiler thread");
 197   if (FieldType::is_array(class_name)) {
 198     return resolve_array_class_or_null(class_name, class_loader, protection_domain, CHECK_NULL);
 199   } else if (FieldType::is_obj(class_name)) {
 200     ResourceMark rm(THREAD);
 201     // Ignore wrapping L and ;.
 202     TempNewSymbol name = SymbolTable::new_symbol(class_name->as_C_string() + 1,
 203                                    class_name->utf8_length() - 2, CHECK_NULL);
 204     return resolve_instance_class_or_null(name, class_loader, protection_domain, CHECK_NULL);
 205   } else {
 206     return resolve_instance_class_or_null(class_name, class_loader, protection_domain, CHECK_NULL);
 207   }
 208 }
 209 
 210 klassOop SystemDictionary::resolve_or_null(Symbol* class_name, TRAPS) {
 211   return resolve_or_null(class_name, Handle(), Handle(), THREAD);
 212 }
 213 
 214 // Forwards to resolve_instance_class_or_null
 215 
 216 klassOop SystemDictionary::resolve_array_class_or_null(Symbol* class_name,
 217                                                        Handle class_loader,
 218                                                        Handle protection_domain,
 219                                                        TRAPS) {
 220   assert(FieldType::is_array(class_name), "must be array");
 221   klassOop k = NULL;
 222   FieldArrayInfo fd;
 223   // dimension and object_key in FieldArrayInfo are assigned as a side-effect
 224   // of this call
 225   BasicType t = FieldType::get_array_info(class_name, fd, CHECK_NULL);
 226   if (t == T_OBJECT) {
 227     // naked oop "k" is OK here -- we assign back into it
 228     k = SystemDictionary::resolve_instance_class_or_null(fd.object_key(),
 229                                                          class_loader,
 230                                                          protection_domain,
 231                                                          CHECK_NULL);
 232     if (k != NULL) {
 233       k = Klass::cast(k)->array_klass(fd.dimension(), CHECK_NULL);
 234     }
 235   } else {
 236     k = Universe::typeArrayKlassObj(t);
 237     k = typeArrayKlass::cast(k)->array_klass(fd.dimension(), CHECK_NULL);
 238   }
 239   return k;
 240 }
 241 
 242 
 243 // Must be called for any super-class or super-interface resolution
 244 // during class definition to allow class circularity checking
 245 // super-interface callers:
 246 //    parse_interfaces - for defineClass & jvmtiRedefineClasses
 247 // super-class callers:
 248 //   ClassFileParser - for defineClass & jvmtiRedefineClasses
 249 //   load_shared_class - while loading a class from shared archive
 250 //   resolve_instance_class_or_null:
 251 //     via: handle_parallel_super_load
 252 //      when resolving a class that has an existing placeholder with
 253 //      a saved superclass [i.e. a defineClass is currently in progress]
 254 //      if another thread is trying to resolve the class, it must do
 255 //      super-class checks on its own thread to catch class circularity
 256 // This last call is critical in class circularity checking for cases
 257 // where classloading is delegated to different threads and the
 258 // classloader lock is released.
 259 // Take the case: Base->Super->Base
 260 //   1. If thread T1 tries to do a defineClass of class Base
 261 //    resolve_super_or_fail creates placeholder: T1, Base (super Super)
 262 //   2. resolve_instance_class_or_null does not find SD or placeholder for Super
 263 //    so it tries to load Super
 264 //   3. If we load the class internally, or user classloader uses same thread
 265 //      loadClassFromxxx or defineClass via parseClassFile Super ...
 266 //      3.1 resolve_super_or_fail creates placeholder: T1, Super (super Base)
 267 //      3.3 resolve_instance_class_or_null Base, finds placeholder for Base
 268 //      3.4 calls resolve_super_or_fail Base
 269 //      3.5 finds T1,Base -> throws class circularity
 270 //OR 4. If T2 tries to resolve Super via defineClass Super ...
 271 //      4.1 resolve_super_or_fail creates placeholder: T2, Super (super Base)
 272 //      4.2 resolve_instance_class_or_null Base, finds placeholder for Base (super Super)
 273 //      4.3 calls resolve_super_or_fail Super in parallel on own thread T2
 274 //      4.4 finds T2, Super -> throws class circularity
 275 // Must be called, even if superclass is null, since this is
 276 // where the placeholder entry is created which claims this
 277 // thread is loading this class/classloader.
 278 klassOop SystemDictionary::resolve_super_or_fail(Symbol* child_name,
 279                                                  Symbol* class_name,
 280                                                  Handle class_loader,
 281                                                  Handle protection_domain,
 282                                                  bool is_superclass,
 283                                                  TRAPS) {
 284 
 285   // Try to get one of the well-known klasses.
 286   // They are trusted, and do not participate in circularities.
 287   if (LinkWellKnownClasses) {
 288     klassOop k = find_well_known_klass(class_name);
 289     if (k != NULL) {
 290       return k;
 291     }
 292   }
 293 
 294   // Double-check, if child class is already loaded, just return super-class,interface
 295   // Don't add a placedholder if already loaded, i.e. already in system dictionary
 296   // Make sure there's a placeholder for the *child* before resolving.
 297   // Used as a claim that this thread is currently loading superclass/classloader
 298   // Used here for ClassCircularity checks and also for heap verification
 299   // (every instanceKlass in the heap needs to be in the system dictionary
 300   // or have a placeholder).
 301   // Must check ClassCircularity before checking if super class is already loaded
 302   //
 303   // We might not already have a placeholder if this child_name was
 304   // first seen via resolve_from_stream (jni_DefineClass or JVM_DefineClass);
 305   // the name of the class might not be known until the stream is actually
 306   // parsed.
 307   // Bugs 4643874, 4715493
 308   // compute_hash can have a safepoint
 309 
 310   unsigned int d_hash = dictionary()->compute_hash(child_name, class_loader);
 311   int d_index = dictionary()->hash_to_index(d_hash);
 312   unsigned int p_hash = placeholders()->compute_hash(child_name, class_loader);
 313   int p_index = placeholders()->hash_to_index(p_hash);
 314   // can't throw error holding a lock
 315   bool child_already_loaded = false;
 316   bool throw_circularity_error = false;
 317   {
 318     MutexLocker mu(SystemDictionary_lock, THREAD);
 319     klassOop childk = find_class(d_index, d_hash, child_name, class_loader);
 320     klassOop quicksuperk;
 321     // to support // loading: if child done loading, just return superclass
 322     // if class_name, & class_loader don't match:
 323     // if initial define, SD update will give LinkageError
 324     // if redefine: compare_class_versions will give HIERARCHY_CHANGED
 325     // so we don't throw an exception here.
 326     // see: nsk redefclass014 & java.lang.instrument Instrument032
 327     if ((childk != NULL ) && (is_superclass) &&
 328        ((quicksuperk = instanceKlass::cast(childk)->super()) != NULL) &&
 329 
 330          ((Klass::cast(quicksuperk)->name() == class_name) &&
 331             (Klass::cast(quicksuperk)->class_loader()  == class_loader()))) {
 332            return quicksuperk;
 333     } else {
 334       PlaceholderEntry* probe = placeholders()->get_entry(p_index, p_hash, child_name, class_loader);
 335       if (probe && probe->check_seen_thread(THREAD, PlaceholderTable::LOAD_SUPER)) {
 336           throw_circularity_error = true;
 337       }
 338     }
 339     if (!throw_circularity_error) {
 340       PlaceholderEntry* newprobe = placeholders()->find_and_add(p_index, p_hash, child_name, class_loader, PlaceholderTable::LOAD_SUPER, class_name, THREAD);
 341     }
 342   }
 343   if (throw_circularity_error) {
 344       ResourceMark rm(THREAD);
 345       THROW_MSG_0(vmSymbols::java_lang_ClassCircularityError(), child_name->as_C_string());
 346   }
 347 
 348 // java.lang.Object should have been found above
 349   assert(class_name != NULL, "null super class for resolving");
 350   // Resolve the super class or interface, check results on return
 351   klassOop superk = NULL;
 352   superk = SystemDictionary::resolve_or_null(class_name,
 353                                                  class_loader,
 354                                                  protection_domain,
 355                                                  THREAD);
 356 
 357   KlassHandle superk_h(THREAD, superk);
 358 
 359   // Note: clean up of placeholders currently in callers of
 360   // resolve_super_or_fail - either at update_dictionary time
 361   // or on error
 362   {
 363   MutexLocker mu(SystemDictionary_lock, THREAD);
 364    PlaceholderEntry* probe = placeholders()->get_entry(p_index, p_hash, child_name, class_loader);
 365    if (probe != NULL) {
 366       probe->remove_seen_thread(THREAD, PlaceholderTable::LOAD_SUPER);
 367    }
 368   }
 369   if (HAS_PENDING_EXCEPTION || superk_h() == NULL) {
 370     // can null superk
 371     superk_h = KlassHandle(THREAD, handle_resolution_exception(class_name, class_loader, protection_domain, true, superk_h, THREAD));
 372   }
 373 
 374   return superk_h();
 375 }
 376 
 377 void SystemDictionary::validate_protection_domain(instanceKlassHandle klass,
 378                                                   Handle class_loader,
 379                                                   Handle protection_domain,
 380                                                   TRAPS) {
 381   if(!has_checkPackageAccess()) return;
 382 
 383   // Now we have to call back to java to check if the initating class has access
 384   JavaValue result(T_VOID);
 385   if (TraceProtectionDomainVerification) {
 386     // Print out trace information
 387     tty->print_cr("Checking package access");
 388     tty->print(" - class loader:      "); class_loader()->print_value_on(tty);      tty->cr();
 389     tty->print(" - protection domain: "); protection_domain()->print_value_on(tty); tty->cr();
 390     tty->print(" - loading:           "); klass()->print_value_on(tty);             tty->cr();
 391   }
 392 
 393   assert(class_loader() != NULL, "should not have non-null protection domain for null classloader");
 394 
 395   KlassHandle system_loader(THREAD, SystemDictionary::ClassLoader_klass());
 396   JavaCalls::call_special(&result,
 397                          class_loader,
 398                          system_loader,
 399                          vmSymbols::checkPackageAccess_name(),
 400                          vmSymbols::class_protectiondomain_signature(),
 401                          Handle(THREAD, klass->java_mirror()),
 402                          protection_domain,
 403                          THREAD);
 404 
 405   if (TraceProtectionDomainVerification) {
 406     if (HAS_PENDING_EXCEPTION) {
 407       tty->print_cr(" -> DENIED !!!!!!!!!!!!!!!!!!!!!");
 408     } else {
 409      tty->print_cr(" -> granted");
 410     }
 411     tty->cr();
 412   }
 413 
 414   if (HAS_PENDING_EXCEPTION) return;
 415 
 416   // If no exception has been thrown, we have validated the protection domain
 417   // Insert the protection domain of the initiating class into the set.
 418   {
 419     // We recalculate the entry here -- we've called out to java since
 420     // the last time it was calculated.
 421     Symbol*  kn = klass->name();
 422     unsigned int d_hash = dictionary()->compute_hash(kn, class_loader);
 423     int d_index = dictionary()->hash_to_index(d_hash);
 424 
 425     MutexLocker mu(SystemDictionary_lock, THREAD);
 426     {
 427       // Note that we have an entry, and entries can be deleted only during GC,
 428       // so we cannot allow GC to occur while we're holding this entry.
 429 
 430       // We're using a No_Safepoint_Verifier to catch any place where we
 431       // might potentially do a GC at all.
 432       // SystemDictionary::do_unloading() asserts that classes are only
 433       // unloaded at a safepoint.
 434       No_Safepoint_Verifier nosafepoint;
 435       dictionary()->add_protection_domain(d_index, d_hash, klass, class_loader,
 436                                           protection_domain, THREAD);
 437     }
 438   }
 439 }
 440 
 441 // We only get here if this thread finds that another thread
 442 // has already claimed the placeholder token for the current operation,
 443 // but that other thread either never owned or gave up the
 444 // object lock
 445 // Waits on SystemDictionary_lock to indicate placeholder table updated
 446 // On return, caller must recheck placeholder table state
 447 //
 448 // We only get here if
 449 //  1) custom classLoader, i.e. not bootstrap classloader
 450 //  2) UnsyncloadClass not set
 451 //  3) custom classLoader has broken the class loader objectLock
 452 //     so another thread got here in parallel
 453 //
 454 // lockObject must be held.
 455 // Complicated dance due to lock ordering:
 456 // Must first release the classloader object lock to
 457 // allow initial definer to complete the class definition
 458 // and to avoid deadlock
 459 // Reclaim classloader lock object with same original recursion count
 460 // Must release SystemDictionary_lock after notify, since
 461 // class loader lock must be claimed before SystemDictionary_lock
 462 // to prevent deadlocks
 463 //
 464 // The notify allows applications that did an untimed wait() on
 465 // the classloader object lock to not hang.
 466 void SystemDictionary::double_lock_wait(Handle lockObject, TRAPS) {
 467   assert_lock_strong(SystemDictionary_lock);
 468 
 469   bool calledholdinglock
 470       = ObjectSynchronizer::current_thread_holds_lock((JavaThread*)THREAD, lockObject);
 471   assert(calledholdinglock,"must hold lock for notify");
 472   assert((!(lockObject() == _system_loader_lock_obj) && !is_parallelCapable(lockObject)), "unexpected double_lock_wait");
 473   ObjectSynchronizer::notifyall(lockObject, THREAD);
 474   intptr_t recursions =  ObjectSynchronizer::complete_exit(lockObject, THREAD);
 475   SystemDictionary_lock->wait();
 476   SystemDictionary_lock->unlock();
 477   ObjectSynchronizer::reenter(lockObject, recursions, THREAD);
 478   SystemDictionary_lock->lock();
 479 }
 480 
 481 // If the class in is in the placeholder table, class loading is in progress
 482 // For cases where the application changes threads to load classes, it
 483 // is critical to ClassCircularity detection that we try loading
 484 // the superclass on the same thread internally, so we do parallel
 485 // super class loading here.
 486 // This also is critical in cases where the original thread gets stalled
 487 // even in non-circularity situations.
 488 // Note: only one thread can define the class, but multiple can resolve
 489 // Note: must call resolve_super_or_fail even if null super -
 490 // to force placeholder entry creation for this class for circularity detection
 491 // Caller must check for pending exception
 492 // Returns non-null klassOop if other thread has completed load
 493 // and we are done,
 494 // If return null klassOop and no pending exception, the caller must load the class
 495 instanceKlassHandle SystemDictionary::handle_parallel_super_load(
 496     Symbol* name, Symbol* superclassname, Handle class_loader,
 497     Handle protection_domain, Handle lockObject, TRAPS) {
 498 
 499   instanceKlassHandle nh = instanceKlassHandle(); // null Handle
 500   unsigned int d_hash = dictionary()->compute_hash(name, class_loader);
 501   int d_index = dictionary()->hash_to_index(d_hash);
 502   unsigned int p_hash = placeholders()->compute_hash(name, class_loader);
 503   int p_index = placeholders()->hash_to_index(p_hash);
 504 
 505   // superk is not used, resolve_super called for circularity check only
 506   // This code is reached in two situations. One if this thread
 507   // is loading the same class twice (e.g. ClassCircularity, or
 508   // java.lang.instrument).
 509   // The second is if another thread started the resolve_super first
 510   // and has not yet finished.
 511   // In both cases the original caller will clean up the placeholder
 512   // entry on error.
 513   klassOop superk = SystemDictionary::resolve_super_or_fail(name,
 514                                                           superclassname,
 515                                                           class_loader,
 516                                                           protection_domain,
 517                                                           true,
 518                                                           CHECK_(nh));
 519   // We don't redefine the class, so we just need to clean up if there
 520   // was not an error (don't want to modify any system dictionary
 521   // data structures).
 522   {
 523     MutexLocker mu(SystemDictionary_lock, THREAD);
 524     placeholders()->find_and_remove(p_index, p_hash, name, class_loader, THREAD);
 525     SystemDictionary_lock->notify_all();
 526   }
 527 
 528   // parallelCapable class loaders do NOT wait for parallel superclass loads to complete
 529   // Serial class loaders and bootstrap classloader do wait for superclass loads
 530  if (!class_loader.is_null() && is_parallelCapable(class_loader)) {
 531     MutexLocker mu(SystemDictionary_lock, THREAD);
 532     // Check if classloading completed while we were loading superclass or waiting
 533     klassOop check = find_class(d_index, d_hash, name, class_loader);
 534     if (check != NULL) {
 535       // Klass is already loaded, so just return it
 536       return(instanceKlassHandle(THREAD, check));
 537     } else {
 538       return nh;
 539     }
 540   }
 541 
 542   // must loop to both handle other placeholder updates
 543   // and spurious notifications
 544   bool super_load_in_progress = true;
 545   PlaceholderEntry* placeholder;
 546   while (super_load_in_progress) {
 547     MutexLocker mu(SystemDictionary_lock, THREAD);
 548     // Check if classloading completed while we were loading superclass or waiting
 549     klassOop check = find_class(d_index, d_hash, name, class_loader);
 550     if (check != NULL) {
 551       // Klass is already loaded, so just return it
 552       return(instanceKlassHandle(THREAD, check));
 553     } else {
 554       placeholder = placeholders()->get_entry(p_index, p_hash, name, class_loader);
 555       if (placeholder && placeholder->super_load_in_progress() ){
 556         // Before UnsyncloadClass:
 557         // We only get here if the application has released the
 558         // classloader lock when another thread was in the middle of loading a
 559         // superclass/superinterface for this class, and now
 560         // this thread is also trying to load this class.
 561         // To minimize surprises, the first thread that started to
 562         // load a class should be the one to complete the loading
 563         // with the classfile it initially expected.
 564         // This logic has the current thread wait once it has done
 565         // all the superclass/superinterface loading it can, until
 566         // the original thread completes the class loading or fails
 567         // If it completes we will use the resulting instanceKlass
 568         // which we will find below in the systemDictionary.
 569         // We also get here for parallel bootstrap classloader
 570         if (class_loader.is_null()) {
 571           SystemDictionary_lock->wait();
 572         } else {
 573           double_lock_wait(lockObject, THREAD);
 574         }
 575       } else {
 576         // If not in SD and not in PH, other thread's load must have failed
 577         super_load_in_progress = false;
 578       }
 579     }
 580   }
 581   return (nh);
 582 }
 583 
 584 
 585 klassOop SystemDictionary::resolve_instance_class_or_null(Symbol* name, Handle class_loader, Handle protection_domain, TRAPS) {
 586   assert(name != NULL && !FieldType::is_array(name) &&
 587          !FieldType::is_obj(name), "invalid class name");
 588 
 589   // UseNewReflection
 590   // Fix for 4474172; see evaluation for more details
 591   class_loader = Handle(THREAD, java_lang_ClassLoader::non_reflection_class_loader(class_loader()));
 592 
 593   // Do lookup to see if class already exist and the protection domain
 594   // has the right access
 595   unsigned int d_hash = dictionary()->compute_hash(name, class_loader);
 596   int d_index = dictionary()->hash_to_index(d_hash);
 597   klassOop probe = dictionary()->find(d_index, d_hash, name, class_loader,
 598                                       protection_domain, THREAD);
 599   if (probe != NULL) return probe;
 600 
 601 
 602   // Non-bootstrap class loaders will call out to class loader and
 603   // define via jvm/jni_DefineClass which will acquire the
 604   // class loader object lock to protect against multiple threads
 605   // defining the class in parallel by accident.
 606   // This lock must be acquired here so the waiter will find
 607   // any successful result in the SystemDictionary and not attempt
 608   // the define
 609   // ParallelCapable Classloaders and the bootstrap classloader,
 610   // or all classloaders with UnsyncloadClass do not acquire lock here
 611   bool DoObjectLock = true;
 612   if (is_parallelCapable(class_loader)) {
 613     DoObjectLock = false;
 614   }
 615 
 616   unsigned int p_hash = placeholders()->compute_hash(name, class_loader);
 617   int p_index = placeholders()->hash_to_index(p_hash);
 618 
 619   // Class is not in SystemDictionary so we have to do loading.
 620   // Make sure we are synchronized on the class loader before we proceed
 621   Handle lockObject = compute_loader_lock_object(class_loader, THREAD);
 622   check_loader_lock_contention(lockObject, THREAD);
 623   ObjectLocker ol(lockObject, THREAD, DoObjectLock);
 624 
 625   // Check again (after locking) if class already exist in SystemDictionary
 626   bool class_has_been_loaded   = false;
 627   bool super_load_in_progress  = false;
 628   bool havesupername = false;
 629   instanceKlassHandle k;
 630   PlaceholderEntry* placeholder;
 631   Symbol* superclassname = NULL;
 632 
 633   {
 634     MutexLocker mu(SystemDictionary_lock, THREAD);
 635     klassOop check = find_class(d_index, d_hash, name, class_loader);
 636     if (check != NULL) {
 637       // Klass is already loaded, so just return it
 638       class_has_been_loaded = true;
 639       k = instanceKlassHandle(THREAD, check);
 640     } else {
 641       placeholder = placeholders()->get_entry(p_index, p_hash, name, class_loader);
 642       if (placeholder && placeholder->super_load_in_progress()) {
 643          super_load_in_progress = true;
 644          if (placeholder->havesupername() == true) {
 645            superclassname = placeholder->supername();
 646            havesupername = true;
 647          }
 648       }
 649     }
 650   }
 651 
 652   // If the class in is in the placeholder table, class loading is in progress
 653   if (super_load_in_progress && havesupername==true) {
 654     k = SystemDictionary::handle_parallel_super_load(name, superclassname,
 655         class_loader, protection_domain, lockObject, THREAD);
 656     if (HAS_PENDING_EXCEPTION) {
 657       return NULL;
 658     }
 659     if (!k.is_null()) {
 660       class_has_been_loaded = true;
 661     }
 662   }
 663 
 664   if (!class_has_been_loaded) {
 665 
 666     // add placeholder entry to record loading instance class
 667     // Five cases:
 668     // All cases need to prevent modifying bootclasssearchpath
 669     // in parallel with a classload of same classname
 670     // Redefineclasses uses existence of the placeholder for the duration
 671     // of the class load to prevent concurrent redefinition of not completely
 672     // defined classes.
 673     // case 1. traditional classloaders that rely on the classloader object lock
 674     //   - no other need for LOAD_INSTANCE
 675     // case 2. traditional classloaders that break the classloader object lock
 676     //    as a deadlock workaround. Detection of this case requires that
 677     //    this check is done while holding the classloader object lock,
 678     //    and that lock is still held when calling classloader's loadClass.
 679     //    For these classloaders, we ensure that the first requestor
 680     //    completes the load and other requestors wait for completion.
 681     // case 3. UnsyncloadClass - don't use objectLocker
 682     //    With this flag, we allow parallel classloading of a
 683     //    class/classloader pair
 684     // case4. Bootstrap classloader - don't own objectLocker
 685     //    This classloader supports parallelism at the classloader level,
 686     //    but only allows a single load of a class/classloader pair.
 687     //    No performance benefit and no deadlock issues.
 688     // case 5. parallelCapable user level classloaders - without objectLocker
 689     //    Allow parallel classloading of a class/classloader pair
 690     bool throw_circularity_error = false;
 691     {
 692       MutexLocker mu(SystemDictionary_lock, THREAD);
 693       if (class_loader.is_null() || !is_parallelCapable(class_loader)) {
 694         PlaceholderEntry* oldprobe = placeholders()->get_entry(p_index, p_hash, name, class_loader);
 695         if (oldprobe) {
 696           // only need check_seen_thread once, not on each loop
 697           // 6341374 java/lang/Instrument with -Xcomp
 698           if (oldprobe->check_seen_thread(THREAD, PlaceholderTable::LOAD_INSTANCE)) {
 699             throw_circularity_error = true;
 700           } else {
 701             // case 1: traditional: should never see load_in_progress.
 702             while (!class_has_been_loaded && oldprobe && oldprobe->instance_load_in_progress()) {
 703 
 704               // case 4: bootstrap classloader: prevent futile classloading,
 705               // wait on first requestor
 706               if (class_loader.is_null()) {
 707                 SystemDictionary_lock->wait();
 708               } else {
 709               // case 2: traditional with broken classloader lock. wait on first
 710               // requestor.
 711                 double_lock_wait(lockObject, THREAD);
 712               }
 713               // Check if classloading completed while we were waiting
 714               klassOop check = find_class(d_index, d_hash, name, class_loader);
 715               if (check != NULL) {
 716                 // Klass is already loaded, so just return it
 717                 k = instanceKlassHandle(THREAD, check);
 718                 class_has_been_loaded = true;
 719               }
 720               // check if other thread failed to load and cleaned up
 721               oldprobe = placeholders()->get_entry(p_index, p_hash, name, class_loader);
 722             }
 723           }
 724         }
 725       }
 726       // All cases: add LOAD_INSTANCE
 727       // case 3: UnsyncloadClass || case 5: parallelCapable: allow competing threads to try
 728       // LOAD_INSTANCE in parallel
 729       // add placeholder entry even if error - callers will remove on error
 730       if (!throw_circularity_error && !class_has_been_loaded) {
 731         PlaceholderEntry* newprobe = placeholders()->find_and_add(p_index, p_hash, name, class_loader, PlaceholderTable::LOAD_INSTANCE, NULL, THREAD);
 732         // For class loaders that do not acquire the classloader object lock,
 733         // if they did not catch another thread holding LOAD_INSTANCE,
 734         // need a check analogous to the acquire ObjectLocker/find_class
 735         // i.e. now that we hold the LOAD_INSTANCE token on loading this class/CL
 736         // one final check if the load has already completed
 737         // class loaders holding the ObjectLock shouldn't find the class here
 738         klassOop check = find_class(d_index, d_hash, name, class_loader);
 739         if (check != NULL) {
 740         // Klass is already loaded, so just return it
 741           k = instanceKlassHandle(THREAD, check);
 742           class_has_been_loaded = true;
 743           newprobe->remove_seen_thread(THREAD, PlaceholderTable::LOAD_INSTANCE);
 744           placeholders()->find_and_remove(p_index, p_hash, name, class_loader, THREAD);
 745           SystemDictionary_lock->notify_all();
 746         }
 747       }
 748     }
 749     // must throw error outside of owning lock
 750     if (throw_circularity_error) {
 751       ResourceMark rm(THREAD);
 752       THROW_MSG_0(vmSymbols::java_lang_ClassCircularityError(), name->as_C_string());
 753     }
 754 
 755     if (!class_has_been_loaded) {
 756 
 757       // Do actual loading
 758       k = load_instance_class(name, class_loader, THREAD);
 759 
 760       // For UnsyncloadClass only
 761       // If they got a linkageError, check if a parallel class load succeeded.
 762       // If it did, then for bytecode resolution the specification requires
 763       // that we return the same result we did for the other thread, i.e. the
 764       // successfully loaded instanceKlass
 765       // Should not get here for classloaders that support parallelism
 766       // with the new cleaner mechanism, even with AllowParallelDefineClass
 767       // Bootstrap goes through here to allow for an extra guarantee check
 768       if (UnsyncloadClass || (class_loader.is_null())) {
 769         if (k.is_null() && HAS_PENDING_EXCEPTION
 770           && PENDING_EXCEPTION->is_a(SystemDictionary::LinkageError_klass())) {
 771           MutexLocker mu(SystemDictionary_lock, THREAD);
 772           klassOop check = find_class(d_index, d_hash, name, class_loader);
 773           if (check != NULL) {
 774             // Klass is already loaded, so just use it
 775             k = instanceKlassHandle(THREAD, check);
 776             CLEAR_PENDING_EXCEPTION;
 777             guarantee((!class_loader.is_null()), "dup definition for bootstrap loader?");
 778           }
 779         }
 780       }
 781 
 782       // clean up placeholder entries for success or error
 783       // This cleans up LOAD_INSTANCE entries
 784       // It also cleans up LOAD_SUPER entries on errors from
 785       // calling load_instance_class
 786       {
 787         MutexLocker mu(SystemDictionary_lock, THREAD);
 788         PlaceholderEntry* probe = placeholders()->get_entry(p_index, p_hash, name, class_loader);
 789         if (probe != NULL) {
 790           probe->remove_seen_thread(THREAD, PlaceholderTable::LOAD_INSTANCE);
 791           placeholders()->find_and_remove(p_index, p_hash, name, class_loader, THREAD);
 792           SystemDictionary_lock->notify_all();
 793         }
 794       }
 795 
 796       // If everything was OK (no exceptions, no null return value), and
 797       // class_loader is NOT the defining loader, do a little more bookkeeping.
 798       if (!HAS_PENDING_EXCEPTION && !k.is_null() &&
 799         k->class_loader() != class_loader()) {
 800 
 801         check_constraints(d_index, d_hash, k, class_loader, false, THREAD);
 802 
 803         // Need to check for a PENDING_EXCEPTION again; check_constraints
 804         // can throw and doesn't use the CHECK macro.
 805         if (!HAS_PENDING_EXCEPTION) {
 806           { // Grabbing the Compile_lock prevents systemDictionary updates
 807             // during compilations.
 808             MutexLocker mu(Compile_lock, THREAD);
 809             update_dictionary(d_index, d_hash, p_index, p_hash,
 810                             k, class_loader, THREAD);
 811           }
 812           if (JvmtiExport::should_post_class_load()) {
 813             Thread *thread = THREAD;
 814             assert(thread->is_Java_thread(), "thread->is_Java_thread()");
 815             JvmtiExport::post_class_load((JavaThread *) thread, k());
 816           }
 817         }
 818       }
 819       if (HAS_PENDING_EXCEPTION || k.is_null()) {
 820         // On error, clean up placeholders
 821         {
 822           MutexLocker mu(SystemDictionary_lock, THREAD);
 823           placeholders()->find_and_remove(p_index, p_hash, name, class_loader, THREAD);
 824           SystemDictionary_lock->notify_all();
 825         }
 826         return NULL;
 827       }
 828     }
 829   }
 830 
 831 #ifdef ASSERT
 832   {
 833     Handle loader (THREAD, k->class_loader());
 834     MutexLocker mu(SystemDictionary_lock, THREAD);
 835     oop kk = find_class(name, loader);
 836     assert(kk == k(), "should be present in dictionary");
 837   }
 838 #endif
 839 
 840   // return if the protection domain in NULL
 841   if (protection_domain() == NULL) return k();
 842 
 843   // Check the protection domain has the right access
 844   {
 845     MutexLocker mu(SystemDictionary_lock, THREAD);
 846     // Note that we have an entry, and entries can be deleted only during GC,
 847     // so we cannot allow GC to occur while we're holding this entry.
 848     // We're using a No_Safepoint_Verifier to catch any place where we
 849     // might potentially do a GC at all.
 850     // SystemDictionary::do_unloading() asserts that classes are only
 851     // unloaded at a safepoint.
 852     No_Safepoint_Verifier nosafepoint;
 853     if (dictionary()->is_valid_protection_domain(d_index, d_hash, name,
 854                                                  class_loader,
 855                                                  protection_domain)) {
 856       return k();
 857     }
 858   }
 859 
 860   // Verify protection domain. If it fails an exception is thrown
 861   validate_protection_domain(k, class_loader, protection_domain, CHECK_(klassOop(NULL)));
 862 
 863   return k();
 864 }
 865 
 866 
 867 // This routine does not lock the system dictionary.
 868 //
 869 // Since readers don't hold a lock, we must make sure that system
 870 // dictionary entries are only removed at a safepoint (when only one
 871 // thread is running), and are added to in a safe way (all links must
 872 // be updated in an MT-safe manner).
 873 //
 874 // Callers should be aware that an entry could be added just after
 875 // _dictionary->bucket(index) is read here, so the caller will not see
 876 // the new entry.
 877 
 878 klassOop SystemDictionary::find(Symbol* class_name,
 879                                 Handle class_loader,
 880                                 Handle protection_domain,
 881                                 TRAPS) {
 882 
 883   // UseNewReflection
 884   // The result of this call should be consistent with the result
 885   // of the call to resolve_instance_class_or_null().
 886   // See evaluation 6790209 and 4474172 for more details.
 887   class_loader = Handle(THREAD, java_lang_ClassLoader::non_reflection_class_loader(class_loader()));
 888 
 889   unsigned int d_hash = dictionary()->compute_hash(class_name, class_loader);
 890   int d_index = dictionary()->hash_to_index(d_hash);
 891 
 892   {
 893     // Note that we have an entry, and entries can be deleted only during GC,
 894     // so we cannot allow GC to occur while we're holding this entry.
 895     // We're using a No_Safepoint_Verifier to catch any place where we
 896     // might potentially do a GC at all.
 897     // SystemDictionary::do_unloading() asserts that classes are only
 898     // unloaded at a safepoint.
 899     No_Safepoint_Verifier nosafepoint;
 900     return dictionary()->find(d_index, d_hash, class_name, class_loader,
 901                               protection_domain, THREAD);
 902   }
 903 }
 904 
 905 
 906 // Look for a loaded instance or array klass by name.  Do not do any loading.
 907 // return NULL in case of error.
 908 klassOop SystemDictionary::find_instance_or_array_klass(Symbol* class_name,
 909                                                         Handle class_loader,
 910                                                         Handle protection_domain,
 911                                                         TRAPS) {
 912   klassOop k = NULL;
 913   assert(class_name != NULL, "class name must be non NULL");
 914 
 915   // Try to get one of the well-known klasses.
 916   if (LinkWellKnownClasses) {
 917     k = find_well_known_klass(class_name);
 918     if (k != NULL) {
 919       return k;
 920     }
 921   }
 922 
 923   if (FieldType::is_array(class_name)) {
 924     // The name refers to an array.  Parse the name.
 925     // dimension and object_key in FieldArrayInfo are assigned as a
 926     // side-effect of this call
 927     FieldArrayInfo fd;
 928     BasicType t = FieldType::get_array_info(class_name, fd, CHECK_(NULL));
 929     if (t != T_OBJECT) {
 930       k = Universe::typeArrayKlassObj(t);
 931     } else {
 932       k = SystemDictionary::find(fd.object_key(), class_loader, protection_domain, THREAD);
 933     }
 934     if (k != NULL) {
 935       k = Klass::cast(k)->array_klass_or_null(fd.dimension());
 936     }
 937   } else {
 938     k = find(class_name, class_loader, protection_domain, THREAD);
 939   }
 940   return k;
 941 }
 942 
 943 // Quick range check for names of well-known classes:
 944 static Symbol* wk_klass_name_limits[2] = {NULL, NULL};
 945 
 946 #ifndef PRODUCT
 947 static int find_wkk_calls, find_wkk_probes, find_wkk_wins;
 948 // counts for "hello world": 3983, 1616, 1075
 949 //  => 60% hit after limit guard, 25% total win rate
 950 #endif
 951 
 952 klassOop SystemDictionary::find_well_known_klass(Symbol* class_name) {
 953   // A bounds-check on class_name will quickly get a negative result.
 954   NOT_PRODUCT(find_wkk_calls++);
 955   if (class_name >= wk_klass_name_limits[0] &&
 956       class_name <= wk_klass_name_limits[1]) {
 957     NOT_PRODUCT(find_wkk_probes++);
 958     vmSymbols::SID sid = vmSymbols::find_sid(class_name);
 959     if (sid != vmSymbols::NO_SID) {
 960       klassOop k = NULL;
 961       switch (sid) {
 962         #define WK_KLASS_CASE(name, symbol, ignore_option) \
 963         case vmSymbols::VM_SYMBOL_ENUM_NAME(symbol): \
 964           k = WK_KLASS(name); break;
 965         WK_KLASSES_DO(WK_KLASS_CASE)
 966         #undef WK_KLASS_CASE
 967       }
 968       NOT_PRODUCT(if (k != NULL)  find_wkk_wins++);
 969       return k;
 970     }
 971   }
 972   return NULL;
 973 }
 974 
 975 // Note: this method is much like resolve_from_stream, but
 976 // updates no supplemental data structures.
 977 // TODO consolidate the two methods with a helper routine?
 978 klassOop SystemDictionary::parse_stream(Symbol* class_name,
 979                                         Handle class_loader,
 980                                         Handle protection_domain,
 981                                         ClassFileStream* st,
 982                                         KlassHandle host_klass,
 983                                         GrowableArray<Handle>* cp_patches,
 984                                         TRAPS) {
 985   TempNewSymbol parsed_name = NULL;
 986 
 987   // Parse the stream. Note that we do this even though this klass might
 988   // already be present in the SystemDictionary, otherwise we would not
 989   // throw potential ClassFormatErrors.
 990   //
 991   // Note: "name" is updated.
 992   // Further note:  a placeholder will be added for this class when
 993   //   super classes are loaded (resolve_super_or_fail). We expect this
 994   //   to be called for all classes but java.lang.Object; and we preload
 995   //   java.lang.Object through resolve_or_fail, not this path.
 996 
 997   instanceKlassHandle k = ClassFileParser(st).parseClassFile(class_name,
 998                                                              class_loader,
 999                                                              protection_domain,
1000                                                              host_klass,
1001                                                              cp_patches,
1002                                                              parsed_name,
1003                                                              true,
1004                                                              THREAD);
1005 
1006   // We don't redefine the class, so we just need to clean up whether there
1007   // was an error or not (don't want to modify any system dictionary
1008   // data structures).
1009   // Parsed name could be null if we threw an error before we got far
1010   // enough along to parse it -- in that case, there is nothing to clean up.
1011   if (parsed_name != NULL) {
1012     unsigned int p_hash = placeholders()->compute_hash(parsed_name,
1013                                                        class_loader);
1014     int p_index = placeholders()->hash_to_index(p_hash);
1015     {
1016     MutexLocker mu(SystemDictionary_lock, THREAD);
1017     placeholders()->find_and_remove(p_index, p_hash, parsed_name, class_loader, THREAD);
1018     SystemDictionary_lock->notify_all();
1019     }
1020   }
1021 
1022   if (host_klass.not_null() && k.not_null()) {
1023     assert(EnableInvokeDynamic, "");
1024     // If it's anonymous, initialize it now, since nobody else will.
1025     k->set_host_klass(host_klass());
1026 
1027     {
1028       MutexLocker mu_r(Compile_lock, THREAD);
1029 
1030       // Add to class hierarchy, initialize vtables, and do possible
1031       // deoptimizations.
1032       add_to_hierarchy(k, CHECK_NULL); // No exception, but can block
1033 
1034       // But, do not add to system dictionary.
1035     }
1036 
1037     k->eager_initialize(THREAD);
1038 
1039     // notify jvmti
1040     if (JvmtiExport::should_post_class_load()) {
1041         assert(THREAD->is_Java_thread(), "thread->is_Java_thread()");
1042         JvmtiExport::post_class_load((JavaThread *) THREAD, k());
1043     }
1044   }
1045 
1046   return k();
1047 }
1048 
1049 // Add a klass to the system from a stream (called by jni_DefineClass and
1050 // JVM_DefineClass).
1051 // Note: class_name can be NULL. In that case we do not know the name of
1052 // the class until we have parsed the stream.
1053 
1054 klassOop SystemDictionary::resolve_from_stream(Symbol* class_name,
1055                                                Handle class_loader,
1056                                                Handle protection_domain,
1057                                                ClassFileStream* st,
1058                                                bool verify,
1059                                                TRAPS) {
1060 
1061   // Classloaders that support parallelism, e.g. bootstrap classloader,
1062   // or all classloaders with UnsyncloadClass do not acquire lock here
1063   bool DoObjectLock = true;
1064   if (is_parallelCapable(class_loader)) {
1065     DoObjectLock = false;
1066   }
1067 
1068   // Make sure we are synchronized on the class loader before we proceed
1069   Handle lockObject = compute_loader_lock_object(class_loader, THREAD);
1070   check_loader_lock_contention(lockObject, THREAD);
1071   ObjectLocker ol(lockObject, THREAD, DoObjectLock);
1072 
1073   TempNewSymbol parsed_name = NULL;
1074 
1075   // Parse the stream. Note that we do this even though this klass might
1076   // already be present in the SystemDictionary, otherwise we would not
1077   // throw potential ClassFormatErrors.
1078   //
1079   // Note: "name" is updated.
1080   // Further note:  a placeholder will be added for this class when
1081   //   super classes are loaded (resolve_super_or_fail). We expect this
1082   //   to be called for all classes but java.lang.Object; and we preload
1083   //   java.lang.Object through resolve_or_fail, not this path.
1084 
1085   instanceKlassHandle k = ClassFileParser(st).parseClassFile(class_name,
1086                                                              class_loader,
1087                                                              protection_domain,
1088                                                              parsed_name,
1089                                                              verify,
1090                                                              THREAD);
1091 
1092   const char* pkg = "java/";
1093   if (!HAS_PENDING_EXCEPTION &&
1094       !class_loader.is_null() &&
1095       parsed_name != NULL &&
1096       !strncmp((const char*)parsed_name->bytes(), pkg, strlen(pkg))) {
1097     // It is illegal to define classes in the "java." package from
1098     // JVM_DefineClass or jni_DefineClass unless you're the bootclassloader
1099     ResourceMark rm(THREAD);
1100     char* name = parsed_name->as_C_string();
1101     char* index = strrchr(name, '/');
1102     *index = '\0'; // chop to just the package name
1103     while ((index = strchr(name, '/')) != NULL) {
1104       *index = '.'; // replace '/' with '.' in package name
1105     }
1106     const char* fmt = "Prohibited package name: %s";
1107     size_t len = strlen(fmt) + strlen(name);
1108     char* message = NEW_RESOURCE_ARRAY(char, len);
1109     jio_snprintf(message, len, fmt, name);
1110     Exceptions::_throw_msg(THREAD_AND_LOCATION,
1111       vmSymbols::java_lang_SecurityException(), message);
1112   }
1113 
1114   if (!HAS_PENDING_EXCEPTION) {
1115     assert(parsed_name != NULL, "Sanity");
1116     assert(class_name == NULL || class_name == parsed_name, "name mismatch");
1117     // Verification prevents us from creating names with dots in them, this
1118     // asserts that that's the case.
1119     assert(is_internal_format(parsed_name),
1120            "external class name format used internally");
1121 
1122     // Add class just loaded
1123     // If a class loader supports parallel classloading handle parallel define requests
1124     // find_or_define_instance_class may return a different instanceKlass
1125     if (is_parallelCapable(class_loader)) {
1126       k = find_or_define_instance_class(class_name, class_loader, k, THREAD);
1127     } else {
1128       define_instance_class(k, THREAD);
1129     }
1130   }
1131 
1132   // If parsing the class file or define_instance_class failed, we
1133   // need to remove the placeholder added on our behalf. But we
1134   // must make sure parsed_name is valid first (it won't be if we had
1135   // a format error before the class was parsed far enough to
1136   // find the name).
1137   if (HAS_PENDING_EXCEPTION && parsed_name != NULL) {
1138     unsigned int p_hash = placeholders()->compute_hash(parsed_name,
1139                                                        class_loader);
1140     int p_index = placeholders()->hash_to_index(p_hash);
1141     {
1142     MutexLocker mu(SystemDictionary_lock, THREAD);
1143     placeholders()->find_and_remove(p_index, p_hash, parsed_name, class_loader, THREAD);
1144     SystemDictionary_lock->notify_all();
1145     }
1146     return NULL;
1147   }
1148 
1149   // Make sure that we didn't leave a place holder in the
1150   // SystemDictionary; this is only done on success
1151   debug_only( {
1152     if (!HAS_PENDING_EXCEPTION) {
1153       assert(parsed_name != NULL, "parsed_name is still null?");
1154       Symbol*  h_name    = k->name();
1155       Handle h_loader (THREAD, k->class_loader());
1156 
1157       MutexLocker mu(SystemDictionary_lock, THREAD);
1158 
1159       klassOop check = find_class(parsed_name, class_loader);
1160       assert(check == k(), "should be present in the dictionary");
1161 
1162       klassOop check2 = find_class(h_name, h_loader);
1163       assert(check == check2, "name inconsistancy in SystemDictionary");
1164     }
1165   } );
1166 
1167   return k();
1168 }
1169 
1170 
1171 void SystemDictionary::set_shared_dictionary(HashtableBucket* t, int length,
1172                                              int number_of_entries) {
1173   assert(length == _nof_buckets * sizeof(HashtableBucket),
1174          "bad shared dictionary size.");
1175   _shared_dictionary = new Dictionary(_nof_buckets, t, number_of_entries);
1176 }
1177 
1178 
1179 // If there is a shared dictionary, then find the entry for the
1180 // given shared system class, if any.
1181 
1182 klassOop SystemDictionary::find_shared_class(Symbol* class_name) {
1183   if (shared_dictionary() != NULL) {
1184     unsigned int d_hash = shared_dictionary()->compute_hash(class_name, Handle());
1185     int d_index = shared_dictionary()->hash_to_index(d_hash);
1186     return shared_dictionary()->find_shared_class(d_index, d_hash, class_name);
1187   } else {
1188     return NULL;
1189   }
1190 }
1191 
1192 
1193 // Load a class from the shared spaces (found through the shared system
1194 // dictionary).  Force the superclass and all interfaces to be loaded.
1195 // Update the class definition to include sibling classes and no
1196 // subclasses (yet).  [Classes in the shared space are not part of the
1197 // object hierarchy until loaded.]
1198 
1199 instanceKlassHandle SystemDictionary::load_shared_class(
1200                  Symbol* class_name, Handle class_loader, TRAPS) {
1201   instanceKlassHandle ik (THREAD, find_shared_class(class_name));
1202   return load_shared_class(ik, class_loader, THREAD);
1203 }
1204 
1205 // Note well!  Changes to this method may affect oop access order
1206 // in the shared archive.  Please take care to not make changes that
1207 // adversely affect cold start time by changing the oop access order
1208 // that is specified in dump.cpp MarkAndMoveOrderedReadOnly and
1209 // MarkAndMoveOrderedReadWrite closures.
1210 instanceKlassHandle SystemDictionary::load_shared_class(
1211                  instanceKlassHandle ik, Handle class_loader, TRAPS) {
1212   assert(class_loader.is_null(), "non-null classloader for shared class?");
1213   if (ik.not_null()) {
1214     instanceKlassHandle nh = instanceKlassHandle(); // null Handle
1215     Symbol*  class_name = ik->name();
1216 
1217     // Found the class, now load the superclass and interfaces.  If they
1218     // are shared, add them to the main system dictionary and reset
1219     // their hierarchy references (supers, subs, and interfaces).
1220 
1221     if (ik->super() != NULL) {
1222       Symbol*  cn = ik->super()->klass_part()->name();
1223       klassOop s = resolve_super_or_fail(class_name, cn,
1224                                          class_loader, Handle(), true, CHECK_(nh));
1225       if (s->klass_part() != ik->super()->klass_part()) {
1226         // The dynamically resolved super class is not the same as the one we used during dump time,
1227         // so we cannot use ik.
1228         return nh;
1229       }
1230     }
1231 
1232     objArrayHandle interfaces (THREAD, ik->local_interfaces());
1233     int num_interfaces = interfaces->length();
1234     for (int index = 0; index < num_interfaces; index++) {
1235       klassOop k = klassOop(interfaces->obj_at(index));
1236 
1237       // Note: can not use instanceKlass::cast here because
1238       // interfaces' instanceKlass's C++ vtbls haven't been
1239       // reinitialized yet (they will be once the interface classes
1240       // are loaded)
1241       Symbol*  name  = k->klass_part()->name();
1242       klassOop i = resolve_super_or_fail(class_name, name, class_loader, Handle(), false, CHECK_(nh));
1243       if (k->klass_part() != i->klass_part()) {
1244         // The dynamically resolved interface class is not the same as the one we used during dump time,
1245         // so we cannot use i.
1246         return nh;
1247       }
1248     }
1249 
1250     // Adjust methods to recover missing data.  They need addresses for
1251     // interpreter entry points and their default native method address
1252     // must be reset.
1253 
1254     // Updating methods must be done under a lock so multiple
1255     // threads don't update these in parallel
1256     // Shared classes are all currently loaded by the bootstrap
1257     // classloader, so this will never cause a deadlock on
1258     // a custom class loader lock.
1259 
1260     {
1261       Handle lockObject = compute_loader_lock_object(class_loader, THREAD);
1262       check_loader_lock_contention(lockObject, THREAD);
1263       ObjectLocker ol(lockObject, THREAD, true);
1264 
1265       objArrayHandle methods (THREAD, ik->methods());
1266       int num_methods = methods->length();
1267       for (int index2 = 0; index2 < num_methods; ++index2) {
1268         methodHandle m(THREAD, methodOop(methods->obj_at(index2)));
1269         m()->link_method(m, CHECK_(nh));
1270       }
1271       if (JvmtiExport::has_redefined_a_class()) {
1272         // Reinitialize vtable because RedefineClasses may have changed some
1273         // entries in this vtable for super classes so the CDS vtable might
1274         // point to old or obsolete entries.  RedefineClasses doesn't fix up
1275         // vtables in the shared system dictionary, only the main one.
1276         // It also redefines the itable too so fix that too.
1277         ResourceMark rm(THREAD);
1278         ik->vtable()->initialize_vtable(false, CHECK_(nh));
1279         ik->itable()->initialize_itable(false, CHECK_(nh));
1280       }
1281     }
1282 
1283     if (TraceClassLoading) {
1284       ResourceMark rm;
1285       tty->print("[Loaded %s", ik->external_name());
1286       tty->print(" from shared objects file");
1287       tty->print_cr("]");
1288     }
1289     // notify a class loaded from shared object
1290     ClassLoadingService::notify_class_loaded(instanceKlass::cast(ik()),
1291                                              true /* shared class */);
1292   }
1293   return ik;
1294 }
1295 
1296 #ifdef KERNEL
1297 // Some classes on the bootstrap class path haven't been installed on the
1298 // system yet.  Call the DownloadManager method to make them appear in the
1299 // bootstrap class path and try again to load the named class.
1300 // Note that with delegation class loaders all classes in another loader will
1301 // first try to call this so it'd better be fast!!
1302 static instanceKlassHandle download_and_retry_class_load(
1303                                                     Symbol* class_name,
1304                                                     TRAPS) {
1305 
1306   klassOop dlm = SystemDictionary::DownloadManager_klass();
1307   instanceKlassHandle nk;
1308 
1309   // If download manager class isn't loaded just return.
1310   if (dlm == NULL) return nk;
1311 
1312   { HandleMark hm(THREAD);
1313     ResourceMark rm(THREAD);
1314     Handle s = java_lang_String::create_from_symbol(class_name, CHECK_(nk));
1315     Handle class_string = java_lang_String::externalize_classname(s, CHECK_(nk));
1316 
1317     // return value
1318     JavaValue result(T_OBJECT);
1319 
1320     // Call the DownloadManager.  We assume that it has a lock because
1321     // multiple classes could be not found and downloaded at the same time.
1322     // class sun.misc.DownloadManager;
1323     // public static String getBootClassPathEntryForClass(String className);
1324     JavaCalls::call_static(&result,
1325                        KlassHandle(THREAD, dlm),
1326                        vmSymbols::getBootClassPathEntryForClass_name(),
1327                        vmSymbols::string_string_signature(),
1328                        class_string,
1329                        CHECK_(nk));
1330 
1331     // Get result.string and add to bootclasspath
1332     assert(result.get_type() == T_OBJECT, "just checking");
1333     oop obj = (oop) result.get_jobject();
1334     if (obj == NULL) { return nk; }
1335 
1336     Handle h_obj(THREAD, obj);
1337     char* new_class_name = java_lang_String::as_platform_dependent_str(h_obj,
1338                                                                   CHECK_(nk));
1339 
1340     // lock the loader
1341     // we use this lock because JVMTI does.
1342     Handle loader_lock(THREAD, SystemDictionary::system_loader_lock());
1343 
1344     ObjectLocker ol(loader_lock, THREAD);
1345     // add the file to the bootclasspath
1346     ClassLoader::update_class_path_entry_list(new_class_name, true);
1347   } // end HandleMark
1348 
1349   if (TraceClassLoading) {
1350     ClassLoader::print_bootclasspath();
1351   }
1352   return ClassLoader::load_classfile(class_name, CHECK_(nk));
1353 }
1354 #endif // KERNEL
1355 
1356 
1357 instanceKlassHandle SystemDictionary::load_instance_class(Symbol* class_name, Handle class_loader, TRAPS) {
1358   instanceKlassHandle nh = instanceKlassHandle(); // null Handle
1359   if (class_loader.is_null()) {
1360 
1361     // Search the shared system dictionary for classes preloaded into the
1362     // shared spaces.
1363     instanceKlassHandle k;
1364     {
1365       PerfTraceTime vmtimer(ClassLoader::perf_shared_classload_time());
1366       k = load_shared_class(class_name, class_loader, THREAD);
1367     }
1368 
1369     if (k.is_null()) {
1370       // Use VM class loader
1371       PerfTraceTime vmtimer(ClassLoader::perf_sys_classload_time());
1372       k = ClassLoader::load_classfile(class_name, CHECK_(nh));
1373     }
1374 
1375 #ifdef KERNEL
1376     // If the VM class loader has failed to load the class, call the
1377     // DownloadManager class to make it magically appear on the classpath
1378     // and try again.  This is only configured with the Kernel VM.
1379     if (k.is_null()) {
1380       k = download_and_retry_class_load(class_name, CHECK_(nh));
1381     }
1382 #endif // KERNEL
1383 
1384     // find_or_define_instance_class may return a different instanceKlass
1385     if (!k.is_null()) {
1386       k = find_or_define_instance_class(class_name, class_loader, k, CHECK_(nh));
1387     }
1388     return k;
1389   } else {
1390     // Use user specified class loader to load class. Call loadClass operation on class_loader.
1391     ResourceMark rm(THREAD);
1392 
1393     assert(THREAD->is_Java_thread(), "must be a JavaThread");
1394     JavaThread* jt = (JavaThread*) THREAD;
1395 
1396     PerfClassTraceTime vmtimer(ClassLoader::perf_app_classload_time(),
1397                                ClassLoader::perf_app_classload_selftime(),
1398                                ClassLoader::perf_app_classload_count(),
1399                                jt->get_thread_stat()->perf_recursion_counts_addr(),
1400                                jt->get_thread_stat()->perf_timers_addr(),
1401                                PerfClassTraceTime::CLASS_LOAD);
1402 
1403     Handle s = java_lang_String::create_from_symbol(class_name, CHECK_(nh));
1404     // Translate to external class name format, i.e., convert '/' chars to '.'
1405     Handle string = java_lang_String::externalize_classname(s, CHECK_(nh));
1406 
1407     JavaValue result(T_OBJECT);
1408 
1409     KlassHandle spec_klass (THREAD, SystemDictionary::ClassLoader_klass());
1410 
1411     // Call public unsynchronized loadClass(String) directly for all class loaders
1412     // for parallelCapable class loaders. JDK >=7, loadClass(String, boolean) will
1413     // acquire a class-name based lock rather than the class loader object lock.
1414     // JDK < 7 already acquire the class loader lock in loadClass(String, boolean),
1415     // so the call to loadClassInternal() was not required.
1416     //
1417     // UnsyncloadClass flag means both call loadClass(String) and do
1418     // not acquire the class loader lock even for class loaders that are
1419     // not parallelCapable. This was a risky transitional
1420     // flag for diagnostic purposes only. It is risky to call
1421     // custom class loaders without synchronization.
1422     // WARNING If a custom class loader does NOT synchronizer findClass, or callers of
1423     // findClass, the UnsyncloadClass flag risks unexpected timing bugs in the field.
1424     // Do NOT assume this will be supported in future releases.
1425     //
1426     // Added MustCallLoadClassInternal in case we discover in the field
1427     // a customer that counts on this call
1428     if (MustCallLoadClassInternal && has_loadClassInternal()) {
1429       JavaCalls::call_special(&result,
1430                               class_loader,
1431                               spec_klass,
1432                               vmSymbols::loadClassInternal_name(),
1433                               vmSymbols::string_class_signature(),
1434                               string,
1435                               CHECK_(nh));
1436     } else {
1437       JavaCalls::call_virtual(&result,
1438                               class_loader,
1439                               spec_klass,
1440                               vmSymbols::loadClass_name(),
1441                               vmSymbols::string_class_signature(),
1442                               string,
1443                               CHECK_(nh));
1444     }
1445 
1446     assert(result.get_type() == T_OBJECT, "just checking");
1447     oop obj = (oop) result.get_jobject();
1448 
1449     // Primitive classes return null since forName() can not be
1450     // used to obtain any of the Class objects representing primitives or void
1451     if ((obj != NULL) && !(java_lang_Class::is_primitive(obj))) {
1452       instanceKlassHandle k =
1453                 instanceKlassHandle(THREAD, java_lang_Class::as_klassOop(obj));
1454       // For user defined Java class loaders, check that the name returned is
1455       // the same as that requested.  This check is done for the bootstrap
1456       // loader when parsing the class file.
1457       if (class_name == k->name()) {
1458         return k;
1459       }
1460     }
1461     // Class is not found or has the wrong name, return NULL
1462     return nh;
1463   }
1464 }
1465 
1466 void SystemDictionary::define_instance_class(instanceKlassHandle k, TRAPS) {
1467 
1468   Handle class_loader_h(THREAD, k->class_loader());
1469 
1470  // for bootstrap and other parallel classloaders don't acquire lock,
1471  // use placeholder token
1472  // If a parallelCapable class loader calls define_instance_class instead of
1473  // find_or_define_instance_class to get here, we have a timing
1474  // hole with systemDictionary updates and check_constraints
1475  if (!class_loader_h.is_null() && !is_parallelCapable(class_loader_h)) {
1476     assert(ObjectSynchronizer::current_thread_holds_lock((JavaThread*)THREAD,
1477          compute_loader_lock_object(class_loader_h, THREAD)),
1478          "define called without lock");
1479   }
1480 
1481   // Check class-loading constraints. Throw exception if violation is detected.
1482   // Grabs and releases SystemDictionary_lock
1483   // The check_constraints/find_class call and update_dictionary sequence
1484   // must be "atomic" for a specific class/classloader pair so we never
1485   // define two different instanceKlasses for that class/classloader pair.
1486   // Existing classloaders will call define_instance_class with the
1487   // classloader lock held
1488   // Parallel classloaders will call find_or_define_instance_class
1489   // which will require a token to perform the define class
1490   Symbol*  name_h = k->name();
1491   unsigned int d_hash = dictionary()->compute_hash(name_h, class_loader_h);
1492   int d_index = dictionary()->hash_to_index(d_hash);
1493   check_constraints(d_index, d_hash, k, class_loader_h, true, CHECK);
1494 
1495   // Register class just loaded with class loader (placed in Vector)
1496   // Note we do this before updating the dictionary, as this can
1497   // fail with an OutOfMemoryError (if it does, we will *not* put this
1498   // class in the dictionary and will not update the class hierarchy).
1499   if (k->class_loader() != NULL) {
1500     methodHandle m(THREAD, Universe::loader_addClass_method());
1501     JavaValue result(T_VOID);
1502     JavaCallArguments args(class_loader_h);
1503     args.push_oop(Handle(THREAD, k->java_mirror()));
1504     JavaCalls::call(&result, m, &args, CHECK);
1505   }
1506 
1507   // Add the new class. We need recompile lock during update of CHA.
1508   {
1509     unsigned int p_hash = placeholders()->compute_hash(name_h, class_loader_h);
1510     int p_index = placeholders()->hash_to_index(p_hash);
1511 
1512     MutexLocker mu_r(Compile_lock, THREAD);
1513 
1514     // Add to class hierarchy, initialize vtables, and do possible
1515     // deoptimizations.
1516     add_to_hierarchy(k, CHECK); // No exception, but can block
1517 
1518     // Add to systemDictionary - so other classes can see it.
1519     // Grabs and releases SystemDictionary_lock
1520     update_dictionary(d_index, d_hash, p_index, p_hash,
1521                       k, class_loader_h, THREAD);
1522   }
1523   k->eager_initialize(THREAD);
1524 
1525   // notify jvmti
1526   if (JvmtiExport::should_post_class_load()) {
1527       assert(THREAD->is_Java_thread(), "thread->is_Java_thread()");
1528       JvmtiExport::post_class_load((JavaThread *) THREAD, k());
1529 
1530   }
1531 }
1532 
1533 // Support parallel classloading
1534 // All parallel class loaders, including bootstrap classloader
1535 // lock a placeholder entry for this class/class_loader pair
1536 // to allow parallel defines of different classes for this class loader
1537 // With AllowParallelDefine flag==true, in case they do not synchronize around
1538 // FindLoadedClass/DefineClass, calls, we check for parallel
1539 // loading for them, wait if a defineClass is in progress
1540 // and return the initial requestor's results
1541 // This flag does not apply to the bootstrap classloader.
1542 // With AllowParallelDefine flag==false, call through to define_instance_class
1543 // which will throw LinkageError: duplicate class definition.
1544 // False is the requested default.
1545 // For better performance, the class loaders should synchronize
1546 // findClass(), i.e. FindLoadedClass/DefineClassIfAbsent or they
1547 // potentially waste time reading and parsing the bytestream.
1548 // Note: VM callers should ensure consistency of k/class_name,class_loader
1549 instanceKlassHandle SystemDictionary::find_or_define_instance_class(Symbol* class_name, Handle class_loader, instanceKlassHandle k, TRAPS) {
1550 
1551   instanceKlassHandle nh = instanceKlassHandle(); // null Handle
1552   Symbol*  name_h = k->name(); // passed in class_name may be null
1553 
1554   unsigned int d_hash = dictionary()->compute_hash(name_h, class_loader);
1555   int d_index = dictionary()->hash_to_index(d_hash);
1556 
1557 // Hold SD lock around find_class and placeholder creation for DEFINE_CLASS
1558   unsigned int p_hash = placeholders()->compute_hash(name_h, class_loader);
1559   int p_index = placeholders()->hash_to_index(p_hash);
1560   PlaceholderEntry* probe;
1561 
1562   {
1563     MutexLocker mu(SystemDictionary_lock, THREAD);
1564     // First check if class already defined
1565     if (UnsyncloadClass || (is_parallelDefine(class_loader))) {
1566       klassOop check = find_class(d_index, d_hash, name_h, class_loader);
1567       if (check != NULL) {
1568         return(instanceKlassHandle(THREAD, check));
1569       }
1570     }
1571 
1572     // Acquire define token for this class/classloader
1573     probe = placeholders()->find_and_add(p_index, p_hash, name_h, class_loader, PlaceholderTable::DEFINE_CLASS, NULL, THREAD);
1574     // Wait if another thread defining in parallel
1575     // All threads wait - even those that will throw duplicate class: otherwise
1576     // caller is surprised by LinkageError: duplicate, but findLoadedClass fails
1577     // if other thread has not finished updating dictionary
1578     while (probe->definer() != NULL) {
1579       SystemDictionary_lock->wait();
1580     }
1581     // Only special cases allow parallel defines and can use other thread's results
1582     // Other cases fall through, and may run into duplicate defines
1583     // caught by finding an entry in the SystemDictionary
1584     if ((UnsyncloadClass || is_parallelDefine(class_loader)) && (probe->instanceKlass() != NULL)) {
1585         probe->remove_seen_thread(THREAD, PlaceholderTable::DEFINE_CLASS);
1586         placeholders()->find_and_remove(p_index, p_hash, name_h, class_loader, THREAD);
1587         SystemDictionary_lock->notify_all();
1588 #ifdef ASSERT
1589         klassOop check = find_class(d_index, d_hash, name_h, class_loader);
1590         assert(check != NULL, "definer missed recording success");
1591 #endif
1592         return(instanceKlassHandle(THREAD, probe->instanceKlass()));
1593     } else {
1594       // This thread will define the class (even if earlier thread tried and had an error)
1595       probe->set_definer(THREAD);
1596     }
1597   }
1598 
1599   define_instance_class(k, THREAD);
1600 
1601   Handle linkage_exception = Handle(); // null handle
1602 
1603   // definer must notify any waiting threads
1604   {
1605     MutexLocker mu(SystemDictionary_lock, THREAD);
1606     PlaceholderEntry* probe = placeholders()->get_entry(p_index, p_hash, name_h, class_loader);
1607     assert(probe != NULL, "DEFINE_CLASS placeholder lost?");
1608     if (probe != NULL) {
1609       if (HAS_PENDING_EXCEPTION) {
1610         linkage_exception = Handle(THREAD,PENDING_EXCEPTION);
1611         CLEAR_PENDING_EXCEPTION;
1612       } else {
1613         probe->set_instanceKlass(k());
1614       }
1615       probe->set_definer(NULL);
1616       probe->remove_seen_thread(THREAD, PlaceholderTable::DEFINE_CLASS);
1617       placeholders()->find_and_remove(p_index, p_hash, name_h, class_loader, THREAD);
1618       SystemDictionary_lock->notify_all();
1619     }
1620   }
1621 
1622   // Can't throw exception while holding lock due to rank ordering
1623   if (linkage_exception() != NULL) {
1624     THROW_OOP_(linkage_exception(), nh); // throws exception and returns
1625   }
1626 
1627   return k;
1628 }
1629 Handle SystemDictionary::compute_loader_lock_object(Handle class_loader, TRAPS) {
1630   // If class_loader is NULL we synchronize on _system_loader_lock_obj
1631   if (class_loader.is_null()) {
1632     return Handle(THREAD, _system_loader_lock_obj);
1633   } else {
1634     return class_loader;
1635   }
1636 }
1637 
1638 // This method is added to check how often we have to wait to grab loader
1639 // lock. The results are being recorded in the performance counters defined in
1640 // ClassLoader::_sync_systemLoaderLockContentionRate and
1641 // ClassLoader::_sync_nonSystemLoaderLockConteionRate.
1642 void SystemDictionary::check_loader_lock_contention(Handle loader_lock, TRAPS) {
1643   if (!UsePerfData) {
1644     return;
1645   }
1646 
1647   assert(!loader_lock.is_null(), "NULL lock object");
1648 
1649   if (ObjectSynchronizer::query_lock_ownership((JavaThread*)THREAD, loader_lock)
1650       == ObjectSynchronizer::owner_other) {
1651     // contention will likely happen, so increment the corresponding
1652     // contention counter.
1653     if (loader_lock() == _system_loader_lock_obj) {
1654       ClassLoader::sync_systemLoaderLockContentionRate()->inc();
1655     } else {
1656       ClassLoader::sync_nonSystemLoaderLockContentionRate()->inc();
1657     }
1658   }
1659 }
1660 
1661 // ----------------------------------------------------------------------------
1662 // Lookup
1663 
1664 klassOop SystemDictionary::find_class(int index, unsigned int hash,
1665                                       Symbol* class_name,
1666                                       Handle class_loader) {
1667   assert_locked_or_safepoint(SystemDictionary_lock);
1668   assert (index == dictionary()->index_for(class_name, class_loader),
1669           "incorrect index?");
1670 
1671   klassOop k = dictionary()->find_class(index, hash, class_name, class_loader);
1672   return k;
1673 }
1674 
1675 
1676 // Basic find on classes in the midst of being loaded
1677 Symbol* SystemDictionary::find_placeholder(Symbol* class_name,
1678                                            Handle class_loader) {
1679   assert_locked_or_safepoint(SystemDictionary_lock);
1680   unsigned int p_hash = placeholders()->compute_hash(class_name, class_loader);
1681   int p_index = placeholders()->hash_to_index(p_hash);
1682   return placeholders()->find_entry(p_index, p_hash, class_name, class_loader);
1683 }
1684 
1685 
1686 // Used for assertions and verification only
1687 klassOop SystemDictionary::find_class(Symbol* class_name, Handle class_loader) {
1688   #ifndef ASSERT
1689   guarantee(VerifyBeforeGC   ||
1690             VerifyDuringGC   ||
1691             VerifyBeforeExit ||
1692             VerifyAfterGC, "too expensive");
1693   #endif
1694   assert_locked_or_safepoint(SystemDictionary_lock);
1695 
1696   // First look in the loaded class array
1697   unsigned int d_hash = dictionary()->compute_hash(class_name, class_loader);
1698   int d_index = dictionary()->hash_to_index(d_hash);
1699   return find_class(d_index, d_hash, class_name, class_loader);
1700 }
1701 
1702 
1703 // Get the next class in the diictionary.
1704 klassOop SystemDictionary::try_get_next_class() {
1705   return dictionary()->try_get_next_class();
1706 }
1707 
1708 
1709 // ----------------------------------------------------------------------------
1710 // Update hierachy. This is done before the new klass has been added to the SystemDictionary. The Recompile_lock
1711 // is held, to ensure that the compiler is not using the class hierachy, and that deoptimization will kick in
1712 // before a new class is used.
1713 
1714 void SystemDictionary::add_to_hierarchy(instanceKlassHandle k, TRAPS) {
1715   assert(k.not_null(), "just checking");
1716   assert_locked_or_safepoint(Compile_lock);
1717 
1718   // Link into hierachy. Make sure the vtables are initialized before linking into
1719   k->append_to_sibling_list();                    // add to superklass/sibling list
1720   k->process_interfaces(THREAD);                  // handle all "implements" declarations
1721   k->set_init_state(instanceKlass::loaded);
1722   // Now flush all code that depended on old class hierarchy.
1723   // Note: must be done *after* linking k into the hierarchy (was bug 12/9/97)
1724   // Also, first reinitialize vtable because it may have gotten out of synch
1725   // while the new class wasn't connected to the class hierarchy.
1726   Universe::flush_dependents_on(k);
1727 }
1728 
1729 
1730 // ----------------------------------------------------------------------------
1731 // GC support
1732 
1733 // Following roots during mark-sweep is separated in two phases.
1734 //
1735 // The first phase follows preloaded classes and all other system
1736 // classes, since these will never get unloaded anyway.
1737 //
1738 // The second phase removes (unloads) unreachable classes from the
1739 // system dictionary and follows the remaining classes' contents.
1740 
1741 void SystemDictionary::always_strong_oops_do(OopClosure* blk) {
1742   // Follow preloaded classes/mirrors and system loader object
1743   blk->do_oop(&_java_system_loader);
1744   preloaded_oops_do(blk);
1745   always_strong_classes_do(blk);
1746 }
1747 
1748 
1749 void SystemDictionary::always_strong_classes_do(OopClosure* blk) {
1750   // Follow all system classes and temporary placeholders in dictionary
1751   dictionary()->always_strong_classes_do(blk);
1752 
1753   // Placeholders. These are *always* strong roots, as they
1754   // represent classes we're actively loading.
1755   placeholders_do(blk);
1756 
1757   // Visit extra methods
1758   invoke_method_table()->oops_do(blk);
1759 }
1760 
1761 
1762 void SystemDictionary::placeholders_do(OopClosure* blk) {
1763   placeholders()->oops_do(blk);
1764 }
1765 
1766 // Calculate a "good" systemdictionary size based
1767 // on predicted or current loaded classes count
1768 int SystemDictionary::calculate_systemdictionary_size(int classcount) {
1769   int newsize = _old_default_sdsize;
1770   if ((classcount > 0)  && !DumpSharedSpaces) {
1771     int desiredsize = classcount/_average_depth_goal;
1772     for (newsize = _primelist[_sdgeneration]; _sdgeneration < _prime_array_size -1;
1773          newsize = _primelist[++_sdgeneration]) {
1774       if (desiredsize <=  newsize) {
1775         break;
1776       }
1777     }
1778   }
1779   return newsize;
1780 }
1781 bool SystemDictionary::do_unloading(BoolObjectClosure* is_alive) {
1782   bool result = dictionary()->do_unloading(is_alive);
1783   constraints()->purge_loader_constraints(is_alive);
1784   resolution_errors()->purge_resolution_errors(is_alive);
1785   return result;
1786 }
1787 
1788 
1789 // The mirrors are scanned by shared_oops_do() which is
1790 // not called by oops_do().  In order to process oops in
1791 // a necessary order, shared_oops_do() is call by
1792 // Universe::oops_do().
1793 void SystemDictionary::oops_do(OopClosure* f) {
1794   // Adjust preloaded classes and system loader object
1795   f->do_oop(&_java_system_loader);
1796   preloaded_oops_do(f);
1797 
1798   lazily_loaded_oops_do(f);
1799 
1800   // Adjust dictionary
1801   dictionary()->oops_do(f);
1802 
1803   // Visit extra methods
1804   invoke_method_table()->oops_do(f);
1805 
1806   // Partially loaded classes
1807   placeholders()->oops_do(f);
1808 
1809   // Adjust constraint table
1810   constraints()->oops_do(f);
1811 
1812   // Adjust resolution error table
1813   resolution_errors()->oops_do(f);
1814 }
1815 
1816 
1817 void SystemDictionary::preloaded_oops_do(OopClosure* f) {
1818   for (int k = (int)FIRST_WKID; k < (int)WKID_LIMIT; k++) {
1819     f->do_oop((oop*) &_well_known_klasses[k]);
1820   }
1821 
1822   {
1823     for (int i = 0; i < T_VOID+1; i++) {
1824       if (_box_klasses[i] != NULL) {
1825         assert(i >= T_BOOLEAN, "checking");
1826         f->do_oop((oop*) &_box_klasses[i]);
1827       }
1828     }
1829   }
1830 
1831   // The basic type mirrors would have already been processed in
1832   // Universe::oops_do(), via a call to shared_oops_do(), so should
1833   // not be processed again.
1834 
1835   f->do_oop((oop*) &_system_loader_lock_obj);
1836   FilteredFieldsMap::klasses_oops_do(f);
1837 }
1838 
1839 void SystemDictionary::lazily_loaded_oops_do(OopClosure* f) {
1840   f->do_oop((oop*) &_abstract_ownable_synchronizer_klass);
1841 }
1842 
1843 // Just the classes from defining class loaders
1844 // Don't iterate over placeholders
1845 void SystemDictionary::classes_do(void f(klassOop)) {
1846   dictionary()->classes_do(f);
1847 }
1848 
1849 // Added for initialize_itable_for_klass
1850 //   Just the classes from defining class loaders
1851 // Don't iterate over placeholders
1852 void SystemDictionary::classes_do(void f(klassOop, TRAPS), TRAPS) {
1853   dictionary()->classes_do(f, CHECK);
1854 }
1855 
1856 //   All classes, and their class loaders
1857 // Don't iterate over placeholders
1858 void SystemDictionary::classes_do(void f(klassOop, oop)) {
1859   dictionary()->classes_do(f);
1860 }
1861 
1862 //   All classes, and their class loaders
1863 //   (added for helpers that use HandleMarks and ResourceMarks)
1864 // Don't iterate over placeholders
1865 void SystemDictionary::classes_do(void f(klassOop, oop, TRAPS), TRAPS) {
1866   dictionary()->classes_do(f, CHECK);
1867 }
1868 
1869 void SystemDictionary::placeholders_do(void f(Symbol*, oop)) {
1870   placeholders()->entries_do(f);
1871 }
1872 
1873 void SystemDictionary::methods_do(void f(methodOop)) {
1874   dictionary()->methods_do(f);
1875   invoke_method_table()->methods_do(f);
1876 }
1877 
1878 // ----------------------------------------------------------------------------
1879 // Lazily load klasses
1880 
1881 void SystemDictionary::load_abstract_ownable_synchronizer_klass(TRAPS) {
1882   assert(JDK_Version::is_gte_jdk16x_version(), "Must be JDK 1.6 or later");
1883 
1884   // if multiple threads calling this function, only one thread will load
1885   // the class.  The other threads will find the loaded version once the
1886   // class is loaded.
1887   klassOop aos = _abstract_ownable_synchronizer_klass;
1888   if (aos == NULL) {
1889     klassOop k = resolve_or_fail(vmSymbols::java_util_concurrent_locks_AbstractOwnableSynchronizer(), true, CHECK);
1890     // Force a fence to prevent any read before the write completes
1891     OrderAccess::fence();
1892     _abstract_ownable_synchronizer_klass = k;
1893   }
1894 }
1895 
1896 // ----------------------------------------------------------------------------
1897 // Initialization
1898 
1899 void SystemDictionary::initialize(TRAPS) {
1900   // Allocate arrays
1901   assert(dictionary() == NULL,
1902          "SystemDictionary should only be initialized once");
1903   _sdgeneration        = 0;
1904   _dictionary          = new Dictionary(calculate_systemdictionary_size(PredictedLoadedClassCount));
1905   _placeholders        = new PlaceholderTable(_nof_buckets);
1906   _number_of_modifications = 0;
1907   _loader_constraints  = new LoaderConstraintTable(_loader_constraint_size);
1908   _resolution_errors   = new ResolutionErrorTable(_resolution_error_size);
1909   _invoke_method_table = new SymbolPropertyTable(_invoke_method_size);
1910 
1911   // Allocate private object used as system class loader lock
1912   _system_loader_lock_obj = oopFactory::new_system_objArray(0, CHECK);
1913   // Initialize basic classes
1914   initialize_preloaded_classes(CHECK);
1915 }
1916 
1917 // Compact table of directions on the initialization of klasses:
1918 static const short wk_init_info[] = {
1919   #define WK_KLASS_INIT_INFO(name, symbol, option) \
1920     ( ((int)vmSymbols::VM_SYMBOL_ENUM_NAME(symbol) \
1921           << SystemDictionary::CEIL_LG_OPTION_LIMIT) \
1922       | (int)SystemDictionary::option ),
1923   WK_KLASSES_DO(WK_KLASS_INIT_INFO)
1924   #undef WK_KLASS_INIT_INFO
1925   0
1926 };
1927 
1928 bool SystemDictionary::initialize_wk_klass(WKID id, int init_opt, TRAPS) {
1929   assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob");
1930   int  info = wk_init_info[id - FIRST_WKID];
1931   int  sid  = (info >> CEIL_LG_OPTION_LIMIT);
1932   Symbol* symbol = vmSymbols::symbol_at((vmSymbols::SID)sid);
1933   klassOop*    klassp = &_well_known_klasses[id];
1934   bool must_load = (init_opt < SystemDictionary::Opt);
1935   bool try_load  = true;
1936   if (init_opt == SystemDictionary::Opt_Kernel) {
1937 #ifndef KERNEL
1938     try_load = false;
1939 #endif //KERNEL
1940   }
1941   if ((*klassp) == NULL && try_load) {
1942     if (must_load) {
1943       (*klassp) = resolve_or_fail(symbol, true, CHECK_0); // load required class
1944     } else {
1945       (*klassp) = resolve_or_null(symbol,       CHECK_0); // load optional klass
1946     }
1947   }
1948   return ((*klassp) != NULL);
1949 }
1950 
1951 void SystemDictionary::initialize_wk_klasses_until(WKID limit_id, WKID &start_id, TRAPS) {
1952   assert((int)start_id <= (int)limit_id, "IDs are out of order!");
1953   for (int id = (int)start_id; id < (int)limit_id; id++) {
1954     assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob");
1955     int info = wk_init_info[id - FIRST_WKID];
1956     int sid  = (info >> CEIL_LG_OPTION_LIMIT);
1957     int opt  = (info & right_n_bits(CEIL_LG_OPTION_LIMIT));
1958 
1959     initialize_wk_klass((WKID)id, opt, CHECK);
1960 
1961     // Update limits, so find_well_known_klass can be very fast:
1962     Symbol* s = vmSymbols::symbol_at((vmSymbols::SID)sid);
1963     if (wk_klass_name_limits[1] == NULL) {
1964       wk_klass_name_limits[0] = wk_klass_name_limits[1] = s;
1965     } else if (wk_klass_name_limits[1] < s) {
1966       wk_klass_name_limits[1] = s;
1967     } else if (wk_klass_name_limits[0] > s) {
1968       wk_klass_name_limits[0] = s;
1969     }
1970   }
1971 
1972   // move the starting value forward to the limit:
1973   start_id = limit_id;
1974 }
1975 
1976 
1977 void SystemDictionary::initialize_preloaded_classes(TRAPS) {
1978   assert(WK_KLASS(Object_klass) == NULL, "preloaded classes should only be initialized once");
1979   // Preload commonly used klasses
1980   WKID scan = FIRST_WKID;
1981   // first do Object, String, Class
1982   initialize_wk_klasses_through(WK_KLASS_ENUM_NAME(Class_klass), scan, CHECK);
1983 
1984   // Calculate offsets for String and Class classes since they are loaded and
1985   // can be used after this point.
1986   java_lang_String::compute_offsets();
1987   java_lang_Class::compute_offsets();
1988 
1989   // Fixup mirrors for classes loaded before java.lang.Class.
1990   // These calls iterate over the objects currently in the perm gen
1991   // so calling them at this point is matters (not before when there
1992   // are fewer objects and not later after there are more objects
1993   // in the perm gen.
1994   Universe::initialize_basic_type_mirrors(CHECK);
1995   Universe::fixup_mirrors(CHECK);
1996 
1997   // do a bunch more:
1998   initialize_wk_klasses_through(WK_KLASS_ENUM_NAME(Reference_klass), scan, CHECK);
1999 
2000   // Preload ref klasses and set reference types
2001   instanceKlass::cast(WK_KLASS(Reference_klass))->set_reference_type(REF_OTHER);
2002   instanceRefKlass::update_nonstatic_oop_maps(WK_KLASS(Reference_klass));
2003 
2004   initialize_wk_klasses_through(WK_KLASS_ENUM_NAME(Cleaner_klass), scan, CHECK);
2005   instanceKlass::cast(WK_KLASS(SoftReference_klass))->set_reference_type(REF_SOFT);
2006   instanceKlass::cast(WK_KLASS(WeakReference_klass))->set_reference_type(REF_WEAK);
2007   instanceKlass::cast(WK_KLASS(FinalReference_klass))->set_reference_type(REF_FINAL);
2008   instanceKlass::cast(WK_KLASS(PhantomReference_klass))->set_reference_type(REF_PHANTOM);
2009   instanceKlass::cast(WK_KLASS(Cleaner_klass))->set_reference_type(REF_CLEANER);
2010 
2011   // JSR 292 classes
2012   WKID jsr292_group_start = WK_KLASS_ENUM_NAME(MethodHandle_klass);
2013   WKID jsr292_group_end   = WK_KLASS_ENUM_NAME(VolatileCallSite_klass);
2014   initialize_wk_klasses_until(jsr292_group_start, scan, CHECK);
2015   if (EnableInvokeDynamic) {
2016     initialize_wk_klasses_through(jsr292_group_end, scan, CHECK);
2017   } else {
2018     // Skip the JSR 292 classes, if not enabled.
2019     scan = WKID(jsr292_group_end + 1);
2020   }
2021 
2022   initialize_wk_klasses_until(WKID_LIMIT, scan, CHECK);
2023 
2024   _box_klasses[T_BOOLEAN] = WK_KLASS(Boolean_klass);
2025   _box_klasses[T_CHAR]    = WK_KLASS(Character_klass);
2026   _box_klasses[T_FLOAT]   = WK_KLASS(Float_klass);
2027   _box_klasses[T_DOUBLE]  = WK_KLASS(Double_klass);
2028   _box_klasses[T_BYTE]    = WK_KLASS(Byte_klass);
2029   _box_klasses[T_SHORT]   = WK_KLASS(Short_klass);
2030   _box_klasses[T_INT]     = WK_KLASS(Integer_klass);
2031   _box_klasses[T_LONG]    = WK_KLASS(Long_klass);
2032   //_box_klasses[T_OBJECT]  = WK_KLASS(object_klass);
2033   //_box_klasses[T_ARRAY]   = WK_KLASS(object_klass);
2034 
2035 #ifdef KERNEL
2036   if (DownloadManager_klass() == NULL) {
2037     warning("Cannot find sun/jkernel/DownloadManager");
2038   }
2039 #endif // KERNEL
2040 
2041   { // Compute whether we should use loadClass or loadClassInternal when loading classes.
2042     methodOop method = instanceKlass::cast(ClassLoader_klass())->find_method(vmSymbols::loadClassInternal_name(), vmSymbols::string_class_signature());
2043     _has_loadClassInternal = (method != NULL);
2044   }
2045   { // Compute whether we should use checkPackageAccess or NOT
2046     methodOop method = instanceKlass::cast(ClassLoader_klass())->find_method(vmSymbols::checkPackageAccess_name(), vmSymbols::class_protectiondomain_signature());
2047     _has_checkPackageAccess = (method != NULL);
2048   }
2049 }
2050 
2051 // Tells if a given klass is a box (wrapper class, such as java.lang.Integer).
2052 // If so, returns the basic type it holds.  If not, returns T_OBJECT.
2053 BasicType SystemDictionary::box_klass_type(klassOop k) {
2054   assert(k != NULL, "");
2055   for (int i = T_BOOLEAN; i < T_VOID+1; i++) {
2056     if (_box_klasses[i] == k)
2057       return (BasicType)i;
2058   }
2059   return T_OBJECT;
2060 }
2061 
2062 KlassHandle SystemDictionaryHandles::box_klass(BasicType t) {
2063   if (t >= T_BOOLEAN && t <= T_VOID)
2064     return KlassHandle(&SystemDictionary::_box_klasses[t], true);
2065   else
2066     return KlassHandle();
2067 }
2068 
2069 // Constraints on class loaders. The details of the algorithm can be
2070 // found in the OOPSLA'98 paper "Dynamic Class Loading in the Java
2071 // Virtual Machine" by Sheng Liang and Gilad Bracha.  The basic idea is
2072 // that the system dictionary needs to maintain a set of contraints that
2073 // must be satisfied by all classes in the dictionary.
2074 // if defining is true, then LinkageError if already in systemDictionary
2075 // if initiating loader, then ok if instanceKlass matches existing entry
2076 
2077 void SystemDictionary::check_constraints(int d_index, unsigned int d_hash,
2078                                          instanceKlassHandle k,
2079                                          Handle class_loader, bool defining,
2080                                          TRAPS) {
2081   const char *linkage_error = NULL;
2082   {
2083     Symbol*  name  = k->name();
2084     MutexLocker mu(SystemDictionary_lock, THREAD);
2085 
2086     klassOop check = find_class(d_index, d_hash, name, class_loader);
2087     if (check != (klassOop)NULL) {
2088       // if different instanceKlass - duplicate class definition,
2089       // else - ok, class loaded by a different thread in parallel,
2090       // we should only have found it if it was done loading and ok to use
2091       // system dictionary only holds instance classes, placeholders
2092       // also holds array classes
2093 
2094       assert(check->klass_part()->oop_is_instance(), "noninstance in systemdictionary");
2095       if ((defining == true) || (k() != check)) {
2096         linkage_error = "loader (instance of  %s): attempted  duplicate class "
2097           "definition for name: \"%s\"";
2098       } else {
2099         return;
2100       }
2101     }
2102 
2103 #ifdef ASSERT
2104     Symbol* ph_check = find_placeholder(name, class_loader);
2105     assert(ph_check == NULL || ph_check == name, "invalid symbol");
2106 #endif
2107 
2108     if (linkage_error == NULL) {
2109       if (constraints()->check_or_update(k, class_loader, name) == false) {
2110         linkage_error = "loader constraint violation: loader (instance of %s)"
2111           " previously initiated loading for a different type with name \"%s\"";
2112       }
2113     }
2114   }
2115 
2116   // Throw error now if needed (cannot throw while holding
2117   // SystemDictionary_lock because of rank ordering)
2118 
2119   if (linkage_error) {
2120     ResourceMark rm(THREAD);
2121     const char* class_loader_name = loader_name(class_loader());
2122     char* type_name = k->name()->as_C_string();
2123     size_t buflen = strlen(linkage_error) + strlen(class_loader_name) +
2124       strlen(type_name);
2125     char* buf = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, buflen);
2126     jio_snprintf(buf, buflen, linkage_error, class_loader_name, type_name);
2127     THROW_MSG(vmSymbols::java_lang_LinkageError(), buf);
2128   }
2129 }
2130 
2131 
2132 // Update system dictionary - done after check_constraint and add_to_hierachy
2133 // have been called.
2134 void SystemDictionary::update_dictionary(int d_index, unsigned int d_hash,
2135                                          int p_index, unsigned int p_hash,
2136                                          instanceKlassHandle k,
2137                                          Handle class_loader,
2138                                          TRAPS) {
2139   // Compile_lock prevents systemDictionary updates during compilations
2140   assert_locked_or_safepoint(Compile_lock);
2141   Symbol*  name  = k->name();
2142 
2143   {
2144   MutexLocker mu1(SystemDictionary_lock, THREAD);
2145 
2146   // See whether biased locking is enabled and if so set it for this
2147   // klass.
2148   // Note that this must be done past the last potential blocking
2149   // point / safepoint. We enable biased locking lazily using a
2150   // VM_Operation to iterate the SystemDictionary and installing the
2151   // biasable mark word into each instanceKlass's prototype header.
2152   // To avoid race conditions where we accidentally miss enabling the
2153   // optimization for one class in the process of being added to the
2154   // dictionary, we must not safepoint after the test of
2155   // BiasedLocking::enabled().
2156   if (UseBiasedLocking && BiasedLocking::enabled()) {
2157     // Set biased locking bit for all loaded classes; it will be
2158     // cleared if revocation occurs too often for this type
2159     // NOTE that we must only do this when the class is initally
2160     // defined, not each time it is referenced from a new class loader
2161     if (k->class_loader() == class_loader()) {
2162       k->set_prototype_header(markOopDesc::biased_locking_prototype());
2163     }
2164   }
2165 
2166   // Assign a classid if one has not already been assigned.  The
2167   // counter does not need to be atomically incremented since this
2168   // is only done while holding the SystemDictionary_lock.
2169   // All loaded classes get a unique ID.
2170   TRACE_INIT_ID(k);
2171 
2172   // Check for a placeholder. If there, remove it and make a
2173   // new system dictionary entry.
2174   placeholders()->find_and_remove(p_index, p_hash, name, class_loader, THREAD);
2175   klassOop sd_check = find_class(d_index, d_hash, name, class_loader);
2176   if (sd_check == NULL) {
2177     dictionary()->add_klass(name, class_loader, k);
2178     notice_modification();
2179   }
2180 #ifdef ASSERT
2181   sd_check = find_class(d_index, d_hash, name, class_loader);
2182   assert (sd_check != NULL, "should have entry in system dictionary");
2183 // Changed to allow PH to remain to complete class circularity checking
2184 // while only one thread can define a class at one time, multiple
2185 // classes can resolve the superclass for a class at one time,
2186 // and the placeholder is used to track that
2187 //  Symbol* ph_check = find_placeholder(name, class_loader);
2188 //  assert (ph_check == NULL, "should not have a placeholder entry");
2189 #endif
2190     SystemDictionary_lock->notify_all();
2191   }
2192 }
2193 
2194 
2195 // Try to find a class name using the loader constraints.  The
2196 // loader constraints might know about a class that isn't fully loaded
2197 // yet and these will be ignored.
2198 klassOop SystemDictionary::find_constrained_instance_or_array_klass(
2199                     Symbol* class_name, Handle class_loader, TRAPS) {
2200 
2201   // First see if it has been loaded directly.
2202   // Force the protection domain to be null.  (This removes protection checks.)
2203   Handle no_protection_domain;
2204   klassOop klass = find_instance_or_array_klass(class_name, class_loader,
2205                                                 no_protection_domain, CHECK_NULL);
2206   if (klass != NULL)
2207     return klass;
2208 
2209   // Now look to see if it has been loaded elsewhere, and is subject to
2210   // a loader constraint that would require this loader to return the
2211   // klass that is already loaded.
2212   if (FieldType::is_array(class_name)) {
2213     // For array classes, their klassOops are not kept in the
2214     // constraint table. The element klassOops are.
2215     FieldArrayInfo fd;
2216     BasicType t = FieldType::get_array_info(class_name, fd, CHECK_(NULL));
2217     if (t != T_OBJECT) {
2218       klass = Universe::typeArrayKlassObj(t);
2219     } else {
2220       MutexLocker mu(SystemDictionary_lock, THREAD);
2221       klass = constraints()->find_constrained_klass(fd.object_key(), class_loader);
2222     }
2223     // If element class already loaded, allocate array klass
2224     if (klass != NULL) {
2225       klass = Klass::cast(klass)->array_klass_or_null(fd.dimension());
2226     }
2227   } else {
2228     MutexLocker mu(SystemDictionary_lock, THREAD);
2229     // Non-array classes are easy: simply check the constraint table.
2230     klass = constraints()->find_constrained_klass(class_name, class_loader);
2231   }
2232 
2233   return klass;
2234 }
2235 
2236 
2237 bool SystemDictionary::add_loader_constraint(Symbol* class_name,
2238                                              Handle class_loader1,
2239                                              Handle class_loader2,
2240                                              Thread* THREAD) {
2241   Symbol* constraint_name = NULL;
2242   if (!FieldType::is_array(class_name)) {
2243     constraint_name = class_name;
2244   } else {
2245     // For array classes, their klassOops are not kept in the
2246     // constraint table. The element classes are.
2247     FieldArrayInfo fd;
2248     BasicType t = FieldType::get_array_info(class_name, fd, CHECK_(false));
2249     // primitive types always pass
2250     if (t != T_OBJECT) {
2251       return true;
2252     } else {
2253       constraint_name = fd.object_key();
2254     }
2255   }
2256   unsigned int d_hash1 = dictionary()->compute_hash(constraint_name, class_loader1);
2257   int d_index1 = dictionary()->hash_to_index(d_hash1);
2258 
2259   unsigned int d_hash2 = dictionary()->compute_hash(constraint_name, class_loader2);
2260   int d_index2 = dictionary()->hash_to_index(d_hash2);
2261   {
2262     MutexLocker mu_s(SystemDictionary_lock, THREAD);
2263 
2264     // Better never do a GC while we're holding these oops
2265     No_Safepoint_Verifier nosafepoint;
2266 
2267     klassOop klass1 = find_class(d_index1, d_hash1, constraint_name, class_loader1);
2268     klassOop klass2 = find_class(d_index2, d_hash2, constraint_name, class_loader2);
2269     return constraints()->add_entry(constraint_name, klass1, class_loader1,
2270                                     klass2, class_loader2);
2271   }
2272 }
2273 
2274 // Add entry to resolution error table to record the error when the first
2275 // attempt to resolve a reference to a class has failed.
2276 void SystemDictionary::add_resolution_error(constantPoolHandle pool, int which, Symbol* error) {
2277   unsigned int hash = resolution_errors()->compute_hash(pool, which);
2278   int index = resolution_errors()->hash_to_index(hash);
2279   {
2280     MutexLocker ml(SystemDictionary_lock, Thread::current());
2281     resolution_errors()->add_entry(index, hash, pool, which, error);
2282   }
2283 }
2284 
2285 // Lookup resolution error table. Returns error if found, otherwise NULL.
2286 Symbol* SystemDictionary::find_resolution_error(constantPoolHandle pool, int which) {
2287   unsigned int hash = resolution_errors()->compute_hash(pool, which);
2288   int index = resolution_errors()->hash_to_index(hash);
2289   {
2290     MutexLocker ml(SystemDictionary_lock, Thread::current());
2291     ResolutionErrorEntry* entry = resolution_errors()->find_entry(index, hash, pool, which);
2292     return (entry != NULL) ? entry->error() : (Symbol*)NULL;
2293   }
2294 }
2295 
2296 
2297 // Signature constraints ensure that callers and callees agree about
2298 // the meaning of type names in their signatures.  This routine is the
2299 // intake for constraints.  It collects them from several places:
2300 //
2301 //  * LinkResolver::resolve_method (if check_access is true) requires
2302 //    that the resolving class (the caller) and the defining class of
2303 //    the resolved method (the callee) agree on each type in the
2304 //    method's signature.
2305 //
2306 //  * LinkResolver::resolve_interface_method performs exactly the same
2307 //    checks.
2308 //
2309 //  * LinkResolver::resolve_field requires that the constant pool
2310 //    attempting to link to a field agree with the field's defining
2311 //    class about the type of the field signature.
2312 //
2313 //  * klassVtable::initialize_vtable requires that, when a class
2314 //    overrides a vtable entry allocated by a superclass, that the
2315 //    overriding method (i.e., the callee) agree with the superclass
2316 //    on each type in the method's signature.
2317 //
2318 //  * klassItable::initialize_itable requires that, when a class fills
2319 //    in its itables, for each non-abstract method installed in an
2320 //    itable, the method (i.e., the callee) agree with the interface
2321 //    on each type in the method's signature.
2322 //
2323 // All those methods have a boolean (check_access, checkconstraints)
2324 // which turns off the checks.  This is used from specialized contexts
2325 // such as bootstrapping, dumping, and debugging.
2326 //
2327 // No direct constraint is placed between the class and its
2328 // supertypes.  Constraints are only placed along linked relations
2329 // between callers and callees.  When a method overrides or implements
2330 // an abstract method in a supertype (superclass or interface), the
2331 // constraints are placed as if the supertype were the caller to the
2332 // overriding method.  (This works well, since callers to the
2333 // supertype have already established agreement between themselves and
2334 // the supertype.)  As a result of all this, a class can disagree with
2335 // its supertype about the meaning of a type name, as long as that
2336 // class neither calls a relevant method of the supertype, nor is
2337 // called (perhaps via an override) from the supertype.
2338 //
2339 //
2340 // SystemDictionary::check_signature_loaders(sig, l1, l2)
2341 //
2342 // Make sure all class components (including arrays) in the given
2343 // signature will be resolved to the same class in both loaders.
2344 // Returns the name of the type that failed a loader constraint check, or
2345 // NULL if no constraint failed. The returned C string needs cleaning up
2346 // with a ResourceMark in the caller.  No exception except OOME is thrown.
2347 // Arrays are not added to the loader constraint table, their elements are.
2348 char* SystemDictionary::check_signature_loaders(Symbol* signature,
2349                                                Handle loader1, Handle loader2,
2350                                                bool is_method, TRAPS)  {
2351   // Nothing to do if loaders are the same.
2352   if (loader1() == loader2()) {
2353     return NULL;
2354   }
2355 
2356   ResourceMark rm(THREAD);
2357   SignatureStream sig_strm(signature, is_method);
2358   while (!sig_strm.is_done()) {
2359     if (sig_strm.is_object()) {
2360       Symbol* s = sig_strm.as_symbol(CHECK_NULL);
2361       Symbol*  sig  = s;
2362       if (!add_loader_constraint(sig, loader1, loader2, THREAD)) {
2363         return sig->as_C_string();
2364       }
2365     }
2366     sig_strm.next();
2367   }
2368   return NULL;
2369 }
2370 
2371 // Decide if we can globally cache a lookup of this class, to be returned to any client that asks.
2372 // We must ensure that all class loaders everywhere will reach this class, for any client.
2373 // This is a safe bet for public classes in java.lang, such as Object and String.
2374 // We also include public classes in java.lang.invoke, because they appear frequently in system-level method types.
2375 // Out of an abundance of caution, we do not include any other classes, not even for packages like java.util.
2376 static bool is_always_visible_class(oop mirror) {
2377   klassOop klass = java_lang_Class::as_klassOop(mirror);
2378   if (Klass::cast(klass)->oop_is_objArray()) {
2379     klass = objArrayKlass::cast(klass)->bottom_klass(); // check element type
2380   }
2381   if (Klass::cast(klass)->oop_is_typeArray()) {
2382     return true; // primitive array
2383   }
2384   assert(Klass::cast(klass)->oop_is_instance(), Klass::cast(klass)->external_name());
2385   return Klass::cast(klass)->is_public() &&
2386          (instanceKlass::cast(klass)->is_same_class_package(SystemDictionary::Object_klass()) ||       // java.lang
2387           instanceKlass::cast(klass)->is_same_class_package(SystemDictionary::MethodHandle_klass()));  // java.lang.invoke
2388 }
2389 
2390 methodOop SystemDictionary::find_method_handle_invoke(Symbol* name,
2391                                                       Symbol* signature,
2392                                                       KlassHandle accessing_klass,
2393                                                       TRAPS) {
2394   if (!EnableInvokeDynamic)  return NULL;
2395   vmSymbols::SID name_id = vmSymbols::find_sid(name);
2396   assert(name_id != vmSymbols::NO_SID, "must be a known name");
2397   unsigned int hash  = invoke_method_table()->compute_hash(signature, name_id);
2398   int          index = invoke_method_table()->hash_to_index(hash);
2399   SymbolPropertyEntry* spe = invoke_method_table()->find_entry(index, hash, signature, name_id);
2400   methodHandle non_cached_result;
2401   if (spe == NULL || spe->property_oop() == NULL) {
2402     spe = NULL;
2403     // Must create lots of stuff here, but outside of the SystemDictionary lock.
2404     if (THREAD->is_Compiler_thread())
2405       return NULL;              // do not attempt from within compiler
2406     bool for_invokeGeneric = (name_id != vmSymbols::VM_SYMBOL_ENUM_NAME(invokeExact_name));
2407     bool found_on_bcp = false;
2408     Handle mt = find_method_handle_type(signature, accessing_klass,
2409                                         for_invokeGeneric,
2410                                         found_on_bcp, CHECK_NULL);
2411     KlassHandle  mh_klass = SystemDictionaryHandles::MethodHandle_klass();
2412     methodHandle m = methodOopDesc::make_invoke_method(mh_klass, name, signature,
2413                                                        mt, CHECK_NULL);
2414     // Now grab the lock.  We might have to throw away the new method,
2415     // if a racing thread has managed to install one at the same time.
2416     if (found_on_bcp) {
2417       MutexLocker ml(SystemDictionary_lock, Thread::current());
2418       spe = invoke_method_table()->find_entry(index, hash, signature, name_id);
2419       if (spe == NULL)
2420         spe = invoke_method_table()->add_entry(index, hash, signature, name_id);
2421       if (spe->property_oop() == NULL) {
2422         spe->set_property_oop(m());
2423         // Link m to his method type, if it is suitably generic.
2424         oop mtform = java_lang_invoke_MethodType::form(mt());
2425         if (mtform != NULL && mt() == java_lang_invoke_MethodTypeForm::erasedType(mtform)
2426             // vmlayout must be an invokeExact:
2427             && name_id == vmSymbols::VM_SYMBOL_ENUM_NAME(invokeExact_name)
2428             && java_lang_invoke_MethodTypeForm::vmlayout_offset_in_bytes() > 0) {
2429           java_lang_invoke_MethodTypeForm::init_vmlayout(mtform, m());
2430         }
2431       }
2432     } else {
2433       non_cached_result = m;
2434     }
2435   }
2436   if (spe != NULL && spe->property_oop() != NULL) {
2437     assert(spe->property_oop()->is_method(), "");
2438     return (methodOop) spe->property_oop();
2439   } else {
2440     return non_cached_result();
2441   }
2442 }
2443 
2444 // Ask Java code to find or construct a java.lang.invoke.MethodType for the given
2445 // signature, as interpreted relative to the given class loader.
2446 // Because of class loader constraints, all method handle usage must be
2447 // consistent with this loader.
2448 Handle SystemDictionary::find_method_handle_type(Symbol* signature,
2449                                                  KlassHandle accessing_klass,
2450                                                  bool for_invokeGeneric,
2451                                                  bool& return_bcp_flag,
2452                                                  TRAPS) {
2453   Handle class_loader, protection_domain;
2454   if (accessing_klass.not_null()) {
2455     class_loader      = Handle(THREAD, instanceKlass::cast(accessing_klass())->class_loader());
2456     protection_domain = Handle(THREAD, instanceKlass::cast(accessing_klass())->protection_domain());
2457   }
2458   bool can_be_cached = true;
2459   Handle empty;
2460   int npts = ArgumentCount(signature).size();
2461   objArrayHandle pts = oopFactory::new_objArray(SystemDictionary::Class_klass(), npts, CHECK_(empty));
2462   int arg = 0;
2463   Handle rt; // the return type from the signature
2464   ResourceMark rm(THREAD);
2465   for (SignatureStream ss(signature); !ss.is_done(); ss.next()) {
2466     oop mirror = NULL;
2467     if (can_be_cached) {
2468       // Use neutral class loader to lookup candidate classes to be placed in the cache.
2469       mirror = ss.as_java_mirror(Handle(), Handle(),
2470                                  SignatureStream::ReturnNull, CHECK_(empty));
2471       if (mirror == NULL || (ss.is_object() && !is_always_visible_class(mirror))) {
2472         // Fall back to accessing_klass context.
2473         can_be_cached = false;
2474       }
2475     }
2476     if (!can_be_cached) {
2477       // Resolve, throwing a real error if it doesn't work.
2478       mirror = ss.as_java_mirror(class_loader, protection_domain,
2479                                  SignatureStream::NCDFError, CHECK_(empty));
2480     }
2481     assert(!oopDesc::is_null(mirror), ss.as_symbol(THREAD)->as_C_string());
2482     if (ss.at_return_type())
2483       rt = Handle(THREAD, mirror);
2484     else
2485       pts->obj_at_put(arg++, mirror);
2486     // Check accessibility.
2487     if (ss.is_object() && accessing_klass.not_null()) {
2488       klassOop sel_klass = java_lang_Class::as_klassOop(mirror);
2489       // Emulate constantPoolOopDesc::verify_constant_pool_resolve.
2490       if (Klass::cast(sel_klass)->oop_is_objArray())
2491         sel_klass = objArrayKlass::cast(sel_klass)->bottom_klass();
2492       if (Klass::cast(sel_klass)->oop_is_instance()) {
2493         KlassHandle sel_kh(THREAD, sel_klass);
2494         LinkResolver::check_klass_accessability(accessing_klass, sel_kh, CHECK_(empty));
2495       }
2496     }
2497   }
2498   assert(arg == npts, "");
2499 
2500   // call java.lang.invoke.MethodHandleNatives::findMethodType(Class rt, Class[] pts) -> MethodType
2501   JavaCallArguments args(Handle(THREAD, rt()));
2502   args.push_oop(pts());
2503   JavaValue result(T_OBJECT);
2504   JavaCalls::call_static(&result,
2505                          SystemDictionary::MethodHandleNatives_klass(),
2506                          vmSymbols::findMethodHandleType_name(),
2507                          vmSymbols::findMethodHandleType_signature(),
2508                          &args, CHECK_(empty));
2509   Handle method_type(THREAD, (oop) result.get_jobject());
2510 
2511   if (for_invokeGeneric) {
2512     // call java.lang.invoke.MethodHandleNatives::notifyGenericMethodType(MethodType) -> void
2513     JavaCallArguments args(Handle(THREAD, method_type()));
2514     JavaValue no_result(T_VOID);
2515     JavaCalls::call_static(&no_result,
2516                            SystemDictionary::MethodHandleNatives_klass(),
2517                            vmSymbols::notifyGenericMethodType_name(),
2518                            vmSymbols::notifyGenericMethodType_signature(),
2519                            &args, THREAD);
2520     if (HAS_PENDING_EXCEPTION) {
2521       // If the notification fails, just kill it.
2522       CLEAR_PENDING_EXCEPTION;
2523     }
2524   }
2525 
2526   // report back to the caller with the MethodType and the "on_bcp" flag
2527   return_bcp_flag = can_be_cached;
2528   return method_type;
2529 }
2530 
2531 // Ask Java code to find or construct a method handle constant.
2532 Handle SystemDictionary::link_method_handle_constant(KlassHandle caller,
2533                                                      int ref_kind, //e.g., JVM_REF_invokeVirtual
2534                                                      KlassHandle callee,
2535                                                      Symbol* name_sym,
2536                                                      Symbol* signature,
2537                                                      TRAPS) {
2538   Handle empty;
2539   Handle name = java_lang_String::create_from_symbol(name_sym, CHECK_(empty));
2540   Handle type;
2541   if (signature->utf8_length() > 0 && signature->byte_at(0) == '(') {
2542     bool ignore_is_on_bcp = false;
2543     type = find_method_handle_type(signature, caller, false, ignore_is_on_bcp, CHECK_(empty));
2544   } else {
2545     ResourceMark rm(THREAD);
2546     SignatureStream ss(signature, false);
2547     if (!ss.is_done()) {
2548       oop mirror = ss.as_java_mirror(caller->class_loader(), caller->protection_domain(),
2549                                      SignatureStream::NCDFError, CHECK_(empty));
2550       type = Handle(THREAD, mirror);
2551       ss.next();
2552       if (!ss.is_done())  type = Handle();  // error!
2553     }
2554   }
2555   if (type.is_null()) {
2556     THROW_MSG_(vmSymbols::java_lang_LinkageError(), "bad signature", empty);
2557   }
2558 
2559   // call java.lang.invoke.MethodHandleNatives::linkMethodHandleConstant(Class caller, int refKind, Class callee, String name, Object type) -> MethodHandle
2560   JavaCallArguments args;
2561   args.push_oop(caller->java_mirror());  // the referring class
2562   args.push_int(ref_kind);
2563   args.push_oop(callee->java_mirror());  // the target class
2564   args.push_oop(name());
2565   args.push_oop(type());
2566   JavaValue result(T_OBJECT);
2567   JavaCalls::call_static(&result,
2568                          SystemDictionary::MethodHandleNatives_klass(),
2569                          vmSymbols::linkMethodHandleConstant_name(),
2570                          vmSymbols::linkMethodHandleConstant_signature(),
2571                          &args, CHECK_(empty));
2572   return Handle(THREAD, (oop) result.get_jobject());
2573 }
2574 
2575 // Ask Java code to find or construct a java.lang.invoke.CallSite for the given
2576 // name and signature, as interpreted relative to the given class loader.
2577 Handle SystemDictionary::make_dynamic_call_site(Handle bootstrap_method,
2578                                                 Symbol* name,
2579                                                 methodHandle signature_invoker,
2580                                                 Handle info,
2581                                                 methodHandle caller_method,
2582                                                 int caller_bci,
2583                                                 TRAPS) {
2584   Handle empty;
2585   guarantee(bootstrap_method.not_null() &&
2586             java_lang_invoke_MethodHandle::is_instance(bootstrap_method()),
2587             "caller must supply a valid BSM");
2588 
2589   Handle caller_mname = MethodHandles::new_MemberName(CHECK_(empty));
2590   MethodHandles::init_MemberName(caller_mname(), caller_method());
2591 
2592   // call java.lang.invoke.MethodHandleNatives::makeDynamicCallSite(bootm, name, mtype, info, caller_mname, caller_pos)
2593   oop name_str_oop = StringTable::intern(name, CHECK_(empty)); // not a handle!
2594   JavaCallArguments args(Handle(THREAD, bootstrap_method()));
2595   args.push_oop(name_str_oop);
2596   args.push_oop(signature_invoker->method_handle_type());
2597   args.push_oop(info());
2598   args.push_oop(caller_mname());
2599   args.push_int(caller_bci);
2600   JavaValue result(T_OBJECT);
2601   JavaCalls::call_static(&result,
2602                          SystemDictionary::MethodHandleNatives_klass(),
2603                          vmSymbols::makeDynamicCallSite_name(),
2604                          vmSymbols::makeDynamicCallSite_signature(),
2605                          &args, CHECK_(empty));
2606   oop call_site_oop = (oop) result.get_jobject();
2607   assert(call_site_oop->is_oop()
2608          /*&& java_lang_invoke_CallSite::is_instance(call_site_oop)*/, "must be sane");
2609   if (TraceMethodHandles) {
2610 #ifndef PRODUCT
2611     tty->print_cr("Linked invokedynamic bci=%d site="INTPTR_FORMAT":", caller_bci, call_site_oop);
2612     call_site_oop->print();
2613     tty->cr();
2614 #endif //PRODUCT
2615   }
2616   return call_site_oop;
2617 }
2618 
2619 Handle SystemDictionary::find_bootstrap_method(methodHandle caller_method, int caller_bci,
2620                                                int cache_index,
2621                                                Handle& argument_info_result,
2622                                                TRAPS) {
2623   Handle empty;
2624 
2625   constantPoolHandle pool;
2626   {
2627     klassOop caller = caller_method->method_holder();
2628     if (!Klass::cast(caller)->oop_is_instance())  return empty;
2629     pool = constantPoolHandle(THREAD, instanceKlass::cast(caller)->constants());
2630   }
2631 
2632   int constant_pool_index = pool->cache()->entry_at(cache_index)->constant_pool_index();
2633   constantTag tag = pool->tag_at(constant_pool_index);
2634 
2635   if (tag.is_invoke_dynamic()) {
2636     // JVM_CONSTANT_InvokeDynamic is an ordered pair of [bootm, name&type], plus optional arguments
2637     // The bootm, being a JVM_CONSTANT_MethodHandle, has its own cache entry.
2638     int bsm_index = pool->invoke_dynamic_bootstrap_method_ref_index_at(constant_pool_index);
2639     if (bsm_index != 0) {
2640       int bsm_index_in_cache = pool->cache()->entry_at(cache_index)->bootstrap_method_index_in_cache();
2641       DEBUG_ONLY(int bsm_index_2 = pool->cache()->entry_at(bsm_index_in_cache)->constant_pool_index());
2642       assert(bsm_index == bsm_index_2, "BSM constant lifted to cache");
2643       if (TraceMethodHandles) {
2644         tty->print_cr("resolving bootstrap method for "PTR_FORMAT" at %d at cache[%d]CP[%d]...",
2645                       (intptr_t) caller_method(), caller_bci, cache_index, constant_pool_index);
2646       }
2647       oop bsm_oop = pool->resolve_cached_constant_at(bsm_index_in_cache, CHECK_(empty));
2648       if (TraceMethodHandles) {
2649         tty->print_cr("bootstrap method for "PTR_FORMAT" at %d retrieved as "PTR_FORMAT":",
2650                       (intptr_t) caller_method(), caller_bci, (intptr_t) bsm_oop);
2651       }
2652       assert(bsm_oop->is_oop(), "must be sane");
2653       // caller must verify that it is of type MethodHandle
2654       Handle bsm(THREAD, bsm_oop);
2655       bsm_oop = NULL;  // safety
2656 
2657       // Extract the optional static arguments.
2658       Handle argument_info;  // either null, or one arg, or Object[]{arg...}
2659       int argc = pool->invoke_dynamic_argument_count_at(constant_pool_index);
2660       if (TraceInvokeDynamic) {
2661         tty->print_cr("find_bootstrap_method: [%d/%d] CONSTANT_InvokeDynamic: %d[%d]",
2662                       constant_pool_index, cache_index, bsm_index, argc);
2663       }
2664       if (argc > 0) {
2665         objArrayHandle arg_array;
2666         if (argc > 1) {
2667           objArrayOop arg_array_oop = oopFactory::new_objArray(SystemDictionary::Object_klass(), argc, CHECK_(empty));
2668           arg_array = objArrayHandle(THREAD, arg_array_oop);
2669           argument_info = arg_array;
2670         }
2671         for (int arg_i = 0; arg_i < argc; arg_i++) {
2672           int arg_index = pool->invoke_dynamic_argument_index_at(constant_pool_index, arg_i);
2673           oop arg_oop = pool->resolve_possibly_cached_constant_at(arg_index, CHECK_(empty));
2674           if (arg_array.is_null()) {
2675             argument_info = Handle(THREAD, arg_oop);
2676           } else {
2677             arg_array->obj_at_put(arg_i, arg_oop);
2678           }
2679         }
2680       }
2681 
2682       argument_info_result = argument_info;  // return argument_info to caller
2683       return bsm;
2684     }
2685   } else {
2686     ShouldNotReachHere();  // verifier does not allow this
2687   }
2688 
2689   return empty;
2690 }
2691 
2692 // Since the identity hash code for symbols changes when the symbols are
2693 // moved from the regular perm gen (hash in the mark word) to the shared
2694 // spaces (hash is the address), the classes loaded into the dictionary
2695 // may be in the wrong buckets.
2696 
2697 void SystemDictionary::reorder_dictionary() {
2698   dictionary()->reorder_dictionary();
2699 }
2700 
2701 
2702 void SystemDictionary::copy_buckets(char** top, char* end) {
2703   dictionary()->copy_buckets(top, end);
2704 }
2705 
2706 
2707 void SystemDictionary::copy_table(char** top, char* end) {
2708   dictionary()->copy_table(top, end);
2709 }
2710 
2711 
2712 void SystemDictionary::reverse() {
2713   dictionary()->reverse();
2714 }
2715 
2716 int SystemDictionary::number_of_classes() {
2717   return dictionary()->number_of_entries();
2718 }
2719 
2720 
2721 // ----------------------------------------------------------------------------
2722 #ifndef PRODUCT
2723 
2724 void SystemDictionary::print() {
2725   dictionary()->print();
2726 
2727   // Placeholders
2728   GCMutexLocker mu(SystemDictionary_lock);
2729   placeholders()->print();
2730 
2731   // loader constraints - print under SD_lock
2732   constraints()->print();
2733 }
2734 
2735 #endif
2736 
2737 void SystemDictionary::verify() {
2738   guarantee(dictionary() != NULL, "Verify of system dictionary failed");
2739   guarantee(constraints() != NULL,
2740             "Verify of loader constraints failed");
2741   guarantee(dictionary()->number_of_entries() >= 0 &&
2742             placeholders()->number_of_entries() >= 0,
2743             "Verify of system dictionary failed");
2744 
2745   // Verify dictionary
2746   dictionary()->verify();
2747 
2748   GCMutexLocker mu(SystemDictionary_lock);
2749   placeholders()->verify();
2750 
2751   // Verify constraint table
2752   guarantee(constraints() != NULL, "Verify of loader constraints failed");
2753   constraints()->verify(dictionary(), placeholders());
2754 }
2755 
2756 
2757 void SystemDictionary::verify_obj_klass_present(Handle obj,
2758                                                 Symbol* class_name,
2759                                                 Handle class_loader) {
2760   GCMutexLocker mu(SystemDictionary_lock);
2761   Symbol* name;
2762 
2763   klassOop probe = find_class(class_name, class_loader);
2764   if (probe == NULL) {
2765     probe = SystemDictionary::find_shared_class(class_name);
2766     if (probe == NULL) {
2767       name = find_placeholder(class_name, class_loader);
2768     }
2769   }
2770   guarantee(probe != NULL || name != NULL,
2771             "Loaded klasses should be in SystemDictionary");
2772 }
2773 
2774 #ifndef PRODUCT
2775 
2776 // statistics code
2777 class ClassStatistics: AllStatic {
2778  private:
2779   static int nclasses;        // number of classes
2780   static int nmethods;        // number of methods
2781   static int nmethoddata;     // number of methodData
2782   static int class_size;      // size of class objects in words
2783   static int method_size;     // size of method objects in words
2784   static int debug_size;      // size of debug info in methods
2785   static int methoddata_size; // size of methodData objects in words
2786 
2787   static void do_class(klassOop k) {
2788     nclasses++;
2789     class_size += k->size();
2790     if (k->klass_part()->oop_is_instance()) {
2791       instanceKlass* ik = (instanceKlass*)k->klass_part();
2792       class_size += ik->methods()->size();
2793       class_size += ik->constants()->size();
2794       class_size += ik->local_interfaces()->size();
2795       class_size += ik->transitive_interfaces()->size();
2796       // We do not have to count implementors, since we only store one!
2797       class_size += ik->all_fields_count() * FieldInfo::field_slots;
2798     }
2799   }
2800 
2801   static void do_method(methodOop m) {
2802     nmethods++;
2803     method_size += m->size();
2804     // class loader uses same objArray for empty vectors, so don't count these
2805     if (m->exception_table()->length() != 0)   method_size += m->exception_table()->size();
2806     if (m->has_stackmap_table()) {
2807       method_size += m->stackmap_data()->size();
2808     }
2809 
2810     methodDataOop mdo = m->method_data();
2811     if (mdo != NULL) {
2812       nmethoddata++;
2813       methoddata_size += mdo->size();
2814     }
2815   }
2816 
2817  public:
2818   static void print() {
2819     SystemDictionary::classes_do(do_class);
2820     SystemDictionary::methods_do(do_method);
2821     tty->print_cr("Class statistics:");
2822     tty->print_cr("%d classes (%d bytes)", nclasses, class_size * oopSize);
2823     tty->print_cr("%d methods (%d bytes = %d base + %d debug info)", nmethods,
2824                   (method_size + debug_size) * oopSize, method_size * oopSize, debug_size * oopSize);
2825     tty->print_cr("%d methoddata (%d bytes)", nmethoddata, methoddata_size * oopSize);
2826   }
2827 };
2828 
2829 
2830 int ClassStatistics::nclasses        = 0;
2831 int ClassStatistics::nmethods        = 0;
2832 int ClassStatistics::nmethoddata     = 0;
2833 int ClassStatistics::class_size      = 0;
2834 int ClassStatistics::method_size     = 0;
2835 int ClassStatistics::debug_size      = 0;
2836 int ClassStatistics::methoddata_size = 0;
2837 
2838 void SystemDictionary::print_class_statistics() {
2839   ResourceMark rm;
2840   ClassStatistics::print();
2841 }
2842 
2843 
2844 class MethodStatistics: AllStatic {
2845  public:
2846   enum {
2847     max_parameter_size = 10
2848   };
2849  private:
2850 
2851   static int _number_of_methods;
2852   static int _number_of_final_methods;
2853   static int _number_of_static_methods;
2854   static int _number_of_native_methods;
2855   static int _number_of_synchronized_methods;
2856   static int _number_of_profiled_methods;
2857   static int _number_of_bytecodes;
2858   static int _parameter_size_profile[max_parameter_size];
2859   static int _bytecodes_profile[Bytecodes::number_of_java_codes];
2860 
2861   static void initialize() {
2862     _number_of_methods        = 0;
2863     _number_of_final_methods  = 0;
2864     _number_of_static_methods = 0;
2865     _number_of_native_methods = 0;
2866     _number_of_synchronized_methods = 0;
2867     _number_of_profiled_methods = 0;
2868     _number_of_bytecodes      = 0;
2869     for (int i = 0; i < max_parameter_size             ; i++) _parameter_size_profile[i] = 0;
2870     for (int j = 0; j < Bytecodes::number_of_java_codes; j++) _bytecodes_profile     [j] = 0;
2871   };
2872 
2873   static void do_method(methodOop m) {
2874     _number_of_methods++;
2875     // collect flag info
2876     if (m->is_final()       ) _number_of_final_methods++;
2877     if (m->is_static()      ) _number_of_static_methods++;
2878     if (m->is_native()      ) _number_of_native_methods++;
2879     if (m->is_synchronized()) _number_of_synchronized_methods++;
2880     if (m->method_data() != NULL) _number_of_profiled_methods++;
2881     // collect parameter size info (add one for receiver, if any)
2882     _parameter_size_profile[MIN2(m->size_of_parameters() + (m->is_static() ? 0 : 1), max_parameter_size - 1)]++;
2883     // collect bytecodes info
2884     {
2885       Thread *thread = Thread::current();
2886       HandleMark hm(thread);
2887       BytecodeStream s(methodHandle(thread, m));
2888       Bytecodes::Code c;
2889       while ((c = s.next()) >= 0) {
2890         _number_of_bytecodes++;
2891         _bytecodes_profile[c]++;
2892       }
2893     }
2894   }
2895 
2896  public:
2897   static void print() {
2898     initialize();
2899     SystemDictionary::methods_do(do_method);
2900     // generate output
2901     tty->cr();
2902     tty->print_cr("Method statistics (static):");
2903     // flag distribution
2904     tty->cr();
2905     tty->print_cr("%6d final        methods  %6.1f%%", _number_of_final_methods       , _number_of_final_methods        * 100.0F / _number_of_methods);
2906     tty->print_cr("%6d static       methods  %6.1f%%", _number_of_static_methods      , _number_of_static_methods       * 100.0F / _number_of_methods);
2907     tty->print_cr("%6d native       methods  %6.1f%%", _number_of_native_methods      , _number_of_native_methods       * 100.0F / _number_of_methods);
2908     tty->print_cr("%6d synchronized methods  %6.1f%%", _number_of_synchronized_methods, _number_of_synchronized_methods * 100.0F / _number_of_methods);
2909     tty->print_cr("%6d profiled     methods  %6.1f%%", _number_of_profiled_methods, _number_of_profiled_methods * 100.0F / _number_of_methods);
2910     // parameter size profile
2911     tty->cr();
2912     { int tot = 0;
2913       int avg = 0;
2914       for (int i = 0; i < max_parameter_size; i++) {
2915         int n = _parameter_size_profile[i];
2916         tot += n;
2917         avg += n*i;
2918         tty->print_cr("parameter size = %1d: %6d methods  %5.1f%%", i, n, n * 100.0F / _number_of_methods);
2919       }
2920       assert(tot == _number_of_methods, "should be the same");
2921       tty->print_cr("                    %6d methods  100.0%%", _number_of_methods);
2922       tty->print_cr("(average parameter size = %3.1f including receiver, if any)", (float)avg / _number_of_methods);
2923     }
2924     // bytecodes profile
2925     tty->cr();
2926     { int tot = 0;
2927       for (int i = 0; i < Bytecodes::number_of_java_codes; i++) {
2928         if (Bytecodes::is_defined(i)) {
2929           Bytecodes::Code c = Bytecodes::cast(i);
2930           int n = _bytecodes_profile[c];
2931           tot += n;
2932           tty->print_cr("%9d  %7.3f%%  %s", n, n * 100.0F / _number_of_bytecodes, Bytecodes::name(c));
2933         }
2934       }
2935       assert(tot == _number_of_bytecodes, "should be the same");
2936       tty->print_cr("%9d  100.000%%", _number_of_bytecodes);
2937     }
2938     tty->cr();
2939   }
2940 };
2941 
2942 int MethodStatistics::_number_of_methods;
2943 int MethodStatistics::_number_of_final_methods;
2944 int MethodStatistics::_number_of_static_methods;
2945 int MethodStatistics::_number_of_native_methods;
2946 int MethodStatistics::_number_of_synchronized_methods;
2947 int MethodStatistics::_number_of_profiled_methods;
2948 int MethodStatistics::_number_of_bytecodes;
2949 int MethodStatistics::_parameter_size_profile[MethodStatistics::max_parameter_size];
2950 int MethodStatistics::_bytecodes_profile[Bytecodes::number_of_java_codes];
2951 
2952 
2953 void SystemDictionary::print_method_statistics() {
2954   MethodStatistics::print();
2955 }
2956 
2957 #endif // PRODUCT