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