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