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