Home | History | Annotate | Download | only in runtime
      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:
     69   virtual ~ClassVisitor() {}
     70   // Return true to continue visiting.
     71   virtual bool operator()(mirror::Class* klass) = 0;
     72 };
     73 
     74 class 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 
     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.
    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