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