class_linker.h revision c6ea7d00ad069a2736f603daa3d8eaa9a1f8ea11
1/*
2 * Copyright (C) 2011 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef ART_RUNTIME_CLASS_LINKER_H_
18#define ART_RUNTIME_CLASS_LINKER_H_
19
20#include <set>
21#include <string>
22#include <unordered_map>
23#include <unordered_set>
24#include <utility>
25#include <vector>
26
27#include "base/allocator.h"
28#include "base/enums.h"
29#include "base/hash_set.h"
30#include "base/macros.h"
31#include "base/mutex.h"
32#include "class_table.h"
33#include "dex_cache_resolved_classes.h"
34#include "dex_file.h"
35#include "dex_file_types.h"
36#include "gc_root.h"
37#include "handle.h"
38#include "jni.h"
39#include "mirror/class.h"
40#include "object_callbacks.h"
41#include "verifier/method_verifier.h"
42#include "verifier/verifier_log_mode.h"
43
44namespace art {
45
46namespace gc {
47namespace space {
48  class ImageSpace;
49}  // namespace space
50}  // namespace gc
51namespace mirror {
52  class ClassLoader;
53  class DexCache;
54  class DexCachePointerArray;
55  class DexCacheMethodHandlesTest_Open_Test;
56  class DexCacheTest_Open_Test;
57  class IfTable;
58  class MethodHandle;
59  class MethodHandlesLookup;
60  class MethodType;
61  template<class T> class ObjectArray;
62  class StackTraceElement;
63}  // namespace mirror
64
65template<class T> class Handle;
66class ImtConflictTable;
67template<typename T> class LengthPrefixedArray;
68template<class T> class MutableHandle;
69class InternTable;
70class OatFile;
71template<class T> class ObjectLock;
72class Runtime;
73class ScopedObjectAccessAlreadyRunnable;
74template<size_t kNumReferences> class PACKED(4) StackHandleScope;
75
76enum VisitRootFlags : uint8_t;
77
78class ClassVisitor {
79 public:
80  virtual ~ClassVisitor() {}
81  // Return true to continue visiting.
82  virtual bool operator()(ObjPtr<mirror::Class> klass) = 0;
83};
84
85class ClassLoaderVisitor {
86 public:
87  virtual ~ClassLoaderVisitor() {}
88  virtual void Visit(ObjPtr<mirror::ClassLoader> class_loader)
89      REQUIRES_SHARED(Locks::classlinker_classes_lock_, Locks::mutator_lock_) = 0;
90};
91
92class ClassLinker {
93 public:
94  // Well known mirror::Class roots accessed via GetClassRoot.
95  enum ClassRoot {
96    kJavaLangClass,
97    kJavaLangObject,
98    kClassArrayClass,
99    kObjectArrayClass,
100    kJavaLangString,
101    kJavaLangDexCache,
102    kJavaLangRefReference,
103    kJavaLangReflectConstructor,
104    kJavaLangReflectField,
105    kJavaLangReflectMethod,
106    kJavaLangReflectProxy,
107    kJavaLangStringArrayClass,
108    kJavaLangReflectConstructorArrayClass,
109    kJavaLangReflectFieldArrayClass,
110    kJavaLangReflectMethodArrayClass,
111    kJavaLangInvokeCallSite,
112    kJavaLangInvokeMethodHandleImpl,
113    kJavaLangInvokeMethodHandlesLookup,
114    kJavaLangInvokeMethodType,
115    kJavaLangClassLoader,
116    kJavaLangThrowable,
117    kJavaLangClassNotFoundException,
118    kJavaLangStackTraceElement,
119    kDalvikSystemEmulatedStackFrame,
120    kPrimitiveBoolean,
121    kPrimitiveByte,
122    kPrimitiveChar,
123    kPrimitiveDouble,
124    kPrimitiveFloat,
125    kPrimitiveInt,
126    kPrimitiveLong,
127    kPrimitiveShort,
128    kPrimitiveVoid,
129    kBooleanArrayClass,
130    kByteArrayClass,
131    kCharArrayClass,
132    kDoubleArrayClass,
133    kFloatArrayClass,
134    kIntArrayClass,
135    kLongArrayClass,
136    kShortArrayClass,
137    kJavaLangStackTraceElementArrayClass,
138    kDalvikSystemClassExt,
139    kClassRootsMax,
140  };
141
142  explicit ClassLinker(InternTable* intern_table);
143  ~ClassLinker();
144
145  // Initialize class linker by bootstraping from dex files.
146  bool InitWithoutImage(std::vector<std::unique_ptr<const DexFile>> boot_class_path,
147                        std::string* error_msg)
148      REQUIRES_SHARED(Locks::mutator_lock_)
149      REQUIRES(!Locks::dex_lock_);
150
151  // Initialize class linker from one or more boot images.
152  bool InitFromBootImage(std::string* error_msg)
153      REQUIRES_SHARED(Locks::mutator_lock_)
154      REQUIRES(!Locks::dex_lock_);
155
156  // Add an image space to the class linker, may fix up classloader fields and dex cache fields.
157  // The dex files that were newly opened for the space are placed in the out argument
158  // out_dex_files. Returns true if the operation succeeded.
159  // The space must be already added to the heap before calling AddImageSpace since we need to
160  // properly handle read barriers and object marking.
161  bool AddImageSpace(gc::space::ImageSpace* space,
162                     Handle<mirror::ClassLoader> class_loader,
163                     jobjectArray dex_elements,
164                     const char* dex_location,
165                     std::vector<std::unique_ptr<const DexFile>>* out_dex_files,
166                     std::string* error_msg)
167      REQUIRES(!Locks::dex_lock_)
168      REQUIRES_SHARED(Locks::mutator_lock_);
169
170  bool OpenImageDexFiles(gc::space::ImageSpace* space,
171                         std::vector<std::unique_ptr<const DexFile>>* out_dex_files,
172                         std::string* error_msg)
173      REQUIRES(!Locks::dex_lock_)
174      REQUIRES_SHARED(Locks::mutator_lock_);
175
176  // Finds a class by its descriptor, loading it if necessary.
177  // If class_loader is null, searches boot_class_path_.
178  mirror::Class* FindClass(Thread* self,
179                           const char* descriptor,
180                           Handle<mirror::ClassLoader> class_loader)
181      REQUIRES_SHARED(Locks::mutator_lock_)
182      REQUIRES(!Locks::dex_lock_);
183
184  // Finds a class by its descriptor using the "system" class loader, ie by searching the
185  // boot_class_path_.
186  mirror::Class* FindSystemClass(Thread* self, const char* descriptor)
187      REQUIRES_SHARED(Locks::mutator_lock_)
188      REQUIRES(!Locks::dex_lock_) {
189    return FindClass(self, descriptor, ScopedNullHandle<mirror::ClassLoader>());
190  }
191
192  // Finds the array class given for the element class.
193  mirror::Class* FindArrayClass(Thread* self, ObjPtr<mirror::Class>* element_class)
194      REQUIRES_SHARED(Locks::mutator_lock_)
195      REQUIRES(!Locks::dex_lock_);
196
197  // Returns true if the class linker is initialized.
198  bool IsInitialized() const {
199    return init_done_;
200  }
201
202  // Define a new a class based on a ClassDef from a DexFile
203  mirror::Class* DefineClass(Thread* self,
204                             const char* descriptor,
205                             size_t hash,
206                             Handle<mirror::ClassLoader> class_loader,
207                             const DexFile& dex_file,
208                             const DexFile::ClassDef& dex_class_def)
209      REQUIRES_SHARED(Locks::mutator_lock_)
210      REQUIRES(!Locks::dex_lock_);
211
212  // Finds a class by its descriptor, returning null if it isn't wasn't loaded
213  // by the given 'class_loader'.
214  mirror::Class* LookupClass(Thread* self,
215                             const char* descriptor,
216                             ObjPtr<mirror::ClassLoader> class_loader)
217      REQUIRES(!Locks::classlinker_classes_lock_)
218      REQUIRES_SHARED(Locks::mutator_lock_) {
219    return LookupClass(self, descriptor, ComputeModifiedUtf8Hash(descriptor), class_loader);
220  }
221
222  // Finds all the classes with the given descriptor, regardless of ClassLoader.
223  void LookupClasses(const char* descriptor, std::vector<ObjPtr<mirror::Class>>& classes)
224      REQUIRES(!Locks::classlinker_classes_lock_)
225      REQUIRES_SHARED(Locks::mutator_lock_);
226
227  mirror::Class* FindPrimitiveClass(char type) REQUIRES_SHARED(Locks::mutator_lock_);
228
229  void DumpForSigQuit(std::ostream& os) REQUIRES(!Locks::classlinker_classes_lock_);
230
231  size_t NumLoadedClasses()
232      REQUIRES(!Locks::classlinker_classes_lock_)
233      REQUIRES_SHARED(Locks::mutator_lock_);
234
235  // Resolve a String with the given index from the DexFile, storing the
236  // result in the DexCache.
237  mirror::String* ResolveString(const DexFile& dex_file,
238                                dex::StringIndex string_idx,
239                                Handle<mirror::DexCache> dex_cache)
240      REQUIRES_SHARED(Locks::mutator_lock_);
241
242  // Find a String with the given index from the DexFile, storing the
243  // result in the DexCache if found. Return null if not found.
244  mirror::String* LookupString(const DexFile& dex_file,
245                               dex::StringIndex string_idx,
246                               ObjPtr<mirror::DexCache> dex_cache)
247      REQUIRES_SHARED(Locks::mutator_lock_);
248
249  // Resolve a Type with the given index from the DexFile, storing the
250  // result in the DexCache. The referrer is used to identify the
251  // target DexCache and ClassLoader to use for resolution.
252  mirror::Class* ResolveType(const DexFile& dex_file,
253                             dex::TypeIndex type_idx,
254                             ObjPtr<mirror::Class> referrer)
255      REQUIRES_SHARED(Locks::mutator_lock_)
256      REQUIRES(!Locks::dex_lock_, !Roles::uninterruptible_);
257
258  // Resolve a Type with the given index from the DexFile, storing the
259  // result in the DexCache. The referrer is used to identify the
260  // target DexCache and ClassLoader to use for resolution.
261  mirror::Class* ResolveType(dex::TypeIndex type_idx, ArtMethod* referrer)
262      REQUIRES_SHARED(Locks::mutator_lock_)
263      REQUIRES(!Locks::dex_lock_, !Roles::uninterruptible_);
264
265  // Look up a resolved type with the given ID from the DexFile. The ClassLoader is used to search
266  // for the type, since it may be referenced from but not contained within the given DexFile.
267  ObjPtr<mirror::Class> LookupResolvedType(const DexFile& dex_file,
268                                           dex::TypeIndex type_idx,
269                                           ObjPtr<mirror::DexCache> dex_cache,
270                                           ObjPtr<mirror::ClassLoader> class_loader)
271      REQUIRES_SHARED(Locks::mutator_lock_);
272  static ObjPtr<mirror::Class> LookupResolvedType(dex::TypeIndex type_idx,
273                                                  ObjPtr<mirror::DexCache> dex_cache,
274                                                  ObjPtr<mirror::ClassLoader> class_loader)
275      REQUIRES_SHARED(Locks::mutator_lock_);
276
277  // Resolve a type with the given ID from the DexFile, storing the
278  // result in DexCache. The ClassLoader is used to search for the
279  // type, since it may be referenced from but not contained within
280  // the given DexFile.
281  mirror::Class* ResolveType(const DexFile& dex_file,
282                             dex::TypeIndex type_idx,
283                             Handle<mirror::DexCache> dex_cache,
284                             Handle<mirror::ClassLoader> class_loader)
285      REQUIRES_SHARED(Locks::mutator_lock_)
286      REQUIRES(!Locks::dex_lock_, !Roles::uninterruptible_);
287
288  // Determine whether a dex cache result should be trusted, or an IncompatibleClassChangeError
289  // check should be performed even after a hit.
290  enum ResolveMode {  // private.
291    kNoICCECheckForCache,
292    kForceICCECheck
293  };
294
295  // Resolve a method with a given ID from the DexFile, storing the
296  // result in DexCache. The ClassLinker and ClassLoader are used as
297  // in ResolveType. What is unique is the method type argument which
298  // is used to determine if this method is a direct, static, or
299  // virtual method.
300  template <ResolveMode kResolveMode>
301  ArtMethod* ResolveMethod(const DexFile& dex_file,
302                           uint32_t method_idx,
303                           Handle<mirror::DexCache> dex_cache,
304                           Handle<mirror::ClassLoader> class_loader,
305                           ArtMethod* referrer,
306                           InvokeType type)
307      REQUIRES_SHARED(Locks::mutator_lock_)
308      REQUIRES(!Locks::dex_lock_, !Roles::uninterruptible_);
309
310  ArtMethod* GetResolvedMethod(uint32_t method_idx, ArtMethod* referrer)
311      REQUIRES_SHARED(Locks::mutator_lock_);
312
313  // This returns the class referred to by GetMethodId(method_idx).class_idx_. This might be
314  // different then the declaring class of the resolved method due to copied
315  // miranda/default/conflict methods.
316  mirror::Class* ResolveReferencedClassOfMethod(uint32_t method_idx,
317                                                Handle<mirror::DexCache> dex_cache,
318                                                Handle<mirror::ClassLoader> class_loader)
319      REQUIRES_SHARED(Locks::mutator_lock_)
320      REQUIRES(!Locks::dex_lock_, !Roles::uninterruptible_);
321  template <ResolveMode kResolveMode>
322  ArtMethod* ResolveMethod(Thread* self, uint32_t method_idx, ArtMethod* referrer, InvokeType type)
323      REQUIRES_SHARED(Locks::mutator_lock_)
324      REQUIRES(!Locks::dex_lock_, !Roles::uninterruptible_);
325  ArtMethod* ResolveMethodWithoutInvokeType(const DexFile& dex_file,
326                                            uint32_t method_idx,
327                                            Handle<mirror::DexCache> dex_cache,
328                                            Handle<mirror::ClassLoader> class_loader)
329      REQUIRES_SHARED(Locks::mutator_lock_)
330      REQUIRES(!Locks::dex_lock_, !Roles::uninterruptible_);
331
332  ArtField* LookupResolvedField(uint32_t field_idx, ArtMethod* referrer, bool is_static)
333      REQUIRES_SHARED(Locks::mutator_lock_);
334  ArtField* ResolveField(uint32_t field_idx, ArtMethod* referrer, bool is_static)
335      REQUIRES_SHARED(Locks::mutator_lock_)
336      REQUIRES(!Locks::dex_lock_, !Roles::uninterruptible_);
337
338  // Resolve a field with a given ID from the DexFile, storing the
339  // result in DexCache. The ClassLinker and ClassLoader are used as
340  // in ResolveType. What is unique is the is_static argument which is
341  // used to determine if we are resolving a static or non-static
342  // field.
343  ArtField* ResolveField(const DexFile& dex_file, uint32_t field_idx,
344                         Handle<mirror::DexCache> dex_cache,
345                         Handle<mirror::ClassLoader> class_loader, bool is_static)
346      REQUIRES_SHARED(Locks::mutator_lock_)
347      REQUIRES(!Locks::dex_lock_, !Roles::uninterruptible_);
348
349  // Resolve a field with a given ID from the DexFile, storing the
350  // result in DexCache. The ClassLinker and ClassLoader are used as
351  // in ResolveType. No is_static argument is provided so that Java
352  // field resolution semantics are followed.
353  ArtField* ResolveFieldJLS(const DexFile& dex_file,
354                            uint32_t field_idx,
355                            Handle<mirror::DexCache> dex_cache,
356                            Handle<mirror::ClassLoader> class_loader)
357      REQUIRES_SHARED(Locks::mutator_lock_)
358      REQUIRES(!Locks::dex_lock_, !Roles::uninterruptible_);
359
360  // Resolve a method type with a given ID from the DexFile, storing
361  // the result in the DexCache.
362  mirror::MethodType* ResolveMethodType(const DexFile& dex_file,
363                                        uint32_t proto_idx,
364                                        Handle<mirror::DexCache> dex_cache,
365                                        Handle<mirror::ClassLoader> class_loader)
366      REQUIRES_SHARED(Locks::mutator_lock_)
367      REQUIRES(!Locks::dex_lock_, !Roles::uninterruptible_);
368
369  // Resolve a method handle with a given ID from the DexFile. The
370  // result is not cached in the DexCache as the instance will only be
371  // used once in most circumstances.
372  mirror::MethodHandle* ResolveMethodHandle(uint32_t method_handle_idx, ArtMethod* referrer)
373      REQUIRES_SHARED(Locks::mutator_lock_);
374
375  // Returns true on success, false if there's an exception pending.
376  // can_run_clinit=false allows the compiler to attempt to init a class,
377  // given the restriction that no <clinit> execution is possible.
378  bool EnsureInitialized(Thread* self,
379                         Handle<mirror::Class> c,
380                         bool can_init_fields,
381                         bool can_init_parents)
382      REQUIRES_SHARED(Locks::mutator_lock_)
383      REQUIRES(!Locks::dex_lock_, !Roles::uninterruptible_);
384
385  // Initializes classes that have instances in the image but that have
386  // <clinit> methods so they could not be initialized by the compiler.
387  void RunRootClinits()
388      REQUIRES_SHARED(Locks::mutator_lock_)
389      REQUIRES(!Locks::dex_lock_, !Roles::uninterruptible_);
390
391  ObjPtr<mirror::DexCache> RegisterDexFile(const DexFile& dex_file,
392                                           ObjPtr<mirror::ClassLoader> class_loader)
393      REQUIRES(!Locks::dex_lock_)
394      REQUIRES_SHARED(Locks::mutator_lock_);
395  void RegisterBootClassPathDexFile(const DexFile& dex_file, ObjPtr<mirror::DexCache> dex_cache)
396      REQUIRES(!Locks::dex_lock_)
397      REQUIRES_SHARED(Locks::mutator_lock_);
398
399  const std::vector<const DexFile*>& GetBootClassPath() {
400    return boot_class_path_;
401  }
402
403  void VisitClasses(ClassVisitor* visitor)
404      REQUIRES(!Locks::classlinker_classes_lock_)
405      REQUIRES_SHARED(Locks::mutator_lock_);
406
407  // Less efficient variant of VisitClasses that copies the class_table_ into secondary storage
408  // so that it can visit individual classes without holding the doesn't hold the
409  // Locks::classlinker_classes_lock_. As the Locks::classlinker_classes_lock_ isn't held this code
410  // can race with insertion and deletion of classes while the visitor is being called.
411  void VisitClassesWithoutClassesLock(ClassVisitor* visitor)
412      REQUIRES_SHARED(Locks::mutator_lock_)
413      REQUIRES(!Locks::dex_lock_);
414
415  void VisitClassRoots(RootVisitor* visitor, VisitRootFlags flags)
416      REQUIRES(!Locks::classlinker_classes_lock_, !Locks::trace_lock_)
417      REQUIRES_SHARED(Locks::mutator_lock_);
418  void VisitRoots(RootVisitor* visitor, VisitRootFlags flags)
419      REQUIRES(!Locks::dex_lock_, !Locks::classlinker_classes_lock_, !Locks::trace_lock_)
420      REQUIRES_SHARED(Locks::mutator_lock_);
421
422  bool IsDexFileRegistered(Thread* self, const DexFile& dex_file)
423      REQUIRES(!Locks::dex_lock_)
424      REQUIRES_SHARED(Locks::mutator_lock_);
425  ObjPtr<mirror::DexCache> FindDexCache(Thread* self, const DexFile& dex_file)
426      REQUIRES(!Locks::dex_lock_)
427      REQUIRES_SHARED(Locks::mutator_lock_);
428  ClassTable* FindClassTable(Thread* self, ObjPtr<mirror::DexCache> dex_cache)
429      REQUIRES(!Locks::dex_lock_)
430      REQUIRES_SHARED(Locks::mutator_lock_);
431  void FixupDexCaches(ArtMethod* resolution_method)
432      REQUIRES(!Locks::dex_lock_)
433      REQUIRES_SHARED(Locks::mutator_lock_);
434
435  LengthPrefixedArray<ArtField>* AllocArtFieldArray(Thread* self,
436                                                    LinearAlloc* allocator,
437                                                    size_t length);
438
439  LengthPrefixedArray<ArtMethod>* AllocArtMethodArray(Thread* self,
440                                                      LinearAlloc* allocator,
441                                                      size_t length);
442
443  mirror::PointerArray* AllocPointerArray(Thread* self, size_t length)
444      REQUIRES_SHARED(Locks::mutator_lock_)
445      REQUIRES(!Roles::uninterruptible_);
446
447  mirror::IfTable* AllocIfTable(Thread* self, size_t ifcount)
448      REQUIRES_SHARED(Locks::mutator_lock_)
449      REQUIRES(!Roles::uninterruptible_);
450
451  mirror::ObjectArray<mirror::StackTraceElement>* AllocStackTraceElementArray(Thread* self,
452                                                                              size_t length)
453      REQUIRES_SHARED(Locks::mutator_lock_)
454      REQUIRES(!Roles::uninterruptible_);
455
456  verifier::MethodVerifier::FailureKind VerifyClass(
457      Thread* self,
458      Handle<mirror::Class> klass,
459      verifier::HardFailLogMode log_level = verifier::HardFailLogMode::kLogNone)
460      REQUIRES_SHARED(Locks::mutator_lock_)
461      REQUIRES(!Locks::dex_lock_);
462  bool VerifyClassUsingOatFile(const DexFile& dex_file,
463                               ObjPtr<mirror::Class> klass,
464                               mirror::Class::Status& oat_file_class_status)
465      REQUIRES_SHARED(Locks::mutator_lock_)
466      REQUIRES(!Locks::dex_lock_);
467  void ResolveClassExceptionHandlerTypes(Handle<mirror::Class> klass)
468      REQUIRES_SHARED(Locks::mutator_lock_)
469      REQUIRES(!Locks::dex_lock_);
470  void ResolveMethodExceptionHandlerTypes(ArtMethod* klass)
471      REQUIRES_SHARED(Locks::mutator_lock_)
472      REQUIRES(!Locks::dex_lock_);
473
474  mirror::Class* CreateProxyClass(ScopedObjectAccessAlreadyRunnable& soa,
475                                  jstring name,
476                                  jobjectArray interfaces,
477                                  jobject loader,
478                                  jobjectArray methods,
479                                  jobjectArray throws)
480      REQUIRES_SHARED(Locks::mutator_lock_);
481  std::string GetDescriptorForProxy(ObjPtr<mirror::Class> proxy_class)
482      REQUIRES_SHARED(Locks::mutator_lock_);
483  template<ReadBarrierOption kReadBarrierOption = kWithReadBarrier>
484  ArtMethod* FindMethodForProxy(ObjPtr<mirror::Class> proxy_class, ArtMethod* proxy_method)
485      REQUIRES(!Locks::dex_lock_)
486      REQUIRES_SHARED(Locks::mutator_lock_);
487
488  // Get the oat code for a method when its class isn't yet initialized.
489  const void* GetQuickOatCodeFor(ArtMethod* method)
490      REQUIRES_SHARED(Locks::mutator_lock_);
491
492  pid_t GetClassesLockOwner();  // For SignalCatcher.
493  pid_t GetDexLockOwner();  // For SignalCatcher.
494
495  mirror::Class* GetClassRoot(ClassRoot class_root) REQUIRES_SHARED(Locks::mutator_lock_);
496
497  static const char* GetClassRootDescriptor(ClassRoot class_root);
498
499  // Is the given entry point quick code to run the resolution stub?
500  bool IsQuickResolutionStub(const void* entry_point) const;
501
502  // Is the given entry point quick code to bridge into the interpreter?
503  bool IsQuickToInterpreterBridge(const void* entry_point) const;
504
505  // Is the given entry point quick code to run the generic JNI stub?
506  bool IsQuickGenericJniStub(const void* entry_point) const;
507
508  const void* GetQuickToInterpreterBridgeTrampoline() const {
509    return quick_to_interpreter_bridge_trampoline_;
510  }
511
512  InternTable* GetInternTable() const {
513    return intern_table_;
514  }
515
516  // Set the entrypoints up for method to the given code.
517  void SetEntryPointsToCompiledCode(ArtMethod* method, const void* method_code) const
518      REQUIRES_SHARED(Locks::mutator_lock_);
519
520  // Set the entrypoints up for method to the enter the interpreter.
521  void SetEntryPointsToInterpreter(ArtMethod* method) const
522      REQUIRES_SHARED(Locks::mutator_lock_);
523
524  // Set the entrypoints up for an obsolete method.
525  void SetEntryPointsForObsoleteMethod(ArtMethod* method) const
526      REQUIRES_SHARED(Locks::mutator_lock_);
527
528  // Attempts to insert a class into a class table.  Returns null if
529  // the class was inserted, otherwise returns an existing class with
530  // the same descriptor and ClassLoader.
531  mirror::Class* InsertClass(const char* descriptor, ObjPtr<mirror::Class> klass, size_t hash)
532      REQUIRES(!Locks::classlinker_classes_lock_)
533      REQUIRES_SHARED(Locks::mutator_lock_);
534
535  // Add an oat file with .bss GC roots to be visited again at the end of GC
536  // for collector types that need it.
537  void WriteBarrierForBootOatFileBssRoots(const OatFile* oat_file)
538      REQUIRES(!Locks::classlinker_classes_lock_)
539      REQUIRES_SHARED(Locks::mutator_lock_);
540
541  mirror::ObjectArray<mirror::Class>* GetClassRoots() REQUIRES_SHARED(Locks::mutator_lock_) {
542    mirror::ObjectArray<mirror::Class>* class_roots = class_roots_.Read();
543    DCHECK(class_roots != nullptr);
544    return class_roots;
545  }
546
547  // Move the class table to the pre-zygote table to reduce memory usage. This works by ensuring
548  // that no more classes are ever added to the pre zygote table which makes it that the pages
549  // always remain shared dirty instead of private dirty.
550  void MoveClassTableToPreZygote()
551      REQUIRES(!Locks::classlinker_classes_lock_)
552      REQUIRES_SHARED(Locks::mutator_lock_);
553
554  // Creates a GlobalRef PathClassLoader that can be used to load classes from the given dex files.
555  // Note: the objects are not completely set up. Do not use this outside of tests and the compiler.
556  jobject CreatePathClassLoader(Thread* self, const std::vector<const DexFile*>& dex_files)
557      REQUIRES_SHARED(Locks::mutator_lock_)
558      REQUIRES(!Locks::dex_lock_);
559
560  PointerSize GetImagePointerSize() const {
561    return image_pointer_size_;
562  }
563
564  // Used by image writer for checking.
565  bool ClassInClassTable(ObjPtr<mirror::Class> klass)
566      REQUIRES(Locks::classlinker_classes_lock_)
567      REQUIRES_SHARED(Locks::mutator_lock_);
568
569  // Clear the ArrayClass cache. This is necessary when cleaning up for the image, as the cache
570  // entries are roots, but potentially not image classes.
571  void DropFindArrayClassCache() REQUIRES_SHARED(Locks::mutator_lock_);
572
573  // Clean up class loaders, this needs to happen after JNI weak globals are cleared.
574  void CleanupClassLoaders()
575      REQUIRES(!Locks::classlinker_classes_lock_)
576      REQUIRES_SHARED(Locks::mutator_lock_);
577
578  // Unlike GetOrCreateAllocatorForClassLoader, GetAllocatorForClassLoader asserts that the
579  // allocator for this class loader is already created.
580  LinearAlloc* GetAllocatorForClassLoader(ObjPtr<mirror::ClassLoader> class_loader)
581      REQUIRES_SHARED(Locks::mutator_lock_);
582
583  // Return the linear alloc for a class loader if it is already allocated, otherwise allocate and
584  // set it. TODO: Consider using a lock other than classlinker_classes_lock_.
585  LinearAlloc* GetOrCreateAllocatorForClassLoader(ObjPtr<mirror::ClassLoader> class_loader)
586      REQUIRES(!Locks::classlinker_classes_lock_)
587      REQUIRES_SHARED(Locks::mutator_lock_);
588
589  // May be called with null class_loader due to legacy code. b/27954959
590  void InsertDexFileInToClassLoader(ObjPtr<mirror::Object> dex_file,
591                                    ObjPtr<mirror::ClassLoader> class_loader)
592      REQUIRES(!Locks::classlinker_classes_lock_)
593      REQUIRES_SHARED(Locks::mutator_lock_);
594
595  static bool ShouldUseInterpreterEntrypoint(ArtMethod* method, const void* quick_code)
596      REQUIRES_SHARED(Locks::mutator_lock_);
597
598  std::set<DexCacheResolvedClasses> GetResolvedClasses(bool ignore_boot_classes)
599      REQUIRES(!Locks::dex_lock_);
600
601  // Returns the class descriptors for loaded dex files.
602  std::unordered_set<std::string> GetClassDescriptorsForResolvedClasses(
603      const std::set<DexCacheResolvedClasses>& classes)
604      REQUIRES(!Locks::dex_lock_);
605
606  static bool IsBootClassLoader(ScopedObjectAccessAlreadyRunnable& soa,
607                                ObjPtr<mirror::ClassLoader> class_loader)
608      REQUIRES_SHARED(Locks::mutator_lock_);
609
610  ArtMethod* AddMethodToConflictTable(ObjPtr<mirror::Class> klass,
611                                      ArtMethod* conflict_method,
612                                      ArtMethod* interface_method,
613                                      ArtMethod* method,
614                                      bool force_new_conflict_method)
615      REQUIRES_SHARED(Locks::mutator_lock_);
616
617  // Create a conflict table with a specified capacity.
618  ImtConflictTable* CreateImtConflictTable(size_t count, LinearAlloc* linear_alloc);
619
620  // Static version for when the class linker is not yet created.
621  static ImtConflictTable* CreateImtConflictTable(size_t count,
622                                                  LinearAlloc* linear_alloc,
623                                                  PointerSize pointer_size);
624
625
626  // Create the IMT and conflict tables for a class.
627  void FillIMTAndConflictTables(ObjPtr<mirror::Class> klass) REQUIRES_SHARED(Locks::mutator_lock_);
628
629  // Clear class table strong roots (other than classes themselves). This is done by dex2oat to
630  // allow pruning dex caches.
631  void ClearClassTableStrongRoots() const
632      REQUIRES(!Locks::classlinker_classes_lock_)
633      REQUIRES_SHARED(Locks::mutator_lock_);
634
635  // Throw the class initialization failure recorded when first trying to initialize the given
636  // class.
637  void ThrowEarlierClassFailure(ObjPtr<mirror::Class> c, bool wrap_in_no_class_def = false)
638      REQUIRES_SHARED(Locks::mutator_lock_)
639      REQUIRES(!Locks::dex_lock_);
640
641  // Get the actual holding class for a copied method. Pretty slow, don't call often.
642  mirror::Class* GetHoldingClassOfCopiedMethod(ArtMethod* method)
643      REQUIRES_SHARED(Locks::mutator_lock_);
644
645  // Returns null if not found.
646  ClassTable* ClassTableForClassLoader(ObjPtr<mirror::ClassLoader> class_loader)
647      REQUIRES_SHARED(Locks::mutator_lock_);
648
649  void AppendToBootClassPath(Thread* self, const DexFile& dex_file)
650      REQUIRES_SHARED(Locks::mutator_lock_)
651      REQUIRES(!Locks::dex_lock_);
652
653  struct DexCacheData {
654    // Construct an invalid data object.
655    DexCacheData()
656        : weak_root(nullptr),
657          dex_file(nullptr),
658          resolved_methods(nullptr),
659          class_table(nullptr) { }
660
661    // Check if the data is valid.
662    bool IsValid() const {
663      return dex_file != nullptr;
664    }
665
666    // Weak root to the DexCache. Note: Do not decode this unnecessarily or else class unloading may
667    // not work properly.
668    jweak weak_root;
669    // The following two fields are caches to the DexCache's fields and here to avoid unnecessary
670    // jweak decode that triggers read barriers (and mark them alive unnecessarily and mess with
671    // class unloading.)
672    const DexFile* dex_file;
673    ArtMethod** resolved_methods;
674    // Identify the associated class loader's class table. This is used to make sure that
675    // the Java call to native DexCache.setResolvedType() inserts the resolved type in that
676    // class table. It is also used to make sure we don't register the same dex cache with
677    // multiple class loaders.
678    ClassTable* class_table;
679  };
680
681 private:
682  class LinkInterfaceMethodsHelper;
683
684  struct ClassLoaderData {
685    jweak weak_root;  // Weak root to enable class unloading.
686    ClassTable* class_table;
687    LinearAlloc* allocator;
688  };
689
690  // Ensures that the supertype of 'klass' ('supertype') is verified. Returns false and throws
691  // appropriate exceptions if verification failed hard. Returns true for successful verification or
692  // soft-failures.
693  bool AttemptSupertypeVerification(Thread* self,
694                                    Handle<mirror::Class> klass,
695                                    Handle<mirror::Class> supertype)
696      REQUIRES(!Locks::dex_lock_)
697      REQUIRES_SHARED(Locks::mutator_lock_);
698
699  static void DeleteClassLoader(Thread* self, const ClassLoaderData& data)
700      REQUIRES_SHARED(Locks::mutator_lock_);
701
702  void VisitClassLoaders(ClassLoaderVisitor* visitor) const
703      REQUIRES_SHARED(Locks::classlinker_classes_lock_, Locks::mutator_lock_);
704
705  void VisitClassesInternal(ClassVisitor* visitor)
706      REQUIRES_SHARED(Locks::classlinker_classes_lock_, Locks::mutator_lock_);
707
708  // Returns the number of zygote and image classes.
709  size_t NumZygoteClasses() const
710      REQUIRES(Locks::classlinker_classes_lock_)
711      REQUIRES_SHARED(Locks::mutator_lock_);
712
713  // Returns the number of non zygote nor image classes.
714  size_t NumNonZygoteClasses() const
715      REQUIRES(Locks::classlinker_classes_lock_)
716      REQUIRES_SHARED(Locks::mutator_lock_);
717
718  void FinishInit(Thread* self)
719      REQUIRES_SHARED(Locks::mutator_lock_)
720      REQUIRES(!Locks::dex_lock_, !Roles::uninterruptible_);
721
722  // For early bootstrapping by Init
723  mirror::Class* AllocClass(Thread* self,
724                            ObjPtr<mirror::Class> java_lang_Class,
725                            uint32_t class_size)
726      REQUIRES_SHARED(Locks::mutator_lock_)
727      REQUIRES(!Roles::uninterruptible_);
728
729  // Alloc* convenience functions to avoid needing to pass in mirror::Class*
730  // values that are known to the ClassLinker such as
731  // kObjectArrayClass and kJavaLangString etc.
732  mirror::Class* AllocClass(Thread* self, uint32_t class_size)
733      REQUIRES_SHARED(Locks::mutator_lock_)
734      REQUIRES(!Roles::uninterruptible_);
735
736  mirror::DexCache* AllocDexCache(ObjPtr<mirror::String>* out_location,
737                                  Thread* self,
738                                  const DexFile& dex_file)
739      REQUIRES_SHARED(Locks::mutator_lock_)
740      REQUIRES(!Roles::uninterruptible_);
741
742  // Used for tests and AppendToBootClassPath.
743  mirror::DexCache* AllocAndInitializeDexCache(Thread* self,
744                                               const DexFile& dex_file,
745                                               LinearAlloc* linear_alloc)
746      REQUIRES_SHARED(Locks::mutator_lock_)
747      REQUIRES(!Locks::dex_lock_)
748      REQUIRES(!Roles::uninterruptible_);
749
750  mirror::Class* CreatePrimitiveClass(Thread* self, Primitive::Type type)
751      REQUIRES_SHARED(Locks::mutator_lock_)
752      REQUIRES(!Roles::uninterruptible_);
753  mirror::Class* InitializePrimitiveClass(ObjPtr<mirror::Class> primitive_class,
754                                          Primitive::Type type)
755      REQUIRES_SHARED(Locks::mutator_lock_)
756      REQUIRES(!Roles::uninterruptible_);
757
758  mirror::Class* CreateArrayClass(Thread* self,
759                                  const char* descriptor,
760                                  size_t hash,
761                                  Handle<mirror::ClassLoader> class_loader)
762      REQUIRES_SHARED(Locks::mutator_lock_)
763      REQUIRES(!Locks::dex_lock_, !Roles::uninterruptible_);
764
765  void AppendToBootClassPath(const DexFile& dex_file, ObjPtr<mirror::DexCache> dex_cache)
766      REQUIRES_SHARED(Locks::mutator_lock_)
767      REQUIRES(!Locks::dex_lock_);
768
769  // Precomputes size needed for Class, in the case of a non-temporary class this size must be
770  // sufficient to hold all static fields.
771  uint32_t SizeOfClassWithoutEmbeddedTables(const DexFile& dex_file,
772                                            const DexFile::ClassDef& dex_class_def);
773
774  // Setup the classloader, class def index, type idx so that we can insert this class in the class
775  // table.
776  void SetupClass(const DexFile& dex_file,
777                  const DexFile::ClassDef& dex_class_def,
778                  Handle<mirror::Class> klass,
779                  ObjPtr<mirror::ClassLoader> class_loader)
780      REQUIRES_SHARED(Locks::mutator_lock_);
781
782  void LoadClass(Thread* self,
783                 const DexFile& dex_file,
784                 const DexFile::ClassDef& dex_class_def,
785                 Handle<mirror::Class> klass)
786      REQUIRES_SHARED(Locks::mutator_lock_);
787  void LoadClassMembers(Thread* self,
788                        const DexFile& dex_file,
789                        const uint8_t* class_data,
790                        Handle<mirror::Class> klass)
791      REQUIRES_SHARED(Locks::mutator_lock_);
792
793  void LoadField(const ClassDataItemIterator& it, Handle<mirror::Class> klass, ArtField* dst)
794      REQUIRES_SHARED(Locks::mutator_lock_);
795
796  void LoadMethod(const DexFile& dex_file,
797                  const ClassDataItemIterator& it,
798                  Handle<mirror::Class> klass, ArtMethod* dst)
799      REQUIRES_SHARED(Locks::mutator_lock_);
800
801  void FixupStaticTrampolines(ObjPtr<mirror::Class> klass) REQUIRES_SHARED(Locks::mutator_lock_);
802
803  // Finds a class in a Path- or DexClassLoader, loading it if necessary without using JNI. Hash
804  // function is supposed to be ComputeModifiedUtf8Hash(descriptor). Returns true if the
805  // class-loader chain could be handled, false otherwise, i.e., a non-supported class-loader
806  // was encountered while walking the parent chain (currently only BootClassLoader and
807  // PathClassLoader are supported).
808  bool FindClassInBaseDexClassLoader(ScopedObjectAccessAlreadyRunnable& soa,
809                                     Thread* self,
810                                     const char* descriptor,
811                                     size_t hash,
812                                     Handle<mirror::ClassLoader> class_loader,
813                                     ObjPtr<mirror::Class>* result)
814      REQUIRES_SHARED(Locks::mutator_lock_)
815      REQUIRES(!Locks::dex_lock_);
816
817  // Finds a class by its descriptor, returning NULL if it isn't wasn't loaded
818  // by the given 'class_loader'. Uses the provided hash for the descriptor.
819  mirror::Class* LookupClass(Thread* self,
820                             const char* descriptor,
821                             size_t hash,
822                             ObjPtr<mirror::ClassLoader> class_loader)
823      REQUIRES(!Locks::classlinker_classes_lock_)
824      REQUIRES_SHARED(Locks::mutator_lock_);
825
826  // Find a field by its field index.
827  ArtField* LookupResolvedField(uint32_t field_idx,
828                                ObjPtr<mirror::DexCache> dex_cache,
829                                ObjPtr<mirror::ClassLoader> class_loader,
830                                bool is_static)
831      REQUIRES_SHARED(Locks::mutator_lock_);
832
833  void RegisterDexFileLocked(const DexFile& dex_file,
834                             ObjPtr<mirror::DexCache> dex_cache,
835                             ObjPtr<mirror::ClassLoader> class_loader)
836      REQUIRES(Locks::dex_lock_)
837      REQUIRES_SHARED(Locks::mutator_lock_);
838  DexCacheData FindDexCacheDataLocked(const DexFile& dex_file)
839      REQUIRES(Locks::dex_lock_)
840      REQUIRES_SHARED(Locks::mutator_lock_);
841  static ObjPtr<mirror::DexCache> DecodeDexCache(Thread* self, const DexCacheData& data)
842      REQUIRES_SHARED(Locks::mutator_lock_);
843  // Called to ensure that the dex cache has been registered with the same class loader.
844  // If yes, returns the dex cache, otherwise throws InternalError and returns null.
845  ObjPtr<mirror::DexCache> EnsureSameClassLoader(Thread* self,
846                                                 ObjPtr<mirror::DexCache> dex_cache,
847                                                 const DexCacheData& data,
848                                                 ObjPtr<mirror::ClassLoader> class_loader)
849      REQUIRES(!Locks::dex_lock_)
850      REQUIRES_SHARED(Locks::mutator_lock_);
851
852  bool InitializeClass(Thread* self,
853                       Handle<mirror::Class> klass,
854                       bool can_run_clinit,
855                       bool can_init_parents)
856      REQUIRES_SHARED(Locks::mutator_lock_)
857      REQUIRES(!Locks::dex_lock_);
858  bool InitializeDefaultInterfaceRecursive(Thread* self,
859                                           Handle<mirror::Class> klass,
860                                           bool can_run_clinit,
861                                           bool can_init_parents)
862      REQUIRES(!Locks::dex_lock_)
863      REQUIRES_SHARED(Locks::mutator_lock_);
864  bool WaitForInitializeClass(Handle<mirror::Class> klass,
865                              Thread* self,
866                              ObjectLock<mirror::Class>& lock);
867  bool ValidateSuperClassDescriptors(Handle<mirror::Class> klass)
868      REQUIRES_SHARED(Locks::mutator_lock_);
869
870  bool IsSameDescriptorInDifferentClassContexts(Thread* self,
871                                                const char* descriptor,
872                                                Handle<mirror::ClassLoader> class_loader1,
873                                                Handle<mirror::ClassLoader> class_loader2)
874      REQUIRES_SHARED(Locks::mutator_lock_);
875
876  bool IsSameMethodSignatureInDifferentClassContexts(Thread* self,
877                                                     ArtMethod* method,
878                                                     ObjPtr<mirror::Class> klass1,
879                                                     ObjPtr<mirror::Class> klass2)
880      REQUIRES_SHARED(Locks::mutator_lock_);
881
882  bool LinkClass(Thread* self,
883                 const char* descriptor,
884                 Handle<mirror::Class> klass,
885                 Handle<mirror::ObjectArray<mirror::Class>> interfaces,
886                 MutableHandle<mirror::Class>* h_new_class_out)
887      REQUIRES_SHARED(Locks::mutator_lock_)
888      REQUIRES(!Locks::classlinker_classes_lock_);
889
890  bool LinkSuperClass(Handle<mirror::Class> klass)
891      REQUIRES_SHARED(Locks::mutator_lock_);
892
893  bool LoadSuperAndInterfaces(Handle<mirror::Class> klass, const DexFile& dex_file)
894      REQUIRES_SHARED(Locks::mutator_lock_)
895      REQUIRES(!Locks::dex_lock_);
896
897  bool LinkMethods(Thread* self,
898                   Handle<mirror::Class> klass,
899                   Handle<mirror::ObjectArray<mirror::Class>> interfaces,
900                   bool* out_new_conflict,
901                   ArtMethod** out_imt)
902      REQUIRES_SHARED(Locks::mutator_lock_);
903
904  // A wrapper class representing the result of a method translation used for linking methods and
905  // updating superclass default methods. For each method in a classes vtable there are 4 states it
906  // could be in:
907  // 1) No translation is necessary. In this case there is no MethodTranslation object for it. This
908  //    is the standard case and is true when the method is not overridable by a default method,
909  //    the class defines a concrete implementation of the method, the default method implementation
910  //    remains the same, or an abstract method stayed abstract.
911  // 2) The method must be translated to a different default method. We note this with
912  //    CreateTranslatedMethod.
913  // 3) The method must be replaced with a conflict method. This happens when a superclass
914  //    implements an interface with a default method and this class implements an unrelated
915  //    interface that also defines that default method. We note this with CreateConflictingMethod.
916  // 4) The method must be replaced with an abstract miranda method. This happens when a superclass
917  //    implements an interface with a default method and this class implements a subinterface of
918  //    the superclass's interface which declares the default method abstract. We note this with
919  //    CreateAbstractMethod.
920  //
921  // When a method translation is unnecessary (case #1), we don't put it into the
922  // default_translation maps. So an instance of MethodTranslation must be in one of #2-#4.
923  class MethodTranslation {
924   public:
925    // This slot must become a default conflict method.
926    static MethodTranslation CreateConflictingMethod() {
927      return MethodTranslation(Type::kConflict, /*translation*/nullptr);
928    }
929
930    // This slot must become an abstract method.
931    static MethodTranslation CreateAbstractMethod() {
932      return MethodTranslation(Type::kAbstract, /*translation*/nullptr);
933    }
934
935    // Use the given method as the current value for this vtable slot during translation.
936    static MethodTranslation CreateTranslatedMethod(ArtMethod* new_method) {
937      return MethodTranslation(Type::kTranslation, new_method);
938    }
939
940    // Returns true if this is a method that must become a conflict method.
941    bool IsInConflict() const {
942      return type_ == Type::kConflict;
943    }
944
945    // Returns true if this is a method that must become an abstract method.
946    bool IsAbstract() const {
947      return type_ == Type::kAbstract;
948    }
949
950    // Returns true if this is a method that must become a different method.
951    bool IsTranslation() const {
952      return type_ == Type::kTranslation;
953    }
954
955    // Get the translated version of this method.
956    ArtMethod* GetTranslation() const {
957      DCHECK(IsTranslation());
958      DCHECK(translation_ != nullptr);
959      return translation_;
960    }
961
962   private:
963    enum class Type {
964      kTranslation,
965      kConflict,
966      kAbstract,
967    };
968
969    MethodTranslation(Type type, ArtMethod* translation)
970        : translation_(translation), type_(type) {}
971
972    ArtMethod* const translation_;
973    const Type type_;
974  };
975
976  // Links the virtual methods for the given class and records any default methods that will need to
977  // be updated later.
978  //
979  // Arguments:
980  // * self - The current thread.
981  // * klass - class, whose vtable will be filled in.
982  // * default_translations - Vtable index to new method map.
983  //                          Any vtable entries that need to be updated with new default methods
984  //                          are stored into the default_translations map. The default_translations
985  //                          map is keyed on the vtable index that needs to be updated. We use this
986  //                          map because if we override a default method with another default
987  //                          method we need to update the vtable to point to the new method.
988  //                          Unfortunately since we copy the ArtMethod* we cannot just do a simple
989  //                          scan, we therefore store the vtable index's that might need to be
990  //                          updated with the method they will turn into.
991  // TODO This whole default_translations thing is very dirty. There should be a better way.
992  bool LinkVirtualMethods(
993        Thread* self,
994        Handle<mirror::Class> klass,
995        /*out*/std::unordered_map<size_t, MethodTranslation>* default_translations)
996      REQUIRES_SHARED(Locks::mutator_lock_);
997
998  // Sets up the interface lookup table (IFTable) in the correct order to allow searching for
999  // default methods.
1000  bool SetupInterfaceLookupTable(Thread* self,
1001                                 Handle<mirror::Class> klass,
1002                                 Handle<mirror::ObjectArray<mirror::Class>> interfaces)
1003      REQUIRES_SHARED(Locks::mutator_lock_);
1004
1005
1006  enum class DefaultMethodSearchResult {
1007    kDefaultFound,
1008    kAbstractFound,
1009    kDefaultConflict
1010  };
1011
1012  // Find the default method implementation for 'interface_method' in 'klass', if one exists.
1013  //
1014  // Arguments:
1015  // * self - The current thread.
1016  // * target_method - The method we are trying to find a default implementation for.
1017  // * klass - The class we are searching for a definition of target_method.
1018  // * out_default_method - The pointer we will store the found default method to on success.
1019  //
1020  // Return value:
1021  // * kDefaultFound - There were no conflicting method implementations found in the class while
1022  //                   searching for target_method. The default method implementation is stored into
1023  //                   out_default_method.
1024  // * kAbstractFound - There were no conflicting method implementations found in the class while
1025  //                   searching for target_method but no default implementation was found either.
1026  //                   out_default_method is set to null and the method should be considered not
1027  //                   implemented.
1028  // * kDefaultConflict - Conflicting method implementations were found when searching for
1029  //                      target_method. The value of *out_default_method is null.
1030  DefaultMethodSearchResult FindDefaultMethodImplementation(
1031      Thread* self,
1032      ArtMethod* target_method,
1033      Handle<mirror::Class> klass,
1034      /*out*/ArtMethod** out_default_method) const
1035      REQUIRES_SHARED(Locks::mutator_lock_);
1036
1037  // Sets the imt entries and fixes up the vtable for the given class by linking all the interface
1038  // methods. See LinkVirtualMethods for an explanation of what default_translations is.
1039  bool LinkInterfaceMethods(
1040      Thread* self,
1041      Handle<mirror::Class> klass,
1042      const std::unordered_map<size_t, MethodTranslation>& default_translations,
1043      bool* out_new_conflict,
1044      ArtMethod** out_imt)
1045      REQUIRES_SHARED(Locks::mutator_lock_);
1046
1047  bool LinkStaticFields(Thread* self, Handle<mirror::Class> klass, size_t* class_size)
1048      REQUIRES_SHARED(Locks::mutator_lock_);
1049  bool LinkInstanceFields(Thread* self, Handle<mirror::Class> klass)
1050      REQUIRES_SHARED(Locks::mutator_lock_);
1051  bool LinkFields(Thread* self, Handle<mirror::Class> klass, bool is_static, size_t* class_size)
1052      REQUIRES_SHARED(Locks::mutator_lock_);
1053  void CreateReferenceInstanceOffsets(Handle<mirror::Class> klass)
1054      REQUIRES_SHARED(Locks::mutator_lock_);
1055
1056  void CheckProxyConstructor(ArtMethod* constructor) const
1057      REQUIRES_SHARED(Locks::mutator_lock_);
1058  void CheckProxyMethod(ArtMethod* method, ArtMethod* prototype) const
1059      REQUIRES_SHARED(Locks::mutator_lock_);
1060
1061  size_t GetDexCacheCount() REQUIRES_SHARED(Locks::mutator_lock_, Locks::dex_lock_) {
1062    return dex_caches_.size();
1063  }
1064  const std::list<DexCacheData>& GetDexCachesData()
1065      REQUIRES_SHARED(Locks::mutator_lock_, Locks::dex_lock_) {
1066    return dex_caches_;
1067  }
1068
1069  void CreateProxyConstructor(Handle<mirror::Class> klass, ArtMethod* out)
1070      REQUIRES_SHARED(Locks::mutator_lock_);
1071  void CreateProxyMethod(Handle<mirror::Class> klass, ArtMethod* prototype, ArtMethod* out)
1072      REQUIRES_SHARED(Locks::mutator_lock_);
1073
1074  // Register a class loader and create its class table and allocator. Should not be called if
1075  // these are already created.
1076  void RegisterClassLoader(ObjPtr<mirror::ClassLoader> class_loader)
1077      REQUIRES_SHARED(Locks::mutator_lock_)
1078      REQUIRES(Locks::classlinker_classes_lock_);
1079
1080  // Insert a new class table if not found.
1081  ClassTable* InsertClassTableForClassLoader(ObjPtr<mirror::ClassLoader> class_loader)
1082      REQUIRES_SHARED(Locks::mutator_lock_)
1083      REQUIRES(Locks::classlinker_classes_lock_);
1084
1085  // EnsureResolved is called to make sure that a class in the class_table_ has been resolved
1086  // before returning it to the caller. Its the responsibility of the thread that placed the class
1087  // in the table to make it resolved. The thread doing resolution must notify on the class' lock
1088  // when resolution has occurred. This happens in mirror::Class::SetStatus. As resolution may
1089  // retire a class, the version of the class in the table is returned and this may differ from
1090  // the class passed in.
1091  mirror::Class* EnsureResolved(Thread* self, const char* descriptor, ObjPtr<mirror::Class> klass)
1092      WARN_UNUSED
1093      REQUIRES_SHARED(Locks::mutator_lock_)
1094      REQUIRES(!Locks::dex_lock_);
1095
1096  void FixupTemporaryDeclaringClass(ObjPtr<mirror::Class> temp_class,
1097                                    ObjPtr<mirror::Class> new_class)
1098      REQUIRES_SHARED(Locks::mutator_lock_);
1099
1100  void SetClassRoot(ClassRoot class_root, ObjPtr<mirror::Class> klass)
1101      REQUIRES_SHARED(Locks::mutator_lock_);
1102
1103  // Return the quick generic JNI stub for testing.
1104  const void* GetRuntimeQuickGenericJniStub() const;
1105
1106  bool CanWeInitializeClass(ObjPtr<mirror::Class> klass,
1107                            bool can_init_statics,
1108                            bool can_init_parents)
1109      REQUIRES_SHARED(Locks::mutator_lock_);
1110
1111  void UpdateClassMethods(ObjPtr<mirror::Class> klass,
1112                          LengthPrefixedArray<ArtMethod>* new_methods)
1113      REQUIRES_SHARED(Locks::mutator_lock_)
1114      REQUIRES(!Locks::classlinker_classes_lock_);
1115
1116  // new_class_set is the set of classes that were read from the class table section in the image.
1117  // If there was no class table section, it is null.
1118  bool UpdateAppImageClassLoadersAndDexCaches(
1119      gc::space::ImageSpace* space,
1120      Handle<mirror::ClassLoader> class_loader,
1121      Handle<mirror::ObjectArray<mirror::DexCache>> dex_caches,
1122      ClassTable::ClassSet* new_class_set,
1123      bool* out_forward_dex_cache_array,
1124      std::string* out_error_msg)
1125      REQUIRES(!Locks::dex_lock_)
1126      REQUIRES_SHARED(Locks::mutator_lock_);
1127
1128  // Check that c1 == FindSystemClass(self, descriptor). Abort with class dumps otherwise.
1129  void CheckSystemClass(Thread* self, Handle<mirror::Class> c1, const char* descriptor)
1130      REQUIRES(!Locks::dex_lock_)
1131      REQUIRES_SHARED(Locks::mutator_lock_);
1132
1133  // Allocate method arrays for interfaces.
1134  bool AllocateIfTableMethodArrays(Thread* self,
1135                                   Handle<mirror::Class> klass,
1136                                   Handle<mirror::IfTable> iftable)
1137      REQUIRES_SHARED(Locks::mutator_lock_);
1138
1139  // Sets imt_ref appropriately for LinkInterfaceMethods.
1140  // If there is no method in the imt location of imt_ref it will store the given method there.
1141  // Otherwise it will set the conflict method which will figure out which method to use during
1142  // runtime.
1143  void SetIMTRef(ArtMethod* unimplemented_method,
1144                 ArtMethod* imt_conflict_method,
1145                 ArtMethod* current_method,
1146                 /*out*/bool* new_conflict,
1147                 /*out*/ArtMethod** imt_ref) REQUIRES_SHARED(Locks::mutator_lock_);
1148
1149  void FillIMTFromIfTable(ObjPtr<mirror::IfTable> if_table,
1150                          ArtMethod* unimplemented_method,
1151                          ArtMethod* imt_conflict_method,
1152                          ObjPtr<mirror::Class> klass,
1153                          bool create_conflict_tables,
1154                          bool ignore_copied_methods,
1155                          /*out*/bool* new_conflict,
1156                          /*out*/ArtMethod** imt) REQUIRES_SHARED(Locks::mutator_lock_);
1157
1158  void FillImtFromSuperClass(Handle<mirror::Class> klass,
1159                             ArtMethod* unimplemented_method,
1160                             ArtMethod* imt_conflict_method,
1161                             bool* new_conflict,
1162                             ArtMethod** imt) REQUIRES_SHARED(Locks::mutator_lock_);
1163
1164  std::vector<const DexFile*> boot_class_path_;
1165  std::vector<std::unique_ptr<const DexFile>> boot_dex_files_;
1166
1167  // JNI weak globals and side data to allow dex caches to get unloaded. We lazily delete weak
1168  // globals when we register new dex files.
1169  std::list<DexCacheData> dex_caches_ GUARDED_BY(Locks::dex_lock_);
1170
1171  // This contains the class loaders which have class tables. It is populated by
1172  // InsertClassTableForClassLoader.
1173  std::list<ClassLoaderData> class_loaders_
1174      GUARDED_BY(Locks::classlinker_classes_lock_);
1175
1176  // Boot class path table. Since the class loader for this is null.
1177  ClassTable boot_class_table_ GUARDED_BY(Locks::classlinker_classes_lock_);
1178
1179  // New class roots, only used by CMS since the GC needs to mark these in the pause.
1180  std::vector<GcRoot<mirror::Class>> new_class_roots_ GUARDED_BY(Locks::classlinker_classes_lock_);
1181
1182  // Boot image oat files with new .bss GC roots to be visited in the pause by CMS.
1183  std::vector<const OatFile*> new_bss_roots_boot_oat_files_
1184      GUARDED_BY(Locks::classlinker_classes_lock_);
1185
1186  // Number of times we've searched dex caches for a class. After a certain number of misses we move
1187  // the classes into the class_table_ to avoid dex cache based searches.
1188  Atomic<uint32_t> failed_dex_cache_class_lookups_;
1189
1190  // Well known mirror::Class roots.
1191  GcRoot<mirror::ObjectArray<mirror::Class>> class_roots_;
1192
1193  // The interface table used by all arrays.
1194  GcRoot<mirror::IfTable> array_iftable_;
1195
1196  // A cache of the last FindArrayClass results. The cache serves to avoid creating array class
1197  // descriptors for the sake of performing FindClass.
1198  static constexpr size_t kFindArrayCacheSize = 16;
1199  GcRoot<mirror::Class> find_array_class_cache_[kFindArrayCacheSize];
1200  size_t find_array_class_cache_next_victim_;
1201
1202  bool init_done_;
1203  bool log_new_roots_ GUARDED_BY(Locks::classlinker_classes_lock_);
1204
1205  InternTable* intern_table_;
1206
1207  // Trampolines within the image the bounce to runtime entrypoints. Done so that there is a single
1208  // patch point within the image. TODO: make these proper relocations.
1209  const void* quick_resolution_trampoline_;
1210  const void* quick_imt_conflict_trampoline_;
1211  const void* quick_generic_jni_trampoline_;
1212  const void* quick_to_interpreter_bridge_trampoline_;
1213
1214  // Image pointer size.
1215  PointerSize image_pointer_size_;
1216
1217  class FindVirtualMethodHolderVisitor;
1218  friend struct CompilationHelper;  // For Compile in ImageTest.
1219  friend class ImageDumper;  // for DexLock
1220  friend class ImageWriter;  // for GetClassRoots
1221  friend class VMClassLoader;  // for LookupClass and FindClassInBaseDexClassLoader.
1222  friend class JniCompilerTest;  // for GetRuntimeQuickGenericJniStub
1223  friend class JniInternalTest;  // for GetRuntimeQuickGenericJniStub
1224  ART_FRIEND_TEST(ClassLinkerTest, RegisterDexFileName);  // for DexLock, and RegisterDexFileLocked
1225  ART_FRIEND_TEST(mirror::DexCacheMethodHandlesTest, Open);  // for AllocDexCache
1226  ART_FRIEND_TEST(mirror::DexCacheTest, Open);  // for AllocDexCache
1227  DISALLOW_COPY_AND_ASSIGN(ClassLinker);
1228};
1229
1230class ClassLoadCallback {
1231 public:
1232  virtual ~ClassLoadCallback() {}
1233
1234  // If set we will replace initial_class_def & initial_dex_file with the final versions. The
1235  // callback author is responsible for ensuring these are allocated in such a way they can be
1236  // cleaned up if another transformation occurs. Note that both must be set or null/unchanged on
1237  // return.
1238  // Note: the class may be temporary, in which case a following ClassPrepare event will be a
1239  //       different object. It is the listener's responsibility to handle this.
1240  // Note: This callback is rarely useful so a default implementation has been given that does
1241  //       nothing.
1242  virtual void ClassPreDefine(const char* descriptor ATTRIBUTE_UNUSED,
1243                              Handle<mirror::Class> klass ATTRIBUTE_UNUSED,
1244                              Handle<mirror::ClassLoader> class_loader ATTRIBUTE_UNUSED,
1245                              const DexFile& initial_dex_file ATTRIBUTE_UNUSED,
1246                              const DexFile::ClassDef& initial_class_def ATTRIBUTE_UNUSED,
1247                              /*out*/DexFile const** final_dex_file ATTRIBUTE_UNUSED,
1248                              /*out*/DexFile::ClassDef const** final_class_def ATTRIBUTE_UNUSED)
1249      REQUIRES_SHARED(Locks::mutator_lock_) {}
1250
1251  // A class has been loaded.
1252  // Note: the class may be temporary, in which case a following ClassPrepare event will be a
1253  //       different object. It is the listener's responsibility to handle this.
1254  virtual void ClassLoad(Handle<mirror::Class> klass) REQUIRES_SHARED(Locks::mutator_lock_) = 0;
1255
1256  // A class has been prepared, i.e., resolved. As the ClassLoad event might have been for a
1257  // temporary class, provide both the former and the current class.
1258  virtual void ClassPrepare(Handle<mirror::Class> temp_klass,
1259                            Handle<mirror::Class> klass) REQUIRES_SHARED(Locks::mutator_lock_) = 0;
1260};
1261
1262}  // namespace art
1263
1264#endif  // ART_RUNTIME_CLASS_LINKER_H_
1265