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 identity 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,
381                                    mirror::ClassLoader* class_loader)
382      REQUIRES(!dex_lock_)
383      SHARED_REQUIRES(Locks::mutator_lock_);
384  void RegisterDexFile(const DexFile& dex_file, Handle<mirror::DexCache> dex_cache)
385      REQUIRES(!dex_lock_)
386      SHARED_REQUIRES(Locks::mutator_lock_);
387
388  const std::vector<const DexFile*>& GetBootClassPath() {
389    return boot_class_path_;
390  }
391
392  void VisitClasses(ClassVisitor* visitor)
393      REQUIRES(!Locks::classlinker_classes_lock_)
394      SHARED_REQUIRES(Locks::mutator_lock_);
395
396  // Less efficient variant of VisitClasses that copies the class_table_ into secondary storage
397  // so that it can visit individual classes without holding the doesn't hold the
398  // Locks::classlinker_classes_lock_. As the Locks::classlinker_classes_lock_ isn't held this code
399  // can race with insertion and deletion of classes while the visitor is being called.
400  void VisitClassesWithoutClassesLock(ClassVisitor* visitor)
401      SHARED_REQUIRES(Locks::mutator_lock_)
402      REQUIRES(!dex_lock_);
403
404  void VisitClassRoots(RootVisitor* visitor, VisitRootFlags flags)
405      REQUIRES(!Locks::classlinker_classes_lock_)
406      SHARED_REQUIRES(Locks::mutator_lock_);
407  void VisitRoots(RootVisitor* visitor, VisitRootFlags flags)
408      REQUIRES(!dex_lock_)
409      SHARED_REQUIRES(Locks::mutator_lock_);
410
411  mirror::DexCache* FindDexCache(Thread* self,
412                                 const DexFile& dex_file,
413                                 bool allow_failure = false)
414      REQUIRES(!dex_lock_)
415      SHARED_REQUIRES(Locks::mutator_lock_);
416  void FixupDexCaches(ArtMethod* resolution_method)
417      REQUIRES(!dex_lock_)
418      SHARED_REQUIRES(Locks::mutator_lock_);
419
420  // Allocate an instance of a java.lang.Object.
421  mirror::Object* AllocObject(Thread* self)
422      SHARED_REQUIRES(Locks::mutator_lock_)
423      REQUIRES(!Roles::uninterruptible_);
424
425  // TODO: replace this with multiple methods that allocate the correct managed type.
426  template <class T>
427  mirror::ObjectArray<T>* AllocObjectArray(Thread* self, size_t length)
428      SHARED_REQUIRES(Locks::mutator_lock_)
429      REQUIRES(!Roles::uninterruptible_);
430
431  mirror::ObjectArray<mirror::Class>* AllocClassArray(Thread* self, size_t length)
432      SHARED_REQUIRES(Locks::mutator_lock_)
433      REQUIRES(!Roles::uninterruptible_);
434
435  mirror::ObjectArray<mirror::String>* AllocStringArray(Thread* self, size_t length)
436      SHARED_REQUIRES(Locks::mutator_lock_)
437      REQUIRES(!Roles::uninterruptible_);
438
439  LengthPrefixedArray<ArtField>* AllocArtFieldArray(Thread* self,
440                                                    LinearAlloc* allocator,
441                                                    size_t length);
442
443  LengthPrefixedArray<ArtMethod>* AllocArtMethodArray(Thread* self,
444                                                      LinearAlloc* allocator,
445                                                      size_t length);
446
447  mirror::PointerArray* AllocPointerArray(Thread* self, size_t length)
448      SHARED_REQUIRES(Locks::mutator_lock_)
449      REQUIRES(!Roles::uninterruptible_);
450
451  mirror::IfTable* AllocIfTable(Thread* self, size_t ifcount)
452      SHARED_REQUIRES(Locks::mutator_lock_)
453      REQUIRES(!Roles::uninterruptible_);
454
455  mirror::ObjectArray<mirror::StackTraceElement>* AllocStackTraceElementArray(Thread* self,
456                                                                              size_t length)
457      SHARED_REQUIRES(Locks::mutator_lock_)
458      REQUIRES(!Roles::uninterruptible_);
459
460  void VerifyClass(Thread* self,
461                   Handle<mirror::Class> klass,
462                   LogSeverity log_level = LogSeverity::NONE)
463      SHARED_REQUIRES(Locks::mutator_lock_)
464      REQUIRES(!dex_lock_);
465  bool VerifyClassUsingOatFile(const DexFile& dex_file,
466                               mirror::Class* klass,
467                               mirror::Class::Status& oat_file_class_status)
468      SHARED_REQUIRES(Locks::mutator_lock_)
469      REQUIRES(!dex_lock_);
470  void ResolveClassExceptionHandlerTypes(Handle<mirror::Class> klass)
471      SHARED_REQUIRES(Locks::mutator_lock_)
472      REQUIRES(!dex_lock_);
473  void ResolveMethodExceptionHandlerTypes(ArtMethod* klass)
474      SHARED_REQUIRES(Locks::mutator_lock_)
475      REQUIRES(!dex_lock_);
476
477  mirror::Class* CreateProxyClass(ScopedObjectAccessAlreadyRunnable& soa,
478                                  jstring name,
479                                  jobjectArray interfaces,
480                                  jobject loader,
481                                  jobjectArray methods,
482                                  jobjectArray throws)
483      SHARED_REQUIRES(Locks::mutator_lock_);
484  std::string GetDescriptorForProxy(mirror::Class* proxy_class)
485      SHARED_REQUIRES(Locks::mutator_lock_);
486  ArtMethod* FindMethodForProxy(mirror::Class* proxy_class, ArtMethod* proxy_method)
487      REQUIRES(!dex_lock_)
488      SHARED_REQUIRES(Locks::mutator_lock_);
489
490  // Get the oat code for a method when its class isn't yet initialized
491  const void* GetQuickOatCodeFor(ArtMethod* method)
492      SHARED_REQUIRES(Locks::mutator_lock_);
493
494  // Get compiled code for a method, return null if no code
495  // exists. This is unlike Get..OatCodeFor which will return a bridge
496  // or interpreter entrypoint.
497  const void* GetOatMethodQuickCodeFor(ArtMethod* method)
498      SHARED_REQUIRES(Locks::mutator_lock_);
499
500  const OatFile::OatMethod FindOatMethodFor(ArtMethod* method, bool* found)
501      SHARED_REQUIRES(Locks::mutator_lock_);
502
503  pid_t GetClassesLockOwner();  // For SignalCatcher.
504  pid_t GetDexLockOwner();  // For SignalCatcher.
505
506  mirror::Class* GetClassRoot(ClassRoot class_root) SHARED_REQUIRES(Locks::mutator_lock_);
507
508  static const char* GetClassRootDescriptor(ClassRoot class_root);
509
510  // Is the given entry point quick code to run the resolution stub?
511  bool IsQuickResolutionStub(const void* entry_point) const;
512
513  // Is the given entry point quick code to bridge into the interpreter?
514  bool IsQuickToInterpreterBridge(const void* entry_point) const;
515
516  // Is the given entry point quick code to run the generic JNI stub?
517  bool IsQuickGenericJniStub(const void* entry_point) const;
518
519  InternTable* GetInternTable() const {
520    return intern_table_;
521  }
522
523  // Set the entrypoints up for method to the given code.
524  void SetEntryPointsToCompiledCode(ArtMethod* method, const void* method_code) const
525      SHARED_REQUIRES(Locks::mutator_lock_);
526
527  // Set the entrypoints up for method to the enter the interpreter.
528  void SetEntryPointsToInterpreter(ArtMethod* method) const
529      SHARED_REQUIRES(Locks::mutator_lock_);
530
531  // Attempts to insert a class into a class table.  Returns null if
532  // the class was inserted, otherwise returns an existing class with
533  // the same descriptor and ClassLoader.
534  mirror::Class* InsertClass(const char* descriptor, mirror::Class* klass, size_t hash)
535      REQUIRES(!Locks::classlinker_classes_lock_)
536      SHARED_REQUIRES(Locks::mutator_lock_);
537
538  mirror::ObjectArray<mirror::Class>* GetClassRoots() SHARED_REQUIRES(Locks::mutator_lock_) {
539    mirror::ObjectArray<mirror::Class>* class_roots = class_roots_.Read();
540    DCHECK(class_roots != nullptr);
541    return class_roots;
542  }
543
544  // Move all of the boot image classes into the class table for faster lookups.
545  void AddBootImageClassesToClassTable()
546      REQUIRES(!Locks::classlinker_classes_lock_)
547      SHARED_REQUIRES(Locks::mutator_lock_);
548
549  // Add image classes to the class table.
550  void AddImageClassesToClassTable(std::vector<gc::space::ImageSpace*> image_spaces,
551                                   mirror::ClassLoader* class_loader)
552      REQUIRES(!Locks::classlinker_classes_lock_)
553      SHARED_REQUIRES(Locks::mutator_lock_);
554
555  // Move the class table to the pre-zygote table to reduce memory usage. This works by ensuring
556  // that no more classes are ever added to the pre zygote table which makes it that the pages
557  // always remain shared dirty instead of private dirty.
558  void MoveClassTableToPreZygote()
559      REQUIRES(!Locks::classlinker_classes_lock_)
560      SHARED_REQUIRES(Locks::mutator_lock_);
561
562  // Creates a GlobalRef PathClassLoader that can be used to load classes from the given dex files.
563  // Note: the objects are not completely set up. Do not use this outside of tests and the compiler.
564  jobject CreatePathClassLoader(Thread* self, const std::vector<const DexFile*>& dex_files)
565      SHARED_REQUIRES(Locks::mutator_lock_)
566      REQUIRES(!dex_lock_);
567
568  size_t GetImagePointerSize() const {
569    DCHECK(ValidPointerSize(image_pointer_size_)) << image_pointer_size_;
570    return image_pointer_size_;
571  }
572
573  // Used by image writer for checking.
574  bool ClassInClassTable(mirror::Class* klass)
575      REQUIRES(Locks::classlinker_classes_lock_)
576      SHARED_REQUIRES(Locks::mutator_lock_);
577
578  ArtMethod* CreateRuntimeMethod(LinearAlloc* linear_alloc);
579
580  // Clear the ArrayClass cache. This is necessary when cleaning up for the image, as the cache
581  // entries are roots, but potentially not image classes.
582  void DropFindArrayClassCache() SHARED_REQUIRES(Locks::mutator_lock_);
583
584  // Clean up class loaders, this needs to happen after JNI weak globals are cleared.
585  void CleanupClassLoaders()
586      REQUIRES(!Locks::classlinker_classes_lock_)
587      SHARED_REQUIRES(Locks::mutator_lock_);
588
589  // Unlike GetOrCreateAllocatorForClassLoader, GetAllocatorForClassLoader asserts that the
590  // allocator for this class loader is already created.
591  LinearAlloc* GetAllocatorForClassLoader(mirror::ClassLoader* class_loader)
592      SHARED_REQUIRES(Locks::mutator_lock_);
593
594  // Return the linear alloc for a class loader if it is already allocated, otherwise allocate and
595  // set it. TODO: Consider using a lock other than classlinker_classes_lock_.
596  LinearAlloc* GetOrCreateAllocatorForClassLoader(mirror::ClassLoader* class_loader)
597      REQUIRES(!Locks::classlinker_classes_lock_)
598      SHARED_REQUIRES(Locks::mutator_lock_);
599
600  // May be called with null class_loader due to legacy code. b/27954959
601  void InsertDexFileInToClassLoader(mirror::Object* dex_file, mirror::ClassLoader* class_loader)
602      REQUIRES(!Locks::classlinker_classes_lock_)
603      SHARED_REQUIRES(Locks::mutator_lock_);
604
605  static bool ShouldUseInterpreterEntrypoint(ArtMethod* method, const void* quick_code)
606      SHARED_REQUIRES(Locks::mutator_lock_);
607
608  std::set<DexCacheResolvedClasses> GetResolvedClasses(bool ignore_boot_classes)
609      REQUIRES(!dex_lock_);
610
611  std::unordered_set<std::string> GetClassDescriptorsForProfileKeys(
612      const std::set<DexCacheResolvedClasses>& classes)
613      REQUIRES(!dex_lock_);
614
615  static bool IsBootClassLoader(ScopedObjectAccessAlreadyRunnable& soa,
616                                mirror::ClassLoader* class_loader)
617      SHARED_REQUIRES(Locks::mutator_lock_);
618
619  ArtMethod* AddMethodToConflictTable(mirror::Class* klass,
620                                      ArtMethod* conflict_method,
621                                      ArtMethod* interface_method,
622                                      ArtMethod* method,
623                                      bool force_new_conflict_method)
624      SHARED_REQUIRES(Locks::mutator_lock_);
625
626  // Create a conflict table with a specified capacity.
627  ImtConflictTable* CreateImtConflictTable(size_t count, LinearAlloc* linear_alloc);
628
629  // Static version for when the class linker is not yet created.
630  static ImtConflictTable* CreateImtConflictTable(size_t count,
631                                                  LinearAlloc* linear_alloc,
632                                                  size_t pointer_size);
633
634
635  // Create the IMT and conflict tables for a class.
636  void FillIMTAndConflictTables(mirror::Class* klass) SHARED_REQUIRES(Locks::mutator_lock_);
637
638  // Clear class table strong roots (other than classes themselves). This is done by dex2oat to
639  // allow pruning dex caches.
640  void ClearClassTableStrongRoots() const
641      REQUIRES(!Locks::classlinker_classes_lock_)
642      SHARED_REQUIRES(Locks::mutator_lock_);
643
644  // Throw the class initialization failure recorded when first trying to initialize the given
645  // class.
646  void ThrowEarlierClassFailure(mirror::Class* c, bool wrap_in_no_class_def = false)
647      SHARED_REQUIRES(Locks::mutator_lock_)
648      REQUIRES(!dex_lock_);
649
650  // Get the actual holding class for a copied method. Pretty slow, don't call often.
651  mirror::Class* GetHoldingClassOfCopiedMethod(ArtMethod* method)
652      SHARED_REQUIRES(Locks::mutator_lock_);
653
654  struct DexCacheData {
655    // Weak root to the DexCache. Note: Do not decode this unnecessarily or else class unloading may
656    // not work properly.
657    jweak weak_root;
658    // The following two fields are caches to the DexCache's fields and here to avoid unnecessary
659    // jweak decode that triggers read barriers (and mark them alive unnecessarily and mess with
660    // class unloading.)
661    const DexFile* dex_file;
662    GcRoot<mirror::Class>* resolved_types;
663  };
664
665 private:
666  struct ClassLoaderData {
667    jweak weak_root;  // Weak root to enable class unloading.
668    ClassTable* class_table;
669    LinearAlloc* allocator;
670  };
671
672  // Ensures that the supertype of 'klass' ('supertype') is verified. Returns false and throws
673  // appropriate exceptions if verification failed hard. Returns true for successful verification or
674  // soft-failures.
675  bool AttemptSupertypeVerification(Thread* self,
676                                    Handle<mirror::Class> klass,
677                                    Handle<mirror::Class> supertype)
678      REQUIRES(!dex_lock_)
679      SHARED_REQUIRES(Locks::mutator_lock_);
680
681  static void DeleteClassLoader(Thread* self, const ClassLoaderData& data)
682      SHARED_REQUIRES(Locks::mutator_lock_);
683
684  void VisitClassLoaders(ClassLoaderVisitor* visitor) const
685      SHARED_REQUIRES(Locks::classlinker_classes_lock_, Locks::mutator_lock_);
686
687  void VisitClassesInternal(ClassVisitor* visitor)
688      SHARED_REQUIRES(Locks::classlinker_classes_lock_, Locks::mutator_lock_);
689
690  // Returns the number of zygote and image classes.
691  size_t NumZygoteClasses() const
692      REQUIRES(Locks::classlinker_classes_lock_)
693      SHARED_REQUIRES(Locks::mutator_lock_);
694
695  // Returns the number of non zygote nor image classes.
696  size_t NumNonZygoteClasses() const
697      REQUIRES(Locks::classlinker_classes_lock_)
698      SHARED_REQUIRES(Locks::mutator_lock_);
699
700  void FinishInit(Thread* self)
701      SHARED_REQUIRES(Locks::mutator_lock_)
702      REQUIRES(!dex_lock_, !Roles::uninterruptible_);
703
704  // For early bootstrapping by Init
705  mirror::Class* AllocClass(Thread* self, mirror::Class* java_lang_Class, uint32_t class_size)
706      SHARED_REQUIRES(Locks::mutator_lock_)
707      REQUIRES(!Roles::uninterruptible_);
708
709  // Alloc* convenience functions to avoid needing to pass in mirror::Class*
710  // values that are known to the ClassLinker such as
711  // kObjectArrayClass and kJavaLangString etc.
712  mirror::Class* AllocClass(Thread* self, uint32_t class_size)
713      SHARED_REQUIRES(Locks::mutator_lock_)
714      REQUIRES(!Roles::uninterruptible_);
715  mirror::DexCache* AllocDexCache(Thread* self,
716                                  const DexFile& dex_file,
717                                  LinearAlloc* linear_alloc)
718      SHARED_REQUIRES(Locks::mutator_lock_)
719      REQUIRES(!Roles::uninterruptible_);
720
721  mirror::Class* CreatePrimitiveClass(Thread* self, Primitive::Type type)
722      SHARED_REQUIRES(Locks::mutator_lock_)
723      REQUIRES(!Roles::uninterruptible_);
724  mirror::Class* InitializePrimitiveClass(mirror::Class* primitive_class, Primitive::Type type)
725      SHARED_REQUIRES(Locks::mutator_lock_)
726      REQUIRES(!Roles::uninterruptible_);
727
728  mirror::Class* CreateArrayClass(Thread* self,
729                                  const char* descriptor,
730                                  size_t hash,
731                                  Handle<mirror::ClassLoader> class_loader)
732      SHARED_REQUIRES(Locks::mutator_lock_)
733      REQUIRES(!dex_lock_, !Roles::uninterruptible_);
734
735  void AppendToBootClassPath(Thread* self, const DexFile& dex_file)
736      SHARED_REQUIRES(Locks::mutator_lock_)
737      REQUIRES(!dex_lock_);
738  void AppendToBootClassPath(const DexFile& dex_file, Handle<mirror::DexCache> dex_cache)
739      SHARED_REQUIRES(Locks::mutator_lock_)
740      REQUIRES(!dex_lock_);
741
742  // Precomputes size needed for Class, in the case of a non-temporary class this size must be
743  // sufficient to hold all static fields.
744  uint32_t SizeOfClassWithoutEmbeddedTables(const DexFile& dex_file,
745                                            const DexFile::ClassDef& dex_class_def);
746
747  // Setup the classloader, class def index, type idx so that we can insert this class in the class
748  // table.
749  void SetupClass(const DexFile& dex_file,
750                  const DexFile::ClassDef& dex_class_def,
751                  Handle<mirror::Class> klass,
752                  mirror::ClassLoader* class_loader)
753      SHARED_REQUIRES(Locks::mutator_lock_);
754
755  void LoadClass(Thread* self,
756                 const DexFile& dex_file,
757                 const DexFile::ClassDef& dex_class_def,
758                 Handle<mirror::Class> klass)
759      SHARED_REQUIRES(Locks::mutator_lock_);
760  void LoadClassMembers(Thread* self,
761                        const DexFile& dex_file,
762                        const uint8_t* class_data,
763                        Handle<mirror::Class> klass,
764                        const OatFile::OatClass* oat_class)
765      SHARED_REQUIRES(Locks::mutator_lock_);
766
767  void LoadField(const ClassDataItemIterator& it, Handle<mirror::Class> klass, ArtField* dst)
768      SHARED_REQUIRES(Locks::mutator_lock_);
769
770  void LoadMethod(Thread* self,
771                  const DexFile& dex_file,
772                  const ClassDataItemIterator& it,
773                  Handle<mirror::Class> klass, ArtMethod* dst)
774      SHARED_REQUIRES(Locks::mutator_lock_);
775
776  void FixupStaticTrampolines(mirror::Class* klass) SHARED_REQUIRES(Locks::mutator_lock_);
777
778  // Finds the associated oat class for a dex_file and descriptor. Returns an invalid OatClass on
779  // error and sets found to false.
780  OatFile::OatClass FindOatClass(const DexFile& dex_file, uint16_t class_def_idx, bool* found)
781      SHARED_REQUIRES(Locks::mutator_lock_);
782
783  void RegisterDexFileLocked(const DexFile& dex_file, Handle<mirror::DexCache> dex_cache)
784      REQUIRES(dex_lock_)
785      SHARED_REQUIRES(Locks::mutator_lock_);
786  mirror::DexCache* FindDexCacheLocked(Thread* self, const DexFile& dex_file, bool allow_failure)
787      REQUIRES(dex_lock_)
788      SHARED_REQUIRES(Locks::mutator_lock_);
789
790  bool InitializeClass(Thread* self,
791                       Handle<mirror::Class> klass,
792                       bool can_run_clinit,
793                       bool can_init_parents)
794      SHARED_REQUIRES(Locks::mutator_lock_)
795      REQUIRES(!dex_lock_);
796  bool InitializeDefaultInterfaceRecursive(Thread* self,
797                                           Handle<mirror::Class> klass,
798                                           bool can_run_clinit,
799                                           bool can_init_parents)
800      REQUIRES(!dex_lock_)
801      SHARED_REQUIRES(Locks::mutator_lock_);
802  bool WaitForInitializeClass(Handle<mirror::Class> klass,
803                              Thread* self,
804                              ObjectLock<mirror::Class>& lock);
805  bool ValidateSuperClassDescriptors(Handle<mirror::Class> klass)
806      SHARED_REQUIRES(Locks::mutator_lock_);
807
808  bool IsSameDescriptorInDifferentClassContexts(Thread* self,
809                                                const char* descriptor,
810                                                Handle<mirror::ClassLoader> class_loader1,
811                                                Handle<mirror::ClassLoader> class_loader2)
812      SHARED_REQUIRES(Locks::mutator_lock_);
813
814  bool IsSameMethodSignatureInDifferentClassContexts(Thread* self,
815                                                     ArtMethod* method,
816                                                     mirror::Class* klass1,
817                                                     mirror::Class* klass2)
818      SHARED_REQUIRES(Locks::mutator_lock_);
819
820  bool LinkClass(Thread* self,
821                 const char* descriptor,
822                 Handle<mirror::Class> klass,
823                 Handle<mirror::ObjectArray<mirror::Class>> interfaces,
824                 MutableHandle<mirror::Class>* h_new_class_out)
825      SHARED_REQUIRES(Locks::mutator_lock_)
826      REQUIRES(!Locks::classlinker_classes_lock_);
827
828  bool LinkSuperClass(Handle<mirror::Class> klass)
829      SHARED_REQUIRES(Locks::mutator_lock_);
830
831  bool LoadSuperAndInterfaces(Handle<mirror::Class> klass, const DexFile& dex_file)
832      SHARED_REQUIRES(Locks::mutator_lock_)
833      REQUIRES(!dex_lock_);
834
835  bool LinkMethods(Thread* self,
836                   Handle<mirror::Class> klass,
837                   Handle<mirror::ObjectArray<mirror::Class>> interfaces,
838                   bool* out_new_conflict,
839                   ArtMethod** out_imt)
840      SHARED_REQUIRES(Locks::mutator_lock_);
841
842  // Does anything needed to make sure that the compiler will not generate a direct invoke to this
843  // method. Should only be called on non-invokable methods.
844  void EnsureThrowsInvocationError(ArtMethod* method)
845      SHARED_REQUIRES(Locks::mutator_lock_);
846
847  // A wrapper class representing the result of a method translation used for linking methods and
848  // updating superclass default methods. For each method in a classes vtable there are 4 states it
849  // could be in:
850  // 1) No translation is necessary. In this case there is no MethodTranslation object for it. This
851  //    is the standard case and is true when the method is not overridable by a default method,
852  //    the class defines a concrete implementation of the method, the default method implementation
853  //    remains the same, or an abstract method stayed abstract.
854  // 2) The method must be translated to a different default method. We note this with
855  //    CreateTranslatedMethod.
856  // 3) The method must be replaced with a conflict method. This happens when a superclass
857  //    implements an interface with a default method and this class implements an unrelated
858  //    interface that also defines that default method. We note this with CreateConflictingMethod.
859  // 4) The method must be replaced with an abstract miranda method. This happens when a superclass
860  //    implements an interface with a default method and this class implements a subinterface of
861  //    the superclass's interface which declares the default method abstract. We note this with
862  //    CreateAbstractMethod.
863  //
864  // When a method translation is unnecessary (case #1), we don't put it into the
865  // default_translation maps. So an instance of MethodTranslation must be in one of #2-#4.
866  class MethodTranslation {
867   public:
868    // This slot must become a default conflict method.
869    static MethodTranslation CreateConflictingMethod() {
870      return MethodTranslation(Type::kConflict, /*translation*/nullptr);
871    }
872
873    // This slot must become an abstract method.
874    static MethodTranslation CreateAbstractMethod() {
875      return MethodTranslation(Type::kAbstract, /*translation*/nullptr);
876    }
877
878    // Use the given method as the current value for this vtable slot during translation.
879    static MethodTranslation CreateTranslatedMethod(ArtMethod* new_method) {
880      return MethodTranslation(Type::kTranslation, new_method);
881    }
882
883    // Returns true if this is a method that must become a conflict method.
884    bool IsInConflict() const {
885      return type_ == Type::kConflict;
886    }
887
888    // Returns true if this is a method that must become an abstract method.
889    bool IsAbstract() const {
890      return type_ == Type::kAbstract;
891    }
892
893    // Returns true if this is a method that must become a different method.
894    bool IsTranslation() const {
895      return type_ == Type::kTranslation;
896    }
897
898    // Get the translated version of this method.
899    ArtMethod* GetTranslation() const {
900      DCHECK(IsTranslation());
901      DCHECK(translation_ != nullptr);
902      return translation_;
903    }
904
905   private:
906    enum class Type {
907      kTranslation,
908      kConflict,
909      kAbstract,
910    };
911
912    MethodTranslation(Type type, ArtMethod* translation)
913        : translation_(translation), type_(type) {}
914
915    ArtMethod* const translation_;
916    const Type type_;
917  };
918
919  // Links the virtual methods for the given class and records any default methods that will need to
920  // be updated later.
921  //
922  // Arguments:
923  // * self - The current thread.
924  // * klass - class, whose vtable will be filled in.
925  // * default_translations - Vtable index to new method map.
926  //                          Any vtable entries that need to be updated with new default methods
927  //                          are stored into the default_translations map. The default_translations
928  //                          map is keyed on the vtable index that needs to be updated. We use this
929  //                          map because if we override a default method with another default
930  //                          method we need to update the vtable to point to the new method.
931  //                          Unfortunately since we copy the ArtMethod* we cannot just do a simple
932  //                          scan, we therefore store the vtable index's that might need to be
933  //                          updated with the method they will turn into.
934  // TODO This whole default_translations thing is very dirty. There should be a better way.
935  bool LinkVirtualMethods(
936        Thread* self,
937        Handle<mirror::Class> klass,
938        /*out*/std::unordered_map<size_t, MethodTranslation>* default_translations)
939      SHARED_REQUIRES(Locks::mutator_lock_);
940
941  // Sets up the interface lookup table (IFTable) in the correct order to allow searching for
942  // default methods.
943  bool SetupInterfaceLookupTable(Thread* self,
944                                 Handle<mirror::Class> klass,
945                                 Handle<mirror::ObjectArray<mirror::Class>> interfaces)
946      SHARED_REQUIRES(Locks::mutator_lock_);
947
948
949  enum class DefaultMethodSearchResult {
950    kDefaultFound,
951    kAbstractFound,
952    kDefaultConflict
953  };
954
955  // Find the default method implementation for 'interface_method' in 'klass', if one exists.
956  //
957  // Arguments:
958  // * self - The current thread.
959  // * target_method - The method we are trying to find a default implementation for.
960  // * klass - The class we are searching for a definition of target_method.
961  // * out_default_method - The pointer we will store the found default method to on success.
962  //
963  // Return value:
964  // * kDefaultFound - There were no conflicting method implementations found in the class while
965  //                   searching for target_method. The default method implementation is stored into
966  //                   out_default_method.
967  // * kAbstractFound - There were no conflicting method implementations found in the class while
968  //                   searching for target_method but no default implementation was found either.
969  //                   out_default_method is set to null and the method should be considered not
970  //                   implemented.
971  // * kDefaultConflict - Conflicting method implementations were found when searching for
972  //                      target_method. The value of *out_default_method is null.
973  DefaultMethodSearchResult FindDefaultMethodImplementation(
974      Thread* self,
975      ArtMethod* target_method,
976      Handle<mirror::Class> klass,
977      /*out*/ArtMethod** out_default_method) const
978      SHARED_REQUIRES(Locks::mutator_lock_);
979
980  // Sets the imt entries and fixes up the vtable for the given class by linking all the interface
981  // methods. See LinkVirtualMethods for an explanation of what default_translations is.
982  bool LinkInterfaceMethods(
983      Thread* self,
984      Handle<mirror::Class> klass,
985      const std::unordered_map<size_t, MethodTranslation>& default_translations,
986      bool* out_new_conflict,
987      ArtMethod** out_imt)
988      SHARED_REQUIRES(Locks::mutator_lock_);
989
990  bool LinkStaticFields(Thread* self, Handle<mirror::Class> klass, size_t* class_size)
991      SHARED_REQUIRES(Locks::mutator_lock_);
992  bool LinkInstanceFields(Thread* self, Handle<mirror::Class> klass)
993      SHARED_REQUIRES(Locks::mutator_lock_);
994  bool LinkFields(Thread* self, Handle<mirror::Class> klass, bool is_static, size_t* class_size)
995      SHARED_REQUIRES(Locks::mutator_lock_);
996  void LinkCode(ArtMethod* method,
997                const OatFile::OatClass* oat_class,
998                uint32_t class_def_method_index)
999      SHARED_REQUIRES(Locks::mutator_lock_);
1000  void CreateReferenceInstanceOffsets(Handle<mirror::Class> klass)
1001      SHARED_REQUIRES(Locks::mutator_lock_);
1002
1003  void CheckProxyConstructor(ArtMethod* constructor) const
1004      SHARED_REQUIRES(Locks::mutator_lock_);
1005  void CheckProxyMethod(ArtMethod* method, ArtMethod* prototype) const
1006      SHARED_REQUIRES(Locks::mutator_lock_);
1007
1008  // For use by ImageWriter to find DexCaches for its roots
1009  ReaderWriterMutex* DexLock()
1010      SHARED_REQUIRES(Locks::mutator_lock_)
1011      LOCK_RETURNED(dex_lock_) {
1012    return &dex_lock_;
1013  }
1014  size_t GetDexCacheCount() SHARED_REQUIRES(Locks::mutator_lock_, dex_lock_) {
1015    return dex_caches_.size();
1016  }
1017  const std::list<DexCacheData>& GetDexCachesData()
1018      SHARED_REQUIRES(Locks::mutator_lock_, dex_lock_) {
1019    return dex_caches_;
1020  }
1021
1022  void CreateProxyConstructor(Handle<mirror::Class> klass, ArtMethod* out)
1023      SHARED_REQUIRES(Locks::mutator_lock_);
1024  void CreateProxyMethod(Handle<mirror::Class> klass, ArtMethod* prototype, ArtMethod* out)
1025      SHARED_REQUIRES(Locks::mutator_lock_);
1026
1027  // Ensures that methods have the kAccSkipAccessChecks bit set. We use the
1028  // kAccVerificationAttempted bit on the class access flags to determine whether this has been done
1029  // before.
1030  void EnsureSkipAccessChecksMethods(Handle<mirror::Class> c)
1031      SHARED_REQUIRES(Locks::mutator_lock_);
1032
1033  mirror::Class* LookupClassFromBootImage(const char* descriptor)
1034      SHARED_REQUIRES(Locks::mutator_lock_);
1035
1036  // Register a class loader and create its class table and allocator. Should not be called if
1037  // these are already created.
1038  void RegisterClassLoader(mirror::ClassLoader* class_loader)
1039      SHARED_REQUIRES(Locks::mutator_lock_)
1040      REQUIRES(Locks::classlinker_classes_lock_);
1041
1042  // Returns null if not found.
1043  ClassTable* ClassTableForClassLoader(mirror::ClassLoader* class_loader)
1044      SHARED_REQUIRES(Locks::mutator_lock_);
1045
1046  // Insert a new class table if not found.
1047  ClassTable* InsertClassTableForClassLoader(mirror::ClassLoader* class_loader)
1048      SHARED_REQUIRES(Locks::mutator_lock_)
1049      REQUIRES(Locks::classlinker_classes_lock_);
1050
1051  // EnsureResolved is called to make sure that a class in the class_table_ has been resolved
1052  // before returning it to the caller. Its the responsibility of the thread that placed the class
1053  // in the table to make it resolved. The thread doing resolution must notify on the class' lock
1054  // when resolution has occurred. This happens in mirror::Class::SetStatus. As resolution may
1055  // retire a class, the version of the class in the table is returned and this may differ from
1056  // the class passed in.
1057  mirror::Class* EnsureResolved(Thread* self, const char* descriptor, mirror::Class* klass)
1058      WARN_UNUSED
1059      SHARED_REQUIRES(Locks::mutator_lock_)
1060      REQUIRES(!dex_lock_);
1061
1062  void FixupTemporaryDeclaringClass(mirror::Class* temp_class, mirror::Class* new_class)
1063      SHARED_REQUIRES(Locks::mutator_lock_);
1064
1065  void SetClassRoot(ClassRoot class_root, mirror::Class* klass)
1066      SHARED_REQUIRES(Locks::mutator_lock_);
1067
1068  // Return the quick generic JNI stub for testing.
1069  const void* GetRuntimeQuickGenericJniStub() const;
1070
1071  bool CanWeInitializeClass(mirror::Class* klass, bool can_init_statics, bool can_init_parents)
1072      SHARED_REQUIRES(Locks::mutator_lock_);
1073
1074  void UpdateClassMethods(mirror::Class* klass,
1075                          LengthPrefixedArray<ArtMethod>* new_methods)
1076      SHARED_REQUIRES(Locks::mutator_lock_)
1077      REQUIRES(!Locks::classlinker_classes_lock_);
1078
1079  // new_class_set is the set of classes that were read from the class table section in the image.
1080  // If there was no class table section, it is null.
1081  bool UpdateAppImageClassLoadersAndDexCaches(
1082      gc::space::ImageSpace* space,
1083      Handle<mirror::ClassLoader> class_loader,
1084      Handle<mirror::ObjectArray<mirror::DexCache>> dex_caches,
1085      ClassTable::ClassSet* new_class_set,
1086      bool* out_forward_dex_cache_array,
1087      std::string* out_error_msg)
1088      REQUIRES(!dex_lock_)
1089      SHARED_REQUIRES(Locks::mutator_lock_);
1090
1091  // Check that c1 == FindSystemClass(self, descriptor). Abort with class dumps otherwise.
1092  void CheckSystemClass(Thread* self, Handle<mirror::Class> c1, const char* descriptor)
1093      REQUIRES(!dex_lock_)
1094      SHARED_REQUIRES(Locks::mutator_lock_);
1095
1096  // Sets imt_ref appropriately for LinkInterfaceMethods.
1097  // If there is no method in the imt location of imt_ref it will store the given method there.
1098  // Otherwise it will set the conflict method which will figure out which method to use during
1099  // runtime.
1100  void SetIMTRef(ArtMethod* unimplemented_method,
1101                 ArtMethod* imt_conflict_method,
1102                 ArtMethod* current_method,
1103                 /*out*/bool* new_conflict,
1104                 /*out*/ArtMethod** imt_ref) SHARED_REQUIRES(Locks::mutator_lock_);
1105
1106  void FillIMTFromIfTable(mirror::IfTable* if_table,
1107                          ArtMethod* unimplemented_method,
1108                          ArtMethod* imt_conflict_method,
1109                          mirror::Class* klass,
1110                          bool create_conflict_tables,
1111                          bool ignore_copied_methods,
1112                          /*out*/bool* new_conflict,
1113                          /*out*/ArtMethod** imt) SHARED_REQUIRES(Locks::mutator_lock_);
1114
1115  void FillImtFromSuperClass(Handle<mirror::Class> klass,
1116                             ArtMethod* unimplemented_method,
1117                             ArtMethod* imt_conflict_method,
1118                             bool* new_conflict,
1119                             ArtMethod** imt) SHARED_REQUIRES(Locks::mutator_lock_);
1120
1121  std::vector<const DexFile*> boot_class_path_;
1122  std::vector<std::unique_ptr<const DexFile>> boot_dex_files_;
1123
1124  mutable ReaderWriterMutex dex_lock_ DEFAULT_MUTEX_ACQUIRED_AFTER;
1125  // JNI weak globals and side data to allow dex caches to get unloaded. We lazily delete weak
1126  // globals when we register new dex files.
1127  std::list<DexCacheData> dex_caches_ GUARDED_BY(dex_lock_);
1128
1129  // This contains the class loaders which have class tables. It is populated by
1130  // InsertClassTableForClassLoader.
1131  std::list<ClassLoaderData> class_loaders_
1132      GUARDED_BY(Locks::classlinker_classes_lock_);
1133
1134  // Boot class path table. Since the class loader for this is null.
1135  ClassTable boot_class_table_ GUARDED_BY(Locks::classlinker_classes_lock_);
1136
1137  // New class roots, only used by CMS since the GC needs to mark these in the pause.
1138  std::vector<GcRoot<mirror::Class>> new_class_roots_ GUARDED_BY(Locks::classlinker_classes_lock_);
1139
1140  // Do we need to search dex caches to find boot image classes?
1141  bool dex_cache_boot_image_class_lookup_required_;
1142  // Number of times we've searched dex caches for a class. After a certain number of misses we move
1143  // the classes into the class_table_ to avoid dex cache based searches.
1144  Atomic<uint32_t> failed_dex_cache_class_lookups_;
1145
1146  // Well known mirror::Class roots.
1147  GcRoot<mirror::ObjectArray<mirror::Class>> class_roots_;
1148
1149  // The interface table used by all arrays.
1150  GcRoot<mirror::IfTable> array_iftable_;
1151
1152  // A cache of the last FindArrayClass results. The cache serves to avoid creating array class
1153  // descriptors for the sake of performing FindClass.
1154  static constexpr size_t kFindArrayCacheSize = 16;
1155  GcRoot<mirror::Class> find_array_class_cache_[kFindArrayCacheSize];
1156  size_t find_array_class_cache_next_victim_;
1157
1158  bool init_done_;
1159  bool log_new_class_table_roots_ GUARDED_BY(Locks::classlinker_classes_lock_);
1160
1161  InternTable* intern_table_;
1162
1163  // Trampolines within the image the bounce to runtime entrypoints. Done so that there is a single
1164  // patch point within the image. TODO: make these proper relocations.
1165  const void* quick_resolution_trampoline_;
1166  const void* quick_imt_conflict_trampoline_;
1167  const void* quick_generic_jni_trampoline_;
1168  const void* quick_to_interpreter_bridge_trampoline_;
1169
1170  // Image pointer size.
1171  size_t image_pointer_size_;
1172
1173  class FindVirtualMethodHolderVisitor;
1174  friend struct CompilationHelper;  // For Compile in ImageTest.
1175  friend class ImageDumper;  // for DexLock
1176  friend class ImageWriter;  // for GetClassRoots
1177  friend class JniCompilerTest;  // for GetRuntimeQuickGenericJniStub
1178  friend class JniInternalTest;  // for GetRuntimeQuickGenericJniStub
1179  ART_FRIEND_TEST(ClassLinkerTest, RegisterDexFileName);  // for DexLock, and RegisterDexFileLocked
1180  ART_FRIEND_TEST(mirror::DexCacheTest, Open);  // for AllocDexCache
1181  DISALLOW_COPY_AND_ASSIGN(ClassLinker);
1182};
1183
1184}  // namespace art
1185
1186#endif  // ART_RUNTIME_CLASS_LINKER_H_
1187