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