class_linker.h revision 5872d7cd6ceffe67550d0b021191ec66f1a34c5d
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 identity 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 SHARED_REQUIRES(Locks::mutator_lock_); 616 617 ArtMethod* AddMethodToConflictTable(mirror::Class* klass, 618 ArtMethod* conflict_method, 619 ArtMethod* interface_method, 620 ArtMethod* method, 621 bool force_new_conflict_method) 622 SHARED_REQUIRES(Locks::mutator_lock_); 623 624 struct DexCacheData { 625 // Weak root to the DexCache. Note: Do not decode this unnecessarily or else class unloading may 626 // not work properly. 627 jweak weak_root; 628 // The following two fields are caches to the DexCache's fields and here to avoid unnecessary 629 // jweak decode that triggers read barriers (and mark them alive unnecessarily and mess with 630 // class unloading.) 631 const DexFile* dex_file; 632 GcRoot<mirror::Class>* resolved_types; 633 }; 634 635 private: 636 struct ClassLoaderData { 637 jweak weak_root; // Weak root to enable class unloading. 638 ClassTable* class_table; 639 LinearAlloc* allocator; 640 }; 641 642 // Ensures that the supertype of 'klass' ('supertype') is verified. Returns false and throws 643 // appropriate exceptions if verification failed hard. Returns true for successful verification or 644 // soft-failures. 645 bool AttemptSupertypeVerification(Thread* self, 646 Handle<mirror::Class> klass, 647 Handle<mirror::Class> supertype) 648 REQUIRES(!dex_lock_) 649 SHARED_REQUIRES(Locks::mutator_lock_); 650 651 static void DeleteClassLoader(Thread* self, const ClassLoaderData& data) 652 REQUIRES(Locks::classlinker_classes_lock_) 653 SHARED_REQUIRES(Locks::mutator_lock_); 654 655 void VisitClassLoaders(ClassLoaderVisitor* visitor) const 656 SHARED_REQUIRES(Locks::classlinker_classes_lock_, Locks::mutator_lock_); 657 658 void VisitClassesInternal(ClassVisitor* visitor) 659 SHARED_REQUIRES(Locks::classlinker_classes_lock_, Locks::mutator_lock_); 660 661 // Returns the number of zygote and image classes. 662 size_t NumZygoteClasses() const 663 REQUIRES(Locks::classlinker_classes_lock_) 664 SHARED_REQUIRES(Locks::mutator_lock_); 665 666 // Returns the number of non zygote nor image classes. 667 size_t NumNonZygoteClasses() const 668 REQUIRES(Locks::classlinker_classes_lock_) 669 SHARED_REQUIRES(Locks::mutator_lock_); 670 671 void FinishInit(Thread* self) 672 SHARED_REQUIRES(Locks::mutator_lock_) 673 REQUIRES(!dex_lock_, !Roles::uninterruptible_); 674 675 // For early bootstrapping by Init 676 mirror::Class* AllocClass(Thread* self, mirror::Class* java_lang_Class, uint32_t class_size) 677 SHARED_REQUIRES(Locks::mutator_lock_) 678 REQUIRES(!Roles::uninterruptible_); 679 680 // Alloc* convenience functions to avoid needing to pass in mirror::Class* 681 // values that are known to the ClassLinker such as 682 // kObjectArrayClass and kJavaLangString etc. 683 mirror::Class* AllocClass(Thread* self, uint32_t class_size) 684 SHARED_REQUIRES(Locks::mutator_lock_) 685 REQUIRES(!Roles::uninterruptible_); 686 mirror::DexCache* AllocDexCache(Thread* self, 687 const DexFile& dex_file, 688 LinearAlloc* linear_alloc) 689 SHARED_REQUIRES(Locks::mutator_lock_) 690 REQUIRES(!Roles::uninterruptible_); 691 692 mirror::Class* CreatePrimitiveClass(Thread* self, Primitive::Type type) 693 SHARED_REQUIRES(Locks::mutator_lock_) 694 REQUIRES(!Roles::uninterruptible_); 695 mirror::Class* InitializePrimitiveClass(mirror::Class* primitive_class, Primitive::Type type) 696 SHARED_REQUIRES(Locks::mutator_lock_) 697 REQUIRES(!Roles::uninterruptible_); 698 699 mirror::Class* CreateArrayClass(Thread* self, 700 const char* descriptor, 701 size_t hash, 702 Handle<mirror::ClassLoader> class_loader) 703 SHARED_REQUIRES(Locks::mutator_lock_) 704 REQUIRES(!dex_lock_, !Roles::uninterruptible_); 705 706 void AppendToBootClassPath(Thread* self, const DexFile& dex_file) 707 SHARED_REQUIRES(Locks::mutator_lock_) 708 REQUIRES(!dex_lock_); 709 void AppendToBootClassPath(const DexFile& dex_file, Handle<mirror::DexCache> dex_cache) 710 SHARED_REQUIRES(Locks::mutator_lock_) 711 REQUIRES(!dex_lock_); 712 713 // Precomputes size needed for Class, in the case of a non-temporary class this size must be 714 // sufficient to hold all static fields. 715 uint32_t SizeOfClassWithoutEmbeddedTables(const DexFile& dex_file, 716 const DexFile::ClassDef& dex_class_def); 717 718 // Setup the classloader, class def index, type idx so that we can insert this class in the class 719 // table. 720 void SetupClass(const DexFile& dex_file, 721 const DexFile::ClassDef& dex_class_def, 722 Handle<mirror::Class> klass, 723 mirror::ClassLoader* class_loader) 724 SHARED_REQUIRES(Locks::mutator_lock_); 725 726 void LoadClass(Thread* self, 727 const DexFile& dex_file, 728 const DexFile::ClassDef& dex_class_def, 729 Handle<mirror::Class> klass) 730 SHARED_REQUIRES(Locks::mutator_lock_); 731 void LoadClassMembers(Thread* self, 732 const DexFile& dex_file, 733 const uint8_t* class_data, 734 Handle<mirror::Class> klass, 735 const OatFile::OatClass* oat_class) 736 SHARED_REQUIRES(Locks::mutator_lock_); 737 738 void LoadField(const ClassDataItemIterator& it, Handle<mirror::Class> klass, ArtField* dst) 739 SHARED_REQUIRES(Locks::mutator_lock_); 740 741 void LoadMethod(Thread* self, 742 const DexFile& dex_file, 743 const ClassDataItemIterator& it, 744 Handle<mirror::Class> klass, ArtMethod* dst) 745 SHARED_REQUIRES(Locks::mutator_lock_); 746 747 void FixupStaticTrampolines(mirror::Class* klass) SHARED_REQUIRES(Locks::mutator_lock_); 748 749 // Finds the associated oat class for a dex_file and descriptor. Returns an invalid OatClass on 750 // error and sets found to false. 751 OatFile::OatClass FindOatClass(const DexFile& dex_file, uint16_t class_def_idx, bool* found) 752 SHARED_REQUIRES(Locks::mutator_lock_); 753 754 void RegisterDexFileLocked(const DexFile& dex_file, Handle<mirror::DexCache> dex_cache) 755 REQUIRES(dex_lock_) 756 SHARED_REQUIRES(Locks::mutator_lock_); 757 mirror::DexCache* FindDexCacheLocked(Thread* self, const DexFile& dex_file, bool allow_failure) 758 REQUIRES(dex_lock_) 759 SHARED_REQUIRES(Locks::mutator_lock_); 760 761 bool InitializeClass(Thread* self, 762 Handle<mirror::Class> klass, 763 bool can_run_clinit, 764 bool can_init_parents) 765 SHARED_REQUIRES(Locks::mutator_lock_) 766 REQUIRES(!dex_lock_); 767 bool InitializeDefaultInterfaceRecursive(Thread* self, 768 Handle<mirror::Class> klass, 769 bool can_run_clinit, 770 bool can_init_parents) 771 REQUIRES(!dex_lock_) 772 SHARED_REQUIRES(Locks::mutator_lock_); 773 bool WaitForInitializeClass(Handle<mirror::Class> klass, 774 Thread* self, 775 ObjectLock<mirror::Class>& lock); 776 bool ValidateSuperClassDescriptors(Handle<mirror::Class> klass) 777 SHARED_REQUIRES(Locks::mutator_lock_); 778 779 bool IsSameDescriptorInDifferentClassContexts(Thread* self, 780 const char* descriptor, 781 Handle<mirror::ClassLoader> class_loader1, 782 Handle<mirror::ClassLoader> class_loader2) 783 SHARED_REQUIRES(Locks::mutator_lock_); 784 785 bool IsSameMethodSignatureInDifferentClassContexts(Thread* self, 786 ArtMethod* method, 787 mirror::Class* klass1, 788 mirror::Class* klass2) 789 SHARED_REQUIRES(Locks::mutator_lock_); 790 791 bool LinkClass(Thread* self, 792 const char* descriptor, 793 Handle<mirror::Class> klass, 794 Handle<mirror::ObjectArray<mirror::Class>> interfaces, 795 MutableHandle<mirror::Class>* h_new_class_out) 796 SHARED_REQUIRES(Locks::mutator_lock_) 797 REQUIRES(!Locks::classlinker_classes_lock_); 798 799 bool LinkSuperClass(Handle<mirror::Class> klass) 800 SHARED_REQUIRES(Locks::mutator_lock_); 801 802 bool LoadSuperAndInterfaces(Handle<mirror::Class> klass, const DexFile& dex_file) 803 SHARED_REQUIRES(Locks::mutator_lock_) 804 REQUIRES(!dex_lock_); 805 806 bool LinkMethods(Thread* self, 807 Handle<mirror::Class> klass, 808 Handle<mirror::ObjectArray<mirror::Class>> interfaces, 809 ArtMethod** out_imt) 810 SHARED_REQUIRES(Locks::mutator_lock_); 811 812 // Does anything needed to make sure that the compiler will not generate a direct invoke to this 813 // method. Should only be called on non-invokable methods. 814 void EnsureThrowsInvocationError(ArtMethod* method) 815 SHARED_REQUIRES(Locks::mutator_lock_); 816 817 // A wrapper class representing the result of a method translation used for linking methods and 818 // updating superclass default methods. For each method in a classes vtable there are 4 states it 819 // could be in: 820 // 1) No translation is necessary. In this case there is no MethodTranslation object for it. This 821 // is the standard case and is true when the method is not overridable by a default method, 822 // the class defines a concrete implementation of the method, the default method implementation 823 // remains the same, or an abstract method stayed abstract. 824 // 2) The method must be translated to a different default method. We note this with 825 // CreateTranslatedMethod. 826 // 3) The method must be replaced with a conflict method. This happens when a superclass 827 // implements an interface with a default method and this class implements an unrelated 828 // interface that also defines that default method. We note this with CreateConflictingMethod. 829 // 4) The method must be replaced with an abstract miranda method. This happens when a superclass 830 // implements an interface with a default method and this class implements a subinterface of 831 // the superclass's interface which declares the default method abstract. We note this with 832 // CreateAbstractMethod. 833 // 834 // When a method translation is unnecessary (case #1), we don't put it into the 835 // default_translation maps. So an instance of MethodTranslation must be in one of #2-#4. 836 class MethodTranslation { 837 public: 838 // This slot must become a default conflict method. 839 static MethodTranslation CreateConflictingMethod() { 840 return MethodTranslation(Type::kConflict, /*translation*/nullptr); 841 } 842 843 // This slot must become an abstract method. 844 static MethodTranslation CreateAbstractMethod() { 845 return MethodTranslation(Type::kAbstract, /*translation*/nullptr); 846 } 847 848 // Use the given method as the current value for this vtable slot during translation. 849 static MethodTranslation CreateTranslatedMethod(ArtMethod* new_method) { 850 return MethodTranslation(Type::kTranslation, new_method); 851 } 852 853 // Returns true if this is a method that must become a conflict method. 854 bool IsInConflict() const { 855 return type_ == Type::kConflict; 856 } 857 858 // Returns true if this is a method that must become an abstract method. 859 bool IsAbstract() const { 860 return type_ == Type::kAbstract; 861 } 862 863 // Returns true if this is a method that must become a different method. 864 bool IsTranslation() const { 865 return type_ == Type::kTranslation; 866 } 867 868 // Get the translated version of this method. 869 ArtMethod* GetTranslation() const { 870 DCHECK(IsTranslation()); 871 DCHECK(translation_ != nullptr); 872 return translation_; 873 } 874 875 private: 876 enum class Type { 877 kTranslation, 878 kConflict, 879 kAbstract, 880 }; 881 882 MethodTranslation(Type type, ArtMethod* translation) 883 : translation_(translation), type_(type) {} 884 885 ArtMethod* const translation_; 886 const Type type_; 887 }; 888 889 // Links the virtual methods for the given class and records any default methods that will need to 890 // be updated later. 891 // 892 // Arguments: 893 // * self - The current thread. 894 // * klass - class, whose vtable will be filled in. 895 // * default_translations - Vtable index to new method map. 896 // Any vtable entries that need to be updated with new default methods 897 // are stored into the default_translations map. The default_translations 898 // map is keyed on the vtable index that needs to be updated. We use this 899 // map because if we override a default method with another default 900 // method we need to update the vtable to point to the new method. 901 // Unfortunately since we copy the ArtMethod* we cannot just do a simple 902 // scan, we therefore store the vtable index's that might need to be 903 // updated with the method they will turn into. 904 // TODO This whole default_translations thing is very dirty. There should be a better way. 905 bool LinkVirtualMethods( 906 Thread* self, 907 Handle<mirror::Class> klass, 908 /*out*/std::unordered_map<size_t, MethodTranslation>* default_translations) 909 SHARED_REQUIRES(Locks::mutator_lock_); 910 911 // Sets up the interface lookup table (IFTable) in the correct order to allow searching for 912 // default methods. 913 bool SetupInterfaceLookupTable(Thread* self, 914 Handle<mirror::Class> klass, 915 Handle<mirror::ObjectArray<mirror::Class>> interfaces) 916 SHARED_REQUIRES(Locks::mutator_lock_); 917 918 919 enum class DefaultMethodSearchResult { 920 kDefaultFound, 921 kAbstractFound, 922 kDefaultConflict 923 }; 924 925 // Find the default method implementation for 'interface_method' in 'klass', if one exists. 926 // 927 // Arguments: 928 // * self - The current thread. 929 // * target_method - The method we are trying to find a default implementation for. 930 // * klass - The class we are searching for a definition of target_method. 931 // * out_default_method - The pointer we will store the found default method to on success. 932 // 933 // Return value: 934 // * kDefaultFound - There were no conflicting method implementations found in the class while 935 // searching for target_method. The default method implementation is stored into 936 // out_default_method. 937 // * kAbstractFound - There were no conflicting method implementations found in the class while 938 // searching for target_method but no default implementation was found either. 939 // out_default_method is set to null and the method should be considered not 940 // implemented. 941 // * kDefaultConflict - Conflicting method implementations were found when searching for 942 // target_method. The value of *out_default_method is null. 943 DefaultMethodSearchResult FindDefaultMethodImplementation( 944 Thread* self, 945 ArtMethod* target_method, 946 Handle<mirror::Class> klass, 947 /*out*/ArtMethod** out_default_method) const 948 SHARED_REQUIRES(Locks::mutator_lock_); 949 950 // Sets the imt entries and fixes up the vtable for the given class by linking all the interface 951 // methods. See LinkVirtualMethods for an explanation of what default_translations is. 952 bool LinkInterfaceMethods( 953 Thread* self, 954 Handle<mirror::Class> klass, 955 const std::unordered_map<size_t, MethodTranslation>& default_translations, 956 ArtMethod** out_imt) 957 SHARED_REQUIRES(Locks::mutator_lock_); 958 959 bool LinkStaticFields(Thread* self, Handle<mirror::Class> klass, size_t* class_size) 960 SHARED_REQUIRES(Locks::mutator_lock_); 961 bool LinkInstanceFields(Thread* self, Handle<mirror::Class> klass) 962 SHARED_REQUIRES(Locks::mutator_lock_); 963 bool LinkFields(Thread* self, Handle<mirror::Class> klass, bool is_static, size_t* class_size) 964 SHARED_REQUIRES(Locks::mutator_lock_); 965 void LinkCode(ArtMethod* method, 966 const OatFile::OatClass* oat_class, 967 uint32_t class_def_method_index) 968 SHARED_REQUIRES(Locks::mutator_lock_); 969 void CreateReferenceInstanceOffsets(Handle<mirror::Class> klass) 970 SHARED_REQUIRES(Locks::mutator_lock_); 971 972 void CheckProxyConstructor(ArtMethod* constructor) const 973 SHARED_REQUIRES(Locks::mutator_lock_); 974 void CheckProxyMethod(ArtMethod* method, ArtMethod* prototype) const 975 SHARED_REQUIRES(Locks::mutator_lock_); 976 977 // For use by ImageWriter to find DexCaches for its roots 978 ReaderWriterMutex* DexLock() 979 SHARED_REQUIRES(Locks::mutator_lock_) 980 LOCK_RETURNED(dex_lock_) { 981 return &dex_lock_; 982 } 983 size_t GetDexCacheCount() SHARED_REQUIRES(Locks::mutator_lock_, dex_lock_) { 984 return dex_caches_.size(); 985 } 986 const std::list<DexCacheData>& GetDexCachesData() 987 SHARED_REQUIRES(Locks::mutator_lock_, dex_lock_) { 988 return dex_caches_; 989 } 990 991 void CreateProxyConstructor(Handle<mirror::Class> klass, ArtMethod* out) 992 SHARED_REQUIRES(Locks::mutator_lock_); 993 void CreateProxyMethod(Handle<mirror::Class> klass, ArtMethod* prototype, ArtMethod* out) 994 SHARED_REQUIRES(Locks::mutator_lock_); 995 996 // Ensures that methods have the kAccSkipAccessChecks bit set. We use the 997 // kAccVerificationAttempted bit on the class access flags to determine whether this has been done 998 // before. 999 void EnsureSkipAccessChecksMethods(Handle<mirror::Class> c) 1000 SHARED_REQUIRES(Locks::mutator_lock_); 1001 1002 mirror::Class* LookupClassFromBootImage(const char* descriptor) 1003 SHARED_REQUIRES(Locks::mutator_lock_); 1004 1005 // Register a class loader and create its class table and allocator. Should not be called if 1006 // these are already created. 1007 void RegisterClassLoader(mirror::ClassLoader* class_loader) 1008 SHARED_REQUIRES(Locks::mutator_lock_) 1009 REQUIRES(Locks::classlinker_classes_lock_); 1010 1011 // Returns null if not found. 1012 ClassTable* ClassTableForClassLoader(mirror::ClassLoader* class_loader) 1013 SHARED_REQUIRES(Locks::mutator_lock_, Locks::classlinker_classes_lock_); 1014 1015 // Insert a new class table if not found. 1016 ClassTable* InsertClassTableForClassLoader(mirror::ClassLoader* class_loader) 1017 SHARED_REQUIRES(Locks::mutator_lock_) 1018 REQUIRES(Locks::classlinker_classes_lock_); 1019 1020 // EnsureResolved is called to make sure that a class in the class_table_ has been resolved 1021 // before returning it to the caller. Its the responsibility of the thread that placed the class 1022 // in the table to make it resolved. The thread doing resolution must notify on the class' lock 1023 // when resolution has occurred. This happens in mirror::Class::SetStatus. As resolution may 1024 // retire a class, the version of the class in the table is returned and this may differ from 1025 // the class passed in. 1026 mirror::Class* EnsureResolved(Thread* self, const char* descriptor, mirror::Class* klass) 1027 WARN_UNUSED 1028 SHARED_REQUIRES(Locks::mutator_lock_) 1029 REQUIRES(!dex_lock_); 1030 1031 void FixupTemporaryDeclaringClass(mirror::Class* temp_class, mirror::Class* new_class) 1032 SHARED_REQUIRES(Locks::mutator_lock_); 1033 1034 void SetClassRoot(ClassRoot class_root, mirror::Class* klass) 1035 SHARED_REQUIRES(Locks::mutator_lock_); 1036 1037 // Return the quick generic JNI stub for testing. 1038 const void* GetRuntimeQuickGenericJniStub() const; 1039 1040 // Throw the class initialization failure recorded when first trying to initialize the given 1041 // class. 1042 void ThrowEarlierClassFailure(mirror::Class* c, bool wrap_in_no_class_def = false) 1043 SHARED_REQUIRES(Locks::mutator_lock_) 1044 REQUIRES(!dex_lock_); 1045 1046 bool CanWeInitializeClass(mirror::Class* klass, bool can_init_statics, bool can_init_parents) 1047 SHARED_REQUIRES(Locks::mutator_lock_); 1048 1049 void UpdateClassMethods(mirror::Class* klass, 1050 LengthPrefixedArray<ArtMethod>* new_methods) 1051 SHARED_REQUIRES(Locks::mutator_lock_) 1052 REQUIRES(!Locks::classlinker_classes_lock_); 1053 1054 // new_class_set is the set of classes that were read from the class table section in the image. 1055 // If there was no class table section, it is null. 1056 bool UpdateAppImageClassLoadersAndDexCaches( 1057 gc::space::ImageSpace* space, 1058 Handle<mirror::ClassLoader> class_loader, 1059 Handle<mirror::ObjectArray<mirror::DexCache>> dex_caches, 1060 ClassTable::ClassSet* new_class_set, 1061 bool* out_forward_dex_cache_array, 1062 std::string* out_error_msg) 1063 REQUIRES(!dex_lock_) 1064 SHARED_REQUIRES(Locks::mutator_lock_); 1065 1066 // Check that c1 == FindSystemClass(self, descriptor). Abort with class dumps otherwise. 1067 void CheckSystemClass(Thread* self, Handle<mirror::Class> c1, const char* descriptor) 1068 REQUIRES(!dex_lock_) 1069 SHARED_REQUIRES(Locks::mutator_lock_); 1070 1071 // Sets imt_ref appropriately for LinkInterfaceMethods. 1072 // If there is no method in the imt location of imt_ref it will store the given method there. 1073 // Otherwise it will set the conflict method which will figure out which method to use during 1074 // runtime. 1075 void SetIMTRef(ArtMethod* unimplemented_method, 1076 ArtMethod* imt_conflict_method, 1077 ArtMethod* current_method, 1078 /*out*/ArtMethod** imt_ref) SHARED_REQUIRES(Locks::mutator_lock_); 1079 1080 void ConstructIMTFromIfTable(mirror::IfTable* if_table, 1081 ArtMethod* unimplemented_method, 1082 ArtMethod* imt_conflict_method, 1083 mirror::Class* klass, 1084 bool create_conflict_tables, 1085 bool ignore_copied_methods, 1086 ArtMethod** out_imt) SHARED_REQUIRES(Locks::mutator_lock_); 1087 1088 void FillImtFromSuperClass(Handle<mirror::Class> klass, 1089 ArtMethod* unimplemented_method, 1090 ArtMethod* imt_conflict_method, 1091 ArtMethod** out_imt) SHARED_REQUIRES(Locks::mutator_lock_); 1092 1093 std::vector<const DexFile*> boot_class_path_; 1094 std::vector<std::unique_ptr<const DexFile>> boot_dex_files_; 1095 1096 mutable ReaderWriterMutex dex_lock_ DEFAULT_MUTEX_ACQUIRED_AFTER; 1097 // JNI weak globals and side data to allow dex caches to get unloaded. We lazily delete weak 1098 // globals when we register new dex files. 1099 std::list<DexCacheData> dex_caches_ GUARDED_BY(dex_lock_); 1100 1101 // This contains the class loaders which have class tables. It is populated by 1102 // InsertClassTableForClassLoader. 1103 std::list<ClassLoaderData> class_loaders_ 1104 GUARDED_BY(Locks::classlinker_classes_lock_); 1105 1106 // Boot class path table. Since the class loader for this is null. 1107 ClassTable boot_class_table_ GUARDED_BY(Locks::classlinker_classes_lock_); 1108 1109 // New class roots, only used by CMS since the GC needs to mark these in the pause. 1110 std::vector<GcRoot<mirror::Class>> new_class_roots_ GUARDED_BY(Locks::classlinker_classes_lock_); 1111 1112 // Do we need to search dex caches to find boot image classes? 1113 bool dex_cache_boot_image_class_lookup_required_; 1114 // Number of times we've searched dex caches for a class. After a certain number of misses we move 1115 // the classes into the class_table_ to avoid dex cache based searches. 1116 Atomic<uint32_t> failed_dex_cache_class_lookups_; 1117 1118 // Well known mirror::Class roots. 1119 GcRoot<mirror::ObjectArray<mirror::Class>> class_roots_; 1120 1121 // The interface table used by all arrays. 1122 GcRoot<mirror::IfTable> array_iftable_; 1123 1124 // A cache of the last FindArrayClass results. The cache serves to avoid creating array class 1125 // descriptors for the sake of performing FindClass. 1126 static constexpr size_t kFindArrayCacheSize = 16; 1127 GcRoot<mirror::Class> find_array_class_cache_[kFindArrayCacheSize]; 1128 size_t find_array_class_cache_next_victim_; 1129 1130 bool init_done_; 1131 bool log_new_class_table_roots_ GUARDED_BY(Locks::classlinker_classes_lock_); 1132 1133 InternTable* intern_table_; 1134 1135 // Trampolines within the image the bounce to runtime entrypoints. Done so that there is a single 1136 // patch point within the image. TODO: make these proper relocations. 1137 const void* quick_resolution_trampoline_; 1138 const void* quick_imt_conflict_trampoline_; 1139 const void* quick_generic_jni_trampoline_; 1140 const void* quick_to_interpreter_bridge_trampoline_; 1141 1142 // Image pointer size. 1143 size_t image_pointer_size_; 1144 1145 friend class ImageDumper; // for DexLock 1146 friend class ImageWriter; // for GetClassRoots 1147 friend class JniCompilerTest; // for GetRuntimeQuickGenericJniStub 1148 friend class JniInternalTest; // for GetRuntimeQuickGenericJniStub 1149 ART_FRIEND_TEST(ClassLinkerTest, RegisterDexFileName); // for DexLock, and RegisterDexFileLocked 1150 ART_FRIEND_TEST(mirror::DexCacheTest, Open); // for AllocDexCache 1151 DISALLOW_COPY_AND_ASSIGN(ClassLinker); 1152}; 1153 1154} // namespace art 1155 1156#endif // ART_RUNTIME_CLASS_LINKER_H_ 1157