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