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