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