• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
39 namespace art {
40 
41 namespace gc {
42 namespace space {
43   class ImageSpace;
44 }  // namespace space
45 }  // namespace gc
46 namespace 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 
56 class ImtConflictTable;
57 template<class T> class Handle;
58 template<class T> class MutableHandle;
59 class InternTable;
60 template<class T> class ObjectLock;
61 class Runtime;
62 class ScopedObjectAccessAlreadyRunnable;
63 template<size_t kNumReferences> class PACKED(4) StackHandleScope;
64 
65 enum VisitRootFlags : uint8_t;
66 
67 class ClassVisitor {
68  public:
~ClassVisitor()69   virtual ~ClassVisitor() {}
70   // Return true to continue visiting.
71   virtual bool operator()(mirror::Class* klass) = 0;
72 };
73 
74 class ClassLoaderVisitor {
75  public:
~ClassLoaderVisitor()76   virtual ~ClassLoaderVisitor() {}
77   virtual void Visit(mirror::ClassLoader* class_loader)
78       SHARED_REQUIRES(Locks::classlinker_classes_lock_, Locks::mutator_lock_) = 0;
79 };
80 
81 class 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.
IsInitialized()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 
GetBootClassPath()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 
GetInternTable()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 
GetClassRoots()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 
GetImagePointerSize()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.
CreateConflictingMethod()869     static MethodTranslation CreateConflictingMethod() {
870       return MethodTranslation(Type::kConflict, /*translation*/nullptr);
871     }
872 
873     // This slot must become an abstract method.
CreateAbstractMethod()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.
CreateTranslatedMethod(ArtMethod * new_method)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.
IsInConflict()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.
IsAbstract()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.
IsTranslation()894     bool IsTranslation() const {
895       return type_ == Type::kTranslation;
896     }
897 
898     // Get the translated version of this method.
GetTranslation()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 
MethodTranslation(Type type,ArtMethod * translation)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
DexLock()1009   ReaderWriterMutex* DexLock()
1010       SHARED_REQUIRES(Locks::mutator_lock_)
1011       LOCK_RETURNED(dex_lock_) {
1012     return &dex_lock_;
1013   }
GetDexCacheCount()1014   size_t GetDexCacheCount() SHARED_REQUIRES(Locks::mutator_lock_, dex_lock_) {
1015     return dex_caches_.size();
1016   }
GetDexCachesData()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