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