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/enums.h" 28 #include "base/macros.h" 29 #include "base/mutex.h" 30 #include "dex/dex_cache_resolved_classes.h" 31 #include "dex/dex_file.h" 32 #include "dex/dex_file_types.h" 33 #include "gc_root.h" 34 #include "handle.h" 35 #include "jni.h" 36 #include "mirror/class.h" 37 #include "verifier/verifier_enums.h" 38 39 namespace art { 40 41 namespace gc { 42 namespace space { 43 class ImageSpace; 44 } // namespace space 45 } // namespace gc 46 47 namespace linker { 48 struct CompilationHelper; 49 class ImageWriter; 50 class OatWriter; 51 } // namespace linker 52 53 namespace mirror { 54 class ClassLoader; 55 class DexCache; 56 class DexCachePointerArray; 57 class DexCacheMethodHandlesTest_Open_Test; 58 class DexCacheTest_Open_Test; 59 class IfTable; 60 class MethodHandle; 61 class MethodHandlesLookup; 62 class MethodType; 63 template<class T> class ObjectArray; 64 class StackTraceElement; 65 template <typename T> struct NativeDexCachePair; 66 using MethodDexCachePair = NativeDexCachePair<ArtMethod>; 67 using MethodDexCacheType = std::atomic<MethodDexCachePair>; 68 } // namespace mirror 69 70 class ClassHierarchyAnalysis; 71 class ClassTable; 72 template<class T> class Handle; 73 class ImtConflictTable; 74 template<typename T> class LengthPrefixedArray; 75 template<class T> class MutableHandle; 76 class InternTable; 77 class LinearAlloc; 78 class OatFile; 79 template<class T> class ObjectLock; 80 class Runtime; 81 class ScopedObjectAccessAlreadyRunnable; 82 template<size_t kNumReferences> class PACKED(4) StackHandleScope; 83 84 enum VisitRootFlags : uint8_t; 85 86 class ClassVisitor { 87 public: ~ClassVisitor()88 virtual ~ClassVisitor() {} 89 // Return true to continue visiting. 90 virtual bool operator()(ObjPtr<mirror::Class> klass) = 0; 91 }; 92 93 class ClassLoaderVisitor { 94 public: ~ClassLoaderVisitor()95 virtual ~ClassLoaderVisitor() {} 96 virtual void Visit(ObjPtr<mirror::ClassLoader> class_loader) 97 REQUIRES_SHARED(Locks::classlinker_classes_lock_, Locks::mutator_lock_) = 0; 98 }; 99 100 class ClassLinker { 101 public: 102 // Well known mirror::Class roots accessed via GetClassRoot. 103 enum ClassRoot { 104 kJavaLangClass, 105 kJavaLangObject, 106 kClassArrayClass, 107 kObjectArrayClass, 108 kJavaLangString, 109 kJavaLangDexCache, 110 kJavaLangRefReference, 111 kJavaLangReflectConstructor, 112 kJavaLangReflectField, 113 kJavaLangReflectMethod, 114 kJavaLangReflectProxy, 115 kJavaLangStringArrayClass, 116 kJavaLangReflectConstructorArrayClass, 117 kJavaLangReflectFieldArrayClass, 118 kJavaLangReflectMethodArrayClass, 119 kJavaLangInvokeCallSite, 120 kJavaLangInvokeMethodHandleImpl, 121 kJavaLangInvokeMethodHandlesLookup, 122 kJavaLangInvokeMethodType, 123 kJavaLangInvokeVarHandle, 124 kJavaLangInvokeFieldVarHandle, 125 kJavaLangInvokeArrayElementVarHandle, 126 kJavaLangInvokeByteArrayViewVarHandle, 127 kJavaLangInvokeByteBufferViewVarHandle, 128 kJavaLangClassLoader, 129 kJavaLangThrowable, 130 kJavaLangClassNotFoundException, 131 kJavaLangStackTraceElement, 132 kDalvikSystemEmulatedStackFrame, 133 kPrimitiveBoolean, 134 kPrimitiveByte, 135 kPrimitiveChar, 136 kPrimitiveDouble, 137 kPrimitiveFloat, 138 kPrimitiveInt, 139 kPrimitiveLong, 140 kPrimitiveShort, 141 kPrimitiveVoid, 142 kBooleanArrayClass, 143 kByteArrayClass, 144 kCharArrayClass, 145 kDoubleArrayClass, 146 kFloatArrayClass, 147 kIntArrayClass, 148 kLongArrayClass, 149 kShortArrayClass, 150 kJavaLangStackTraceElementArrayClass, 151 kDalvikSystemClassExt, 152 kClassRootsMax, 153 }; 154 155 static constexpr bool kAppImageMayContainStrings = false; 156 157 explicit ClassLinker(InternTable* intern_table); 158 virtual ~ClassLinker(); 159 160 // Initialize class linker by bootstraping from dex files. 161 bool InitWithoutImage(std::vector<std::unique_ptr<const DexFile>> boot_class_path, 162 std::string* error_msg) 163 REQUIRES_SHARED(Locks::mutator_lock_) 164 REQUIRES(!Locks::dex_lock_); 165 166 // Initialize class linker from one or more boot images. 167 bool InitFromBootImage(std::string* error_msg) 168 REQUIRES_SHARED(Locks::mutator_lock_) 169 REQUIRES(!Locks::dex_lock_); 170 171 // Add an image space to the class linker, may fix up classloader fields and dex cache fields. 172 // The dex files that were newly opened for the space are placed in the out argument 173 // out_dex_files. Returns true if the operation succeeded. 174 // The space must be already added to the heap before calling AddImageSpace since we need to 175 // properly handle read barriers and object marking. 176 bool AddImageSpace(gc::space::ImageSpace* space, 177 Handle<mirror::ClassLoader> class_loader, 178 jobjectArray dex_elements, 179 const char* dex_location, 180 std::vector<std::unique_ptr<const DexFile>>* out_dex_files, 181 std::string* error_msg) 182 REQUIRES(!Locks::dex_lock_) 183 REQUIRES_SHARED(Locks::mutator_lock_); 184 185 bool OpenImageDexFiles(gc::space::ImageSpace* space, 186 std::vector<std::unique_ptr<const DexFile>>* out_dex_files, 187 std::string* error_msg) 188 REQUIRES(!Locks::dex_lock_) 189 REQUIRES_SHARED(Locks::mutator_lock_); 190 191 // Finds a class by its descriptor, loading it if necessary. 192 // If class_loader is null, searches boot_class_path_. 193 mirror::Class* FindClass(Thread* self, 194 const char* descriptor, 195 Handle<mirror::ClassLoader> class_loader) 196 REQUIRES_SHARED(Locks::mutator_lock_) 197 REQUIRES(!Locks::dex_lock_); 198 199 // Finds a class by its descriptor using the "system" class loader, ie by searching the 200 // boot_class_path_. FindSystemClass(Thread * self,const char * descriptor)201 mirror::Class* FindSystemClass(Thread* self, const char* descriptor) 202 REQUIRES_SHARED(Locks::mutator_lock_) 203 REQUIRES(!Locks::dex_lock_) { 204 return FindClass(self, descriptor, ScopedNullHandle<mirror::ClassLoader>()); 205 } 206 207 // Finds the array class given for the element class. 208 mirror::Class* FindArrayClass(Thread* self, ObjPtr<mirror::Class>* element_class) 209 REQUIRES_SHARED(Locks::mutator_lock_) 210 REQUIRES(!Locks::dex_lock_); 211 212 // Returns true if the class linker is initialized. IsInitialized()213 bool IsInitialized() const { 214 return init_done_; 215 } 216 217 // Define a new a class based on a ClassDef from a DexFile 218 mirror::Class* DefineClass(Thread* self, 219 const char* descriptor, 220 size_t hash, 221 Handle<mirror::ClassLoader> class_loader, 222 const DexFile& dex_file, 223 const DexFile::ClassDef& dex_class_def) 224 REQUIRES_SHARED(Locks::mutator_lock_) 225 REQUIRES(!Locks::dex_lock_); 226 227 // Finds a class by its descriptor, returning null if it isn't wasn't loaded 228 // by the given 'class_loader'. 229 mirror::Class* LookupClass(Thread* self, 230 const char* descriptor, 231 ObjPtr<mirror::ClassLoader> class_loader) 232 REQUIRES(!Locks::classlinker_classes_lock_) 233 REQUIRES_SHARED(Locks::mutator_lock_); 234 235 // Finds all the classes with the given descriptor, regardless of ClassLoader. 236 void LookupClasses(const char* descriptor, std::vector<ObjPtr<mirror::Class>>& classes) 237 REQUIRES(!Locks::classlinker_classes_lock_) 238 REQUIRES_SHARED(Locks::mutator_lock_); 239 240 mirror::Class* FindPrimitiveClass(char type) REQUIRES_SHARED(Locks::mutator_lock_); 241 242 void DumpForSigQuit(std::ostream& os) REQUIRES(!Locks::classlinker_classes_lock_); 243 244 size_t NumLoadedClasses() 245 REQUIRES(!Locks::classlinker_classes_lock_) 246 REQUIRES_SHARED(Locks::mutator_lock_); 247 248 // Resolve a String with the given index from the DexFile associated with the given DexCache, 249 // storing the result in the DexCache. 250 ObjPtr<mirror::String> ResolveString(dex::StringIndex string_idx, 251 Handle<mirror::DexCache> dex_cache) 252 REQUIRES_SHARED(Locks::mutator_lock_); 253 254 // Find a String with the given index from the DexFile associated with the given DexCache, 255 // storing the result in the DexCache if found. Return null if not found. 256 ObjPtr<mirror::String> LookupString(dex::StringIndex string_idx, 257 ObjPtr<mirror::DexCache> dex_cache) 258 REQUIRES_SHARED(Locks::mutator_lock_); 259 260 // Resolve a Type with the given index from the DexFile associated with the given `referrer`, 261 // storing the result in the DexCache. The `referrer` is used to identify the target DexCache 262 // and ClassLoader to use for resolution. 263 ObjPtr<mirror::Class> ResolveType(dex::TypeIndex type_idx, ObjPtr<mirror::Class> referrer) 264 REQUIRES_SHARED(Locks::mutator_lock_) 265 REQUIRES(!Locks::dex_lock_, !Roles::uninterruptible_); 266 267 // Resolve a type with the given index from the DexFile associated with the given `referrer`, 268 // storing the result in the DexCache. The `referrer` is used to identify the target DexCache 269 // and ClassLoader to use for resolution. 270 ObjPtr<mirror::Class> ResolveType(dex::TypeIndex type_idx, ArtMethod* referrer) 271 REQUIRES_SHARED(Locks::mutator_lock_) 272 REQUIRES(!Locks::dex_lock_, !Roles::uninterruptible_); 273 274 // Resolve a type with the given index from the DexFile associated with the given DexCache 275 // and ClassLoader, storing the result in DexCache. The ClassLoader is used to search for 276 // the type, since it may be referenced from but not contained within the DexFile. 277 ObjPtr<mirror::Class> ResolveType(dex::TypeIndex type_idx, 278 Handle<mirror::DexCache> dex_cache, 279 Handle<mirror::ClassLoader> class_loader) 280 REQUIRES_SHARED(Locks::mutator_lock_) 281 REQUIRES(!Locks::dex_lock_, !Roles::uninterruptible_); 282 283 // Look up a resolved type with the given index from the DexFile associated with the given 284 // `referrer`, storing the result in the DexCache. The `referrer` is used to identify the 285 // target DexCache and ClassLoader to use for lookup. 286 ObjPtr<mirror::Class> LookupResolvedType(dex::TypeIndex type_idx, 287 ObjPtr<mirror::Class> referrer) 288 REQUIRES_SHARED(Locks::mutator_lock_); 289 290 // Look up a resolved type with the given index from the DexFile associated with the given 291 // `referrer`, storing the result in the DexCache. The `referrer` is used to identify the 292 // target DexCache and ClassLoader to use for lookup. 293 ObjPtr<mirror::Class> LookupResolvedType(dex::TypeIndex type_idx, ArtMethod* referrer) 294 REQUIRES_SHARED(Locks::mutator_lock_); 295 296 // Look up a resolved type with the given index from the DexFile associated with the given 297 // DexCache and ClassLoader. The ClassLoader is used to search for the type, since it may 298 // be referenced from but not contained within the DexFile. 299 ObjPtr<mirror::Class> LookupResolvedType(dex::TypeIndex type_idx, 300 ObjPtr<mirror::DexCache> dex_cache, 301 ObjPtr<mirror::ClassLoader> class_loader) 302 REQUIRES_SHARED(Locks::mutator_lock_); 303 304 // Determine whether a dex cache result should be trusted, or an IncompatibleClassChangeError 305 // check and IllegalAccessError check should be performed even after a hit. 306 enum class ResolveMode { // private. 307 kNoChecks, 308 kCheckICCEAndIAE 309 }; 310 311 // Look up a previously resolved method with the given index. 312 ArtMethod* LookupResolvedMethod(uint32_t method_idx, 313 ObjPtr<mirror::DexCache> dex_cache, 314 ObjPtr<mirror::ClassLoader> class_loader) 315 REQUIRES_SHARED(Locks::mutator_lock_); 316 317 // Find a method with the given index from class `klass`, and update the dex cache. 318 ArtMethod* FindResolvedMethod(ObjPtr<mirror::Class> klass, 319 ObjPtr<mirror::DexCache> dex_cache, 320 ObjPtr<mirror::ClassLoader> class_loader, 321 uint32_t method_idx) 322 REQUIRES_SHARED(Locks::mutator_lock_); 323 324 // Find a method using the wrong lookup mechanism. If `klass` is an interface, 325 // search for a class method. If it is a class, search for an interface method. 326 // This is useful when throwing IncompatibleClassChangeError. 327 ArtMethod* FindIncompatibleMethod(ObjPtr<mirror::Class> klass, 328 ObjPtr<mirror::DexCache> dex_cache, 329 ObjPtr<mirror::ClassLoader> class_loader, 330 uint32_t method_idx) 331 REQUIRES_SHARED(Locks::mutator_lock_); 332 333 // Resolve a method with a given ID from the DexFile associated with the given DexCache 334 // and ClassLoader, storing the result in DexCache. The ClassLinker and ClassLoader are 335 // used as in ResolveType. What is unique is the method type argument which is used to 336 // determine if this method is a direct, static, or virtual method. 337 template <ResolveMode kResolveMode> 338 ArtMethod* ResolveMethod(uint32_t method_idx, 339 Handle<mirror::DexCache> dex_cache, 340 Handle<mirror::ClassLoader> class_loader, 341 ArtMethod* referrer, 342 InvokeType type) 343 REQUIRES_SHARED(Locks::mutator_lock_) 344 REQUIRES(!Locks::dex_lock_, !Roles::uninterruptible_); 345 346 template <InvokeType type, ResolveMode kResolveMode> 347 ArtMethod* GetResolvedMethod(uint32_t method_idx, ArtMethod* referrer) 348 REQUIRES_SHARED(Locks::mutator_lock_); 349 350 template <ResolveMode kResolveMode> 351 ArtMethod* ResolveMethod(Thread* self, uint32_t method_idx, ArtMethod* referrer, InvokeType type) 352 REQUIRES_SHARED(Locks::mutator_lock_) 353 REQUIRES(!Locks::dex_lock_, !Roles::uninterruptible_); 354 ArtMethod* ResolveMethodWithoutInvokeType(uint32_t method_idx, 355 Handle<mirror::DexCache> dex_cache, 356 Handle<mirror::ClassLoader> class_loader) 357 REQUIRES_SHARED(Locks::mutator_lock_) 358 REQUIRES(!Locks::dex_lock_, !Roles::uninterruptible_); 359 360 ArtField* LookupResolvedField(uint32_t field_idx, ArtMethod* referrer, bool is_static) 361 REQUIRES_SHARED(Locks::mutator_lock_); 362 ArtField* ResolveField(uint32_t field_idx, ArtMethod* referrer, bool is_static) 363 REQUIRES_SHARED(Locks::mutator_lock_) 364 REQUIRES(!Locks::dex_lock_, !Roles::uninterruptible_); 365 366 // Resolve a field with a given ID from the DexFile associated with the given DexCache 367 // and ClassLoader, storing the result in DexCache. The ClassLinker and ClassLoader 368 // are used as in ResolveType. What is unique is the is_static argument which is used 369 // to determine if we are resolving a static or non-static field. 370 ArtField* ResolveField(uint32_t field_idx, 371 Handle<mirror::DexCache> dex_cache, 372 Handle<mirror::ClassLoader> class_loader, 373 bool is_static) 374 REQUIRES_SHARED(Locks::mutator_lock_) 375 REQUIRES(!Locks::dex_lock_, !Roles::uninterruptible_); 376 377 // Resolve a field with a given ID from the DexFile associated with the given DexCache 378 // and ClassLoader, storing the result in DexCache. The ClassLinker and ClassLoader 379 // are used as in ResolveType. No is_static argument is provided so that Java 380 // field resolution semantics are followed. 381 ArtField* ResolveFieldJLS(uint32_t field_idx, 382 Handle<mirror::DexCache> dex_cache, 383 Handle<mirror::ClassLoader> class_loader) 384 REQUIRES_SHARED(Locks::mutator_lock_) 385 REQUIRES(!Locks::dex_lock_, !Roles::uninterruptible_); 386 387 // Find a field with a given ID from the DexFile associated with the given DexCache 388 // and ClassLoader, storing the result in DexCache. The declaring class is assumed 389 // to have been already resolved into `klass`. The `is_static` argument is used to 390 // determine if we are resolving a static or non-static field. 391 ArtField* FindResolvedField(ObjPtr<mirror::Class> klass, 392 ObjPtr<mirror::DexCache> dex_cache, 393 ObjPtr<mirror::ClassLoader> class_loader, 394 uint32_t field_idx, 395 bool is_static) 396 REQUIRES_SHARED(Locks::mutator_lock_); 397 398 // Find a field with a given ID from the DexFile associated with the given DexCache 399 // and ClassLoader, storing the result in DexCache. The declaring class is assumed 400 // to have been already resolved into `klass`. No is_static argument is provided 401 // so that Java field resolution semantics are followed. 402 ArtField* FindResolvedFieldJLS(ObjPtr<mirror::Class> klass, 403 ObjPtr<mirror::DexCache> dex_cache, 404 ObjPtr<mirror::ClassLoader> class_loader, 405 uint32_t field_idx) 406 REQUIRES_SHARED(Locks::mutator_lock_); 407 408 // Resolve a method type with a given ID from the DexFile associated with a given DexCache 409 // and ClassLoader, storing the result in the DexCache. 410 ObjPtr<mirror::MethodType> ResolveMethodType(Thread* self, 411 uint32_t proto_idx, 412 Handle<mirror::DexCache> dex_cache, 413 Handle<mirror::ClassLoader> class_loader) 414 REQUIRES_SHARED(Locks::mutator_lock_) 415 REQUIRES(!Locks::dex_lock_, !Roles::uninterruptible_); 416 417 ObjPtr<mirror::MethodType> ResolveMethodType(Thread* self, 418 uint32_t proto_idx, 419 ArtMethod* referrer) 420 REQUIRES_SHARED(Locks::mutator_lock_); 421 422 // Resolve a method handle with a given ID from the DexFile. The 423 // result is not cached in the DexCache as the instance will only be 424 // used once in most circumstances. 425 ObjPtr<mirror::MethodHandle> ResolveMethodHandle(Thread* self, 426 uint32_t method_handle_idx, 427 ArtMethod* referrer) 428 REQUIRES_SHARED(Locks::mutator_lock_); 429 430 // Returns true on success, false if there's an exception pending. 431 // can_run_clinit=false allows the compiler to attempt to init a class, 432 // given the restriction that no <clinit> execution is possible. 433 bool EnsureInitialized(Thread* self, 434 Handle<mirror::Class> c, 435 bool can_init_fields, 436 bool can_init_parents) 437 REQUIRES_SHARED(Locks::mutator_lock_) 438 REQUIRES(!Locks::dex_lock_, !Roles::uninterruptible_); 439 440 // Initializes classes that have instances in the image but that have 441 // <clinit> methods so they could not be initialized by the compiler. 442 void RunRootClinits() 443 REQUIRES_SHARED(Locks::mutator_lock_) 444 REQUIRES(!Locks::dex_lock_, !Roles::uninterruptible_); 445 446 // Directly register an already existing dex cache. RegisterDexFile should be preferred since that 447 // reduplicates DexCaches when possible. The DexCache given to this function must already be fully 448 // initialized and not already registered. 449 void RegisterExistingDexCache(ObjPtr<mirror::DexCache> cache, 450 ObjPtr<mirror::ClassLoader> class_loader) 451 REQUIRES(!Locks::dex_lock_) 452 REQUIRES_SHARED(Locks::mutator_lock_); 453 ObjPtr<mirror::DexCache> RegisterDexFile(const DexFile& dex_file, 454 ObjPtr<mirror::ClassLoader> class_loader) 455 REQUIRES(!Locks::dex_lock_) 456 REQUIRES_SHARED(Locks::mutator_lock_); 457 GetBootClassPath()458 const std::vector<const DexFile*>& GetBootClassPath() { 459 return boot_class_path_; 460 } 461 462 void VisitClasses(ClassVisitor* visitor) 463 REQUIRES(!Locks::classlinker_classes_lock_) 464 REQUIRES_SHARED(Locks::mutator_lock_); 465 466 // Less efficient variant of VisitClasses that copies the class_table_ into secondary storage 467 // so that it can visit individual classes without holding the doesn't hold the 468 // Locks::classlinker_classes_lock_. As the Locks::classlinker_classes_lock_ isn't held this code 469 // can race with insertion and deletion of classes while the visitor is being called. 470 void VisitClassesWithoutClassesLock(ClassVisitor* visitor) 471 REQUIRES_SHARED(Locks::mutator_lock_) 472 REQUIRES(!Locks::dex_lock_); 473 474 void VisitClassRoots(RootVisitor* visitor, VisitRootFlags flags) 475 REQUIRES(!Locks::classlinker_classes_lock_, !Locks::trace_lock_) 476 REQUIRES_SHARED(Locks::mutator_lock_); 477 void VisitRoots(RootVisitor* visitor, VisitRootFlags flags) 478 REQUIRES(!Locks::dex_lock_, !Locks::classlinker_classes_lock_, !Locks::trace_lock_) 479 REQUIRES_SHARED(Locks::mutator_lock_); 480 481 bool IsDexFileRegistered(Thread* self, const DexFile& dex_file) 482 REQUIRES(!Locks::dex_lock_) 483 REQUIRES_SHARED(Locks::mutator_lock_); 484 ObjPtr<mirror::DexCache> FindDexCache(Thread* self, const DexFile& dex_file) 485 REQUIRES(!Locks::dex_lock_) 486 REQUIRES_SHARED(Locks::mutator_lock_); 487 ClassTable* FindClassTable(Thread* self, ObjPtr<mirror::DexCache> dex_cache) 488 REQUIRES(!Locks::dex_lock_) 489 REQUIRES_SHARED(Locks::mutator_lock_); 490 491 LengthPrefixedArray<ArtField>* AllocArtFieldArray(Thread* self, 492 LinearAlloc* allocator, 493 size_t length); 494 495 LengthPrefixedArray<ArtMethod>* AllocArtMethodArray(Thread* self, 496 LinearAlloc* allocator, 497 size_t length); 498 499 mirror::PointerArray* AllocPointerArray(Thread* self, size_t length) 500 REQUIRES_SHARED(Locks::mutator_lock_) 501 REQUIRES(!Roles::uninterruptible_); 502 503 mirror::IfTable* AllocIfTable(Thread* self, size_t ifcount) 504 REQUIRES_SHARED(Locks::mutator_lock_) 505 REQUIRES(!Roles::uninterruptible_); 506 507 mirror::ObjectArray<mirror::StackTraceElement>* AllocStackTraceElementArray(Thread* self, 508 size_t length) 509 REQUIRES_SHARED(Locks::mutator_lock_) 510 REQUIRES(!Roles::uninterruptible_); 511 512 verifier::FailureKind VerifyClass( 513 Thread* self, 514 Handle<mirror::Class> klass, 515 verifier::HardFailLogMode log_level = verifier::HardFailLogMode::kLogNone) 516 REQUIRES_SHARED(Locks::mutator_lock_) 517 REQUIRES(!Locks::dex_lock_); 518 bool VerifyClassUsingOatFile(const DexFile& dex_file, 519 ObjPtr<mirror::Class> klass, 520 ClassStatus& oat_file_class_status) 521 REQUIRES_SHARED(Locks::mutator_lock_) 522 REQUIRES(!Locks::dex_lock_); 523 void ResolveClassExceptionHandlerTypes(Handle<mirror::Class> klass) 524 REQUIRES_SHARED(Locks::mutator_lock_) 525 REQUIRES(!Locks::dex_lock_); 526 void ResolveMethodExceptionHandlerTypes(ArtMethod* klass) 527 REQUIRES_SHARED(Locks::mutator_lock_) 528 REQUIRES(!Locks::dex_lock_); 529 530 mirror::Class* CreateProxyClass(ScopedObjectAccessAlreadyRunnable& soa, 531 jstring name, 532 jobjectArray interfaces, 533 jobject loader, 534 jobjectArray methods, 535 jobjectArray throws) 536 REQUIRES_SHARED(Locks::mutator_lock_); 537 std::string GetDescriptorForProxy(ObjPtr<mirror::Class> proxy_class) 538 REQUIRES_SHARED(Locks::mutator_lock_); 539 540 // Get the oat code for a method when its class isn't yet initialized. 541 const void* GetQuickOatCodeFor(ArtMethod* method) 542 REQUIRES_SHARED(Locks::mutator_lock_); 543 544 pid_t GetClassesLockOwner(); // For SignalCatcher. 545 pid_t GetDexLockOwner(); // For SignalCatcher. 546 547 mirror::Class* GetClassRoot(ClassRoot class_root) REQUIRES_SHARED(Locks::mutator_lock_); 548 549 static const char* GetClassRootDescriptor(ClassRoot class_root); 550 551 // Is the given entry point quick code to run the resolution stub? 552 bool IsQuickResolutionStub(const void* entry_point) const; 553 554 // Is the given entry point quick code to bridge into the interpreter? 555 bool IsQuickToInterpreterBridge(const void* entry_point) const; 556 557 // Is the given entry point quick code to run the generic JNI stub? 558 bool IsQuickGenericJniStub(const void* entry_point) const; 559 560 // Is the given entry point the JNI dlsym lookup stub? 561 bool IsJniDlsymLookupStub(const void* entry_point) const; 562 GetQuickToInterpreterBridgeTrampoline()563 const void* GetQuickToInterpreterBridgeTrampoline() const { 564 return quick_to_interpreter_bridge_trampoline_; 565 } 566 GetInternTable()567 InternTable* GetInternTable() const { 568 return intern_table_; 569 } 570 571 // Set the entrypoints up for method to the enter the interpreter. 572 void SetEntryPointsToInterpreter(ArtMethod* method) const 573 REQUIRES_SHARED(Locks::mutator_lock_); 574 575 // Set the entrypoints up for an obsolete method. 576 void SetEntryPointsForObsoleteMethod(ArtMethod* method) const 577 REQUIRES_SHARED(Locks::mutator_lock_); 578 579 // Attempts to insert a class into a class table. Returns null if 580 // the class was inserted, otherwise returns an existing class with 581 // the same descriptor and ClassLoader. 582 mirror::Class* InsertClass(const char* descriptor, ObjPtr<mirror::Class> klass, size_t hash) 583 REQUIRES(!Locks::classlinker_classes_lock_) 584 REQUIRES_SHARED(Locks::mutator_lock_); 585 586 // Add an oat file with .bss GC roots to be visited again at the end of GC 587 // for collector types that need it. 588 void WriteBarrierForBootOatFileBssRoots(const OatFile* oat_file) 589 REQUIRES(!Locks::classlinker_classes_lock_) 590 REQUIRES_SHARED(Locks::mutator_lock_); 591 GetClassRoots()592 mirror::ObjectArray<mirror::Class>* GetClassRoots() REQUIRES_SHARED(Locks::mutator_lock_) { 593 mirror::ObjectArray<mirror::Class>* class_roots = class_roots_.Read(); 594 DCHECK(class_roots != nullptr); 595 return class_roots; 596 } 597 598 // Move the class table to the pre-zygote table to reduce memory usage. This works by ensuring 599 // that no more classes are ever added to the pre zygote table which makes it that the pages 600 // always remain shared dirty instead of private dirty. 601 void MoveClassTableToPreZygote() 602 REQUIRES(!Locks::classlinker_classes_lock_) 603 REQUIRES_SHARED(Locks::mutator_lock_); 604 605 // Creates a GlobalRef PathClassLoader or DelegateLastClassLoader (specified by loader_class) 606 // that can be used to load classes from the given dex files. The parent of the class loader 607 // will be set to `parent_loader`. If `parent_loader` is null the parent will be 608 // the boot class loader. 609 // If class_loader points to a different class than PathClassLoader or DelegateLastClassLoader 610 // this method will abort. 611 // Note: the objects are not completely set up. Do not use this outside of tests and the compiler. 612 jobject CreateWellKnownClassLoader(Thread* self, 613 const std::vector<const DexFile*>& dex_files, 614 jclass loader_class, 615 jobject parent_loader) 616 REQUIRES_SHARED(Locks::mutator_lock_) 617 REQUIRES(!Locks::dex_lock_); 618 619 // Calls CreateWellKnownClassLoader(self, 620 // dex_files, 621 // WellKnownClasses::dalvik_system_PathClassLoader, 622 // nullptr) 623 jobject CreatePathClassLoader(Thread* self, const std::vector<const DexFile*>& dex_files) 624 REQUIRES_SHARED(Locks::mutator_lock_) 625 REQUIRES(!Locks::dex_lock_); 626 GetImagePointerSize()627 PointerSize GetImagePointerSize() const { 628 return image_pointer_size_; 629 } 630 631 // Used by image writer for checking. 632 bool ClassInClassTable(ObjPtr<mirror::Class> klass) 633 REQUIRES(Locks::classlinker_classes_lock_) 634 REQUIRES_SHARED(Locks::mutator_lock_); 635 636 // Clear the ArrayClass cache. This is necessary when cleaning up for the image, as the cache 637 // entries are roots, but potentially not image classes. 638 void DropFindArrayClassCache() REQUIRES_SHARED(Locks::mutator_lock_); 639 640 // Clean up class loaders, this needs to happen after JNI weak globals are cleared. 641 void CleanupClassLoaders() 642 REQUIRES(!Locks::classlinker_classes_lock_) 643 REQUIRES_SHARED(Locks::mutator_lock_); 644 645 // Unlike GetOrCreateAllocatorForClassLoader, GetAllocatorForClassLoader asserts that the 646 // allocator for this class loader is already created. 647 LinearAlloc* GetAllocatorForClassLoader(ObjPtr<mirror::ClassLoader> class_loader) 648 REQUIRES_SHARED(Locks::mutator_lock_); 649 650 // Return the linear alloc for a class loader if it is already allocated, otherwise allocate and 651 // set it. TODO: Consider using a lock other than classlinker_classes_lock_. 652 LinearAlloc* GetOrCreateAllocatorForClassLoader(ObjPtr<mirror::ClassLoader> class_loader) 653 REQUIRES(!Locks::classlinker_classes_lock_) 654 REQUIRES_SHARED(Locks::mutator_lock_); 655 656 // May be called with null class_loader due to legacy code. b/27954959 657 void InsertDexFileInToClassLoader(ObjPtr<mirror::Object> dex_file, 658 ObjPtr<mirror::ClassLoader> class_loader) 659 REQUIRES(!Locks::classlinker_classes_lock_) 660 REQUIRES_SHARED(Locks::mutator_lock_); 661 662 static bool ShouldUseInterpreterEntrypoint(ArtMethod* method, const void* quick_code) 663 REQUIRES_SHARED(Locks::mutator_lock_); 664 665 std::set<DexCacheResolvedClasses> GetResolvedClasses(bool ignore_boot_classes) 666 REQUIRES(!Locks::dex_lock_); 667 668 static bool IsBootClassLoader(ScopedObjectAccessAlreadyRunnable& soa, 669 ObjPtr<mirror::ClassLoader> class_loader) 670 REQUIRES_SHARED(Locks::mutator_lock_); 671 672 ArtMethod* AddMethodToConflictTable(ObjPtr<mirror::Class> klass, 673 ArtMethod* conflict_method, 674 ArtMethod* interface_method, 675 ArtMethod* method, 676 bool force_new_conflict_method) 677 REQUIRES_SHARED(Locks::mutator_lock_); 678 679 // Create a conflict table with a specified capacity. 680 ImtConflictTable* CreateImtConflictTable(size_t count, LinearAlloc* linear_alloc); 681 682 // Static version for when the class linker is not yet created. 683 static ImtConflictTable* CreateImtConflictTable(size_t count, 684 LinearAlloc* linear_alloc, 685 PointerSize pointer_size); 686 687 688 // Create the IMT and conflict tables for a class. 689 void FillIMTAndConflictTables(ObjPtr<mirror::Class> klass) REQUIRES_SHARED(Locks::mutator_lock_); 690 691 // Visit all of the class tables. This is used by dex2oat to allow pruning dex caches. 692 template <class Visitor> 693 void VisitClassTables(const Visitor& visitor) 694 REQUIRES(!Locks::classlinker_classes_lock_) 695 REQUIRES_SHARED(Locks::mutator_lock_); 696 697 // Throw the class initialization failure recorded when first trying to initialize the given 698 // class. 699 void ThrowEarlierClassFailure(ObjPtr<mirror::Class> c, bool wrap_in_no_class_def = false) 700 REQUIRES_SHARED(Locks::mutator_lock_) 701 REQUIRES(!Locks::dex_lock_); 702 703 // Get the actual holding class for a copied method. Pretty slow, don't call often. 704 mirror::Class* GetHoldingClassOfCopiedMethod(ArtMethod* method) 705 REQUIRES_SHARED(Locks::mutator_lock_); 706 707 // Returns null if not found. 708 // This returns a pointer to the class-table, without requiring any locking - including the 709 // boot class-table. It is the caller's responsibility to access this under lock, if required. 710 ClassTable* ClassTableForClassLoader(ObjPtr<mirror::ClassLoader> class_loader) 711 REQUIRES_SHARED(Locks::mutator_lock_) 712 NO_THREAD_SAFETY_ANALYSIS; 713 714 void AppendToBootClassPath(Thread* self, const DexFile& dex_file) 715 REQUIRES_SHARED(Locks::mutator_lock_) 716 REQUIRES(!Locks::dex_lock_); 717 718 // Visit all of the class loaders in the class linker. 719 void VisitClassLoaders(ClassLoaderVisitor* visitor) const 720 REQUIRES_SHARED(Locks::classlinker_classes_lock_, Locks::mutator_lock_); 721 722 // Checks that a class and its superclass from another class loader have the same virtual methods. 723 bool ValidateSuperClassDescriptors(Handle<mirror::Class> klass) 724 REQUIRES_SHARED(Locks::mutator_lock_); 725 GetClassHierarchyAnalysis()726 ClassHierarchyAnalysis* GetClassHierarchyAnalysis() { 727 return cha_.get(); 728 } 729 730 struct DexCacheData { 731 // Construct an invalid data object. DexCacheDataDexCacheData732 DexCacheData() 733 : weak_root(nullptr), 734 dex_file(nullptr), 735 class_table(nullptr) { } 736 737 // Check if the data is valid. IsValidDexCacheData738 bool IsValid() const { 739 return dex_file != nullptr; 740 } 741 742 // Weak root to the DexCache. Note: Do not decode this unnecessarily or else class unloading may 743 // not work properly. 744 jweak weak_root; 745 // The following field caches the DexCache's field here to avoid unnecessary jweak decode that 746 // triggers read barriers (and marks them alive unnecessarily and messes with class unloading.) 747 const DexFile* dex_file; 748 // Identify the associated class loader's class table. This is used to make sure that 749 // the Java call to native DexCache.setResolvedType() inserts the resolved type in that 750 // class table. It is also used to make sure we don't register the same dex cache with 751 // multiple class loaders. 752 ClassTable* class_table; 753 }; 754 755 protected: 756 virtual bool InitializeClass(Thread* self, 757 Handle<mirror::Class> klass, 758 bool can_run_clinit, 759 bool can_init_parents) 760 REQUIRES_SHARED(Locks::mutator_lock_) 761 REQUIRES(!Locks::dex_lock_); 762 763 virtual verifier::FailureKind PerformClassVerification(Thread* self, 764 Handle<mirror::Class> klass, 765 verifier::HardFailLogMode log_level, 766 std::string* error_msg) 767 REQUIRES_SHARED(Locks::mutator_lock_); 768 769 private: 770 class LinkInterfaceMethodsHelper; 771 772 struct ClassLoaderData { 773 jweak weak_root; // Weak root to enable class unloading. 774 ClassTable* class_table; 775 LinearAlloc* allocator; 776 }; 777 778 // Ensures that the supertype of 'klass' ('supertype') is verified. Returns false and throws 779 // appropriate exceptions if verification failed hard. Returns true for successful verification or 780 // soft-failures. 781 bool AttemptSupertypeVerification(Thread* self, 782 Handle<mirror::Class> klass, 783 Handle<mirror::Class> supertype) 784 REQUIRES(!Locks::dex_lock_) 785 REQUIRES_SHARED(Locks::mutator_lock_); 786 787 void DeleteClassLoader(Thread* self, const ClassLoaderData& data, bool cleanup_cha) 788 REQUIRES_SHARED(Locks::mutator_lock_); 789 790 void VisitClassesInternal(ClassVisitor* visitor) 791 REQUIRES_SHARED(Locks::classlinker_classes_lock_, Locks::mutator_lock_); 792 793 // Returns the number of zygote and image classes. 794 size_t NumZygoteClasses() const 795 REQUIRES(Locks::classlinker_classes_lock_) 796 REQUIRES_SHARED(Locks::mutator_lock_); 797 798 // Returns the number of non zygote nor image classes. 799 size_t NumNonZygoteClasses() const 800 REQUIRES(Locks::classlinker_classes_lock_) 801 REQUIRES_SHARED(Locks::mutator_lock_); 802 803 void FinishInit(Thread* self) 804 REQUIRES_SHARED(Locks::mutator_lock_) 805 REQUIRES(!Locks::dex_lock_, !Roles::uninterruptible_); 806 807 // For early bootstrapping by Init 808 mirror::Class* AllocClass(Thread* self, 809 ObjPtr<mirror::Class> java_lang_Class, 810 uint32_t class_size) 811 REQUIRES_SHARED(Locks::mutator_lock_) 812 REQUIRES(!Roles::uninterruptible_); 813 814 // Alloc* convenience functions to avoid needing to pass in mirror::Class* 815 // values that are known to the ClassLinker such as 816 // kObjectArrayClass and kJavaLangString etc. 817 mirror::Class* AllocClass(Thread* self, uint32_t class_size) 818 REQUIRES_SHARED(Locks::mutator_lock_) 819 REQUIRES(!Roles::uninterruptible_); 820 821 mirror::DexCache* AllocDexCache(ObjPtr<mirror::String>* out_location, 822 Thread* self, 823 const DexFile& dex_file) 824 REQUIRES_SHARED(Locks::mutator_lock_) 825 REQUIRES(!Roles::uninterruptible_); 826 827 // Used for tests and AppendToBootClassPath. 828 mirror::DexCache* AllocAndInitializeDexCache(Thread* self, 829 const DexFile& dex_file, 830 LinearAlloc* linear_alloc) 831 REQUIRES_SHARED(Locks::mutator_lock_) 832 REQUIRES(!Locks::dex_lock_) 833 REQUIRES(!Roles::uninterruptible_); 834 835 mirror::Class* CreatePrimitiveClass(Thread* self, Primitive::Type type) 836 REQUIRES_SHARED(Locks::mutator_lock_) 837 REQUIRES(!Roles::uninterruptible_); 838 mirror::Class* InitializePrimitiveClass(ObjPtr<mirror::Class> primitive_class, 839 Primitive::Type type) 840 REQUIRES_SHARED(Locks::mutator_lock_) 841 REQUIRES(!Roles::uninterruptible_); 842 843 mirror::Class* CreateArrayClass(Thread* self, 844 const char* descriptor, 845 size_t hash, 846 Handle<mirror::ClassLoader> class_loader) 847 REQUIRES_SHARED(Locks::mutator_lock_) 848 REQUIRES(!Locks::dex_lock_, !Roles::uninterruptible_); 849 850 void AppendToBootClassPath(const DexFile& dex_file, ObjPtr<mirror::DexCache> dex_cache) 851 REQUIRES_SHARED(Locks::mutator_lock_) 852 REQUIRES(!Locks::dex_lock_); 853 854 // Precomputes size needed for Class, in the case of a non-temporary class this size must be 855 // sufficient to hold all static fields. 856 uint32_t SizeOfClassWithoutEmbeddedTables(const DexFile& dex_file, 857 const DexFile::ClassDef& dex_class_def); 858 859 // Setup the classloader, class def index, type idx so that we can insert this class in the class 860 // table. 861 void SetupClass(const DexFile& dex_file, 862 const DexFile::ClassDef& dex_class_def, 863 Handle<mirror::Class> klass, 864 ObjPtr<mirror::ClassLoader> class_loader) 865 REQUIRES_SHARED(Locks::mutator_lock_); 866 867 void LoadClass(Thread* self, 868 const DexFile& dex_file, 869 const DexFile::ClassDef& dex_class_def, 870 Handle<mirror::Class> klass) 871 REQUIRES_SHARED(Locks::mutator_lock_); 872 void LoadClassMembers(Thread* self, 873 const DexFile& dex_file, 874 const uint8_t* class_data, 875 Handle<mirror::Class> klass) 876 REQUIRES_SHARED(Locks::mutator_lock_); 877 878 void LoadField(const ClassDataItemIterator& it, Handle<mirror::Class> klass, ArtField* dst) 879 REQUIRES_SHARED(Locks::mutator_lock_); 880 881 void LoadMethod(const DexFile& dex_file, 882 const ClassDataItemIterator& it, 883 Handle<mirror::Class> klass, ArtMethod* dst) 884 REQUIRES_SHARED(Locks::mutator_lock_); 885 886 void FixupStaticTrampolines(ObjPtr<mirror::Class> klass) REQUIRES_SHARED(Locks::mutator_lock_); 887 888 // Finds a class in a Path- or DexClassLoader, loading it if necessary without using JNI. Hash 889 // function is supposed to be ComputeModifiedUtf8Hash(descriptor). Returns true if the 890 // class-loader chain could be handled, false otherwise, i.e., a non-supported class-loader 891 // was encountered while walking the parent chain (currently only BootClassLoader and 892 // PathClassLoader are supported). 893 bool FindClassInBaseDexClassLoader(ScopedObjectAccessAlreadyRunnable& soa, 894 Thread* self, 895 const char* descriptor, 896 size_t hash, 897 Handle<mirror::ClassLoader> class_loader, 898 ObjPtr<mirror::Class>* result) 899 REQUIRES_SHARED(Locks::mutator_lock_) 900 REQUIRES(!Locks::dex_lock_); 901 902 // Finds the class in the classpath of the given class loader. It only searches the class loader 903 // dex files and does not recurse into its parent. 904 // The method checks that the provided class loader is either a PathClassLoader or a 905 // DexClassLoader. 906 // If the class is found the method returns the resolved class. Otherwise it returns null. 907 ObjPtr<mirror::Class> FindClassInBaseDexClassLoaderClassPath( 908 ScopedObjectAccessAlreadyRunnable& soa, 909 const char* descriptor, 910 size_t hash, 911 Handle<mirror::ClassLoader> class_loader) 912 REQUIRES_SHARED(Locks::mutator_lock_) 913 REQUIRES(!Locks::dex_lock_); 914 915 // Finds the class in the boot class loader. 916 // If the class is found the method returns the resolved class. Otherwise it returns null. 917 ObjPtr<mirror::Class> FindClassInBootClassLoaderClassPath(Thread* self, 918 const char* descriptor, 919 size_t hash) 920 REQUIRES_SHARED(Locks::mutator_lock_) 921 REQUIRES(!Locks::dex_lock_); 922 923 // Implementation of LookupResolvedType() called when the type was not found in the dex cache. 924 ObjPtr<mirror::Class> DoLookupResolvedType(dex::TypeIndex type_idx, 925 ObjPtr<mirror::DexCache> dex_cache, 926 ObjPtr<mirror::ClassLoader> class_loader) 927 REQUIRES_SHARED(Locks::mutator_lock_); 928 929 // Implementation of ResolveType() called when the type was not found in the dex cache. 930 ObjPtr<mirror::Class> DoResolveType(dex::TypeIndex type_idx, 931 Handle<mirror::DexCache> dex_cache, 932 Handle<mirror::ClassLoader> class_loader) 933 REQUIRES_SHARED(Locks::mutator_lock_) 934 REQUIRES(!Locks::dex_lock_, !Roles::uninterruptible_); 935 936 // Finds a class by its descriptor, returning NULL if it isn't wasn't loaded 937 // by the given 'class_loader'. Uses the provided hash for the descriptor. 938 mirror::Class* LookupClass(Thread* self, 939 const char* descriptor, 940 size_t hash, 941 ObjPtr<mirror::ClassLoader> class_loader) 942 REQUIRES(!Locks::classlinker_classes_lock_) 943 REQUIRES_SHARED(Locks::mutator_lock_); 944 945 // Find a field by its field index. 946 ArtField* LookupResolvedField(uint32_t field_idx, 947 ObjPtr<mirror::DexCache> dex_cache, 948 ObjPtr<mirror::ClassLoader> class_loader, 949 bool is_static) 950 REQUIRES_SHARED(Locks::mutator_lock_); 951 952 void RegisterDexFileLocked(const DexFile& dex_file, 953 ObjPtr<mirror::DexCache> dex_cache, 954 ObjPtr<mirror::ClassLoader> class_loader) 955 REQUIRES(Locks::dex_lock_) 956 REQUIRES_SHARED(Locks::mutator_lock_); 957 DexCacheData FindDexCacheDataLocked(const DexFile& dex_file) 958 REQUIRES(Locks::dex_lock_) 959 REQUIRES_SHARED(Locks::mutator_lock_); 960 static ObjPtr<mirror::DexCache> DecodeDexCache(Thread* self, const DexCacheData& data) 961 REQUIRES_SHARED(Locks::mutator_lock_); 962 // Called to ensure that the dex cache has been registered with the same class loader. 963 // If yes, returns the dex cache, otherwise throws InternalError and returns null. 964 ObjPtr<mirror::DexCache> EnsureSameClassLoader(Thread* self, 965 ObjPtr<mirror::DexCache> dex_cache, 966 const DexCacheData& data, 967 ObjPtr<mirror::ClassLoader> class_loader) 968 REQUIRES(!Locks::dex_lock_) 969 REQUIRES_SHARED(Locks::mutator_lock_); 970 971 bool InitializeDefaultInterfaceRecursive(Thread* self, 972 Handle<mirror::Class> klass, 973 bool can_run_clinit, 974 bool can_init_parents) 975 REQUIRES(!Locks::dex_lock_) 976 REQUIRES_SHARED(Locks::mutator_lock_); 977 bool WaitForInitializeClass(Handle<mirror::Class> klass, 978 Thread* self, 979 ObjectLock<mirror::Class>& lock); 980 981 bool IsSameDescriptorInDifferentClassContexts(Thread* self, 982 const char* descriptor, 983 Handle<mirror::ClassLoader> class_loader1, 984 Handle<mirror::ClassLoader> class_loader2) 985 REQUIRES_SHARED(Locks::mutator_lock_); 986 987 bool IsSameMethodSignatureInDifferentClassContexts(Thread* self, 988 ArtMethod* method, 989 ObjPtr<mirror::Class> klass1, 990 ObjPtr<mirror::Class> klass2) 991 REQUIRES_SHARED(Locks::mutator_lock_); 992 993 bool LinkClass(Thread* self, 994 const char* descriptor, 995 Handle<mirror::Class> klass, 996 Handle<mirror::ObjectArray<mirror::Class>> interfaces, 997 MutableHandle<mirror::Class>* h_new_class_out) 998 REQUIRES_SHARED(Locks::mutator_lock_) 999 REQUIRES(!Locks::classlinker_classes_lock_); 1000 1001 bool LinkSuperClass(Handle<mirror::Class> klass) 1002 REQUIRES_SHARED(Locks::mutator_lock_); 1003 1004 bool LoadSuperAndInterfaces(Handle<mirror::Class> klass, const DexFile& dex_file) 1005 REQUIRES_SHARED(Locks::mutator_lock_) 1006 REQUIRES(!Locks::dex_lock_); 1007 1008 bool LinkMethods(Thread* self, 1009 Handle<mirror::Class> klass, 1010 Handle<mirror::ObjectArray<mirror::Class>> interfaces, 1011 bool* out_new_conflict, 1012 ArtMethod** out_imt) 1013 REQUIRES_SHARED(Locks::mutator_lock_); 1014 1015 mirror::MethodHandle* ResolveMethodHandleForField(Thread* self, 1016 const DexFile::MethodHandleItem& method_handle, 1017 ArtMethod* referrer) 1018 REQUIRES_SHARED(Locks::mutator_lock_); 1019 1020 mirror::MethodHandle* ResolveMethodHandleForMethod(Thread* self, 1021 const DexFile::MethodHandleItem& method_handle, 1022 ArtMethod* referrer) 1023 REQUIRES_SHARED(Locks::mutator_lock_); 1024 1025 // A wrapper class representing the result of a method translation used for linking methods and 1026 // updating superclass default methods. For each method in a classes vtable there are 4 states it 1027 // could be in: 1028 // 1) No translation is necessary. In this case there is no MethodTranslation object for it. This 1029 // is the standard case and is true when the method is not overridable by a default method, 1030 // the class defines a concrete implementation of the method, the default method implementation 1031 // remains the same, or an abstract method stayed abstract. 1032 // 2) The method must be translated to a different default method. We note this with 1033 // CreateTranslatedMethod. 1034 // 3) The method must be replaced with a conflict method. This happens when a superclass 1035 // implements an interface with a default method and this class implements an unrelated 1036 // interface that also defines that default method. We note this with CreateConflictingMethod. 1037 // 4) The method must be replaced with an abstract miranda method. This happens when a superclass 1038 // implements an interface with a default method and this class implements a subinterface of 1039 // the superclass's interface which declares the default method abstract. We note this with 1040 // CreateAbstractMethod. 1041 // 1042 // When a method translation is unnecessary (case #1), we don't put it into the 1043 // default_translation maps. So an instance of MethodTranslation must be in one of #2-#4. 1044 class MethodTranslation { 1045 public: 1046 // This slot must become a default conflict method. CreateConflictingMethod()1047 static MethodTranslation CreateConflictingMethod() { 1048 return MethodTranslation(Type::kConflict, /*translation*/nullptr); 1049 } 1050 1051 // This slot must become an abstract method. CreateAbstractMethod()1052 static MethodTranslation CreateAbstractMethod() { 1053 return MethodTranslation(Type::kAbstract, /*translation*/nullptr); 1054 } 1055 1056 // Use the given method as the current value for this vtable slot during translation. CreateTranslatedMethod(ArtMethod * new_method)1057 static MethodTranslation CreateTranslatedMethod(ArtMethod* new_method) { 1058 return MethodTranslation(Type::kTranslation, new_method); 1059 } 1060 1061 // Returns true if this is a method that must become a conflict method. IsInConflict()1062 bool IsInConflict() const { 1063 return type_ == Type::kConflict; 1064 } 1065 1066 // Returns true if this is a method that must become an abstract method. IsAbstract()1067 bool IsAbstract() const { 1068 return type_ == Type::kAbstract; 1069 } 1070 1071 // Returns true if this is a method that must become a different method. IsTranslation()1072 bool IsTranslation() const { 1073 return type_ == Type::kTranslation; 1074 } 1075 1076 // Get the translated version of this method. GetTranslation()1077 ArtMethod* GetTranslation() const { 1078 DCHECK(IsTranslation()); 1079 DCHECK(translation_ != nullptr); 1080 return translation_; 1081 } 1082 1083 private: 1084 enum class Type { 1085 kTranslation, 1086 kConflict, 1087 kAbstract, 1088 }; 1089 MethodTranslation(Type type,ArtMethod * translation)1090 MethodTranslation(Type type, ArtMethod* translation) 1091 : translation_(translation), type_(type) {} 1092 1093 ArtMethod* const translation_; 1094 const Type type_; 1095 }; 1096 1097 // Links the virtual methods for the given class and records any default methods that will need to 1098 // be updated later. 1099 // 1100 // Arguments: 1101 // * self - The current thread. 1102 // * klass - class, whose vtable will be filled in. 1103 // * default_translations - Vtable index to new method map. 1104 // Any vtable entries that need to be updated with new default methods 1105 // are stored into the default_translations map. The default_translations 1106 // map is keyed on the vtable index that needs to be updated. We use this 1107 // map because if we override a default method with another default 1108 // method we need to update the vtable to point to the new method. 1109 // Unfortunately since we copy the ArtMethod* we cannot just do a simple 1110 // scan, we therefore store the vtable index's that might need to be 1111 // updated with the method they will turn into. 1112 // TODO This whole default_translations thing is very dirty. There should be a better way. 1113 bool LinkVirtualMethods( 1114 Thread* self, 1115 Handle<mirror::Class> klass, 1116 /*out*/std::unordered_map<size_t, MethodTranslation>* default_translations) 1117 REQUIRES_SHARED(Locks::mutator_lock_); 1118 1119 // Sets up the interface lookup table (IFTable) in the correct order to allow searching for 1120 // default methods. 1121 bool SetupInterfaceLookupTable(Thread* self, 1122 Handle<mirror::Class> klass, 1123 Handle<mirror::ObjectArray<mirror::Class>> interfaces) 1124 REQUIRES_SHARED(Locks::mutator_lock_); 1125 1126 1127 enum class DefaultMethodSearchResult { 1128 kDefaultFound, 1129 kAbstractFound, 1130 kDefaultConflict 1131 }; 1132 1133 // Find the default method implementation for 'interface_method' in 'klass', if one exists. 1134 // 1135 // Arguments: 1136 // * self - The current thread. 1137 // * target_method - The method we are trying to find a default implementation for. 1138 // * klass - The class we are searching for a definition of target_method. 1139 // * out_default_method - The pointer we will store the found default method to on success. 1140 // 1141 // Return value: 1142 // * kDefaultFound - There were no conflicting method implementations found in the class while 1143 // searching for target_method. The default method implementation is stored into 1144 // out_default_method. 1145 // * kAbstractFound - There were no conflicting method implementations found in the class while 1146 // searching for target_method but no default implementation was found either. 1147 // out_default_method is set to null and the method should be considered not 1148 // implemented. 1149 // * kDefaultConflict - Conflicting method implementations were found when searching for 1150 // target_method. The value of *out_default_method is null. 1151 DefaultMethodSearchResult FindDefaultMethodImplementation( 1152 Thread* self, 1153 ArtMethod* target_method, 1154 Handle<mirror::Class> klass, 1155 /*out*/ArtMethod** out_default_method) const 1156 REQUIRES_SHARED(Locks::mutator_lock_); 1157 1158 // Sets the imt entries and fixes up the vtable for the given class by linking all the interface 1159 // methods. See LinkVirtualMethods for an explanation of what default_translations is. 1160 bool LinkInterfaceMethods( 1161 Thread* self, 1162 Handle<mirror::Class> klass, 1163 const std::unordered_map<size_t, MethodTranslation>& default_translations, 1164 bool* out_new_conflict, 1165 ArtMethod** out_imt) 1166 REQUIRES_SHARED(Locks::mutator_lock_); 1167 1168 bool LinkStaticFields(Thread* self, Handle<mirror::Class> klass, size_t* class_size) 1169 REQUIRES_SHARED(Locks::mutator_lock_); 1170 bool LinkInstanceFields(Thread* self, Handle<mirror::Class> klass) 1171 REQUIRES_SHARED(Locks::mutator_lock_); 1172 bool LinkFields(Thread* self, Handle<mirror::Class> klass, bool is_static, size_t* class_size) 1173 REQUIRES_SHARED(Locks::mutator_lock_); 1174 void CreateReferenceInstanceOffsets(Handle<mirror::Class> klass) 1175 REQUIRES_SHARED(Locks::mutator_lock_); 1176 1177 void CheckProxyConstructor(ArtMethod* constructor) const 1178 REQUIRES_SHARED(Locks::mutator_lock_); 1179 void CheckProxyMethod(ArtMethod* method, ArtMethod* prototype) const 1180 REQUIRES_SHARED(Locks::mutator_lock_); 1181 GetDexCacheCount()1182 size_t GetDexCacheCount() REQUIRES_SHARED(Locks::mutator_lock_, Locks::dex_lock_) { 1183 return dex_caches_.size(); 1184 } GetDexCachesData()1185 const std::list<DexCacheData>& GetDexCachesData() 1186 REQUIRES_SHARED(Locks::mutator_lock_, Locks::dex_lock_) { 1187 return dex_caches_; 1188 } 1189 1190 void CreateProxyConstructor(Handle<mirror::Class> klass, ArtMethod* out) 1191 REQUIRES_SHARED(Locks::mutator_lock_); 1192 void CreateProxyMethod(Handle<mirror::Class> klass, ArtMethod* prototype, ArtMethod* out) 1193 REQUIRES_SHARED(Locks::mutator_lock_); 1194 1195 // Register a class loader and create its class table and allocator. Should not be called if 1196 // these are already created. 1197 void RegisterClassLoader(ObjPtr<mirror::ClassLoader> class_loader) 1198 REQUIRES_SHARED(Locks::mutator_lock_) 1199 REQUIRES(Locks::classlinker_classes_lock_); 1200 1201 // Insert a new class table if not found. 1202 ClassTable* InsertClassTableForClassLoader(ObjPtr<mirror::ClassLoader> class_loader) 1203 REQUIRES_SHARED(Locks::mutator_lock_) 1204 REQUIRES(Locks::classlinker_classes_lock_); 1205 1206 // EnsureResolved is called to make sure that a class in the class_table_ has been resolved 1207 // before returning it to the caller. Its the responsibility of the thread that placed the class 1208 // in the table to make it resolved. The thread doing resolution must notify on the class' lock 1209 // when resolution has occurred. This happens in mirror::Class::SetStatus. As resolution may 1210 // retire a class, the version of the class in the table is returned and this may differ from 1211 // the class passed in. 1212 mirror::Class* EnsureResolved(Thread* self, const char* descriptor, ObjPtr<mirror::Class> klass) 1213 WARN_UNUSED 1214 REQUIRES_SHARED(Locks::mutator_lock_) 1215 REQUIRES(!Locks::dex_lock_); 1216 1217 void FixupTemporaryDeclaringClass(ObjPtr<mirror::Class> temp_class, 1218 ObjPtr<mirror::Class> new_class) 1219 REQUIRES_SHARED(Locks::mutator_lock_); 1220 1221 void SetClassRoot(ClassRoot class_root, ObjPtr<mirror::Class> klass) 1222 REQUIRES_SHARED(Locks::mutator_lock_); 1223 1224 // Return the quick generic JNI stub for testing. 1225 const void* GetRuntimeQuickGenericJniStub() const; 1226 1227 bool CanWeInitializeClass(ObjPtr<mirror::Class> klass, 1228 bool can_init_statics, 1229 bool can_init_parents) 1230 REQUIRES_SHARED(Locks::mutator_lock_); 1231 1232 void UpdateClassMethods(ObjPtr<mirror::Class> klass, 1233 LengthPrefixedArray<ArtMethod>* new_methods) 1234 REQUIRES_SHARED(Locks::mutator_lock_) 1235 REQUIRES(!Locks::classlinker_classes_lock_); 1236 1237 // Check that c1 == FindSystemClass(self, descriptor). Abort with class dumps otherwise. 1238 void CheckSystemClass(Thread* self, Handle<mirror::Class> c1, const char* descriptor) 1239 REQUIRES(!Locks::dex_lock_) 1240 REQUIRES_SHARED(Locks::mutator_lock_); 1241 1242 // Allocate method arrays for interfaces. 1243 bool AllocateIfTableMethodArrays(Thread* self, 1244 Handle<mirror::Class> klass, 1245 Handle<mirror::IfTable> iftable) 1246 REQUIRES_SHARED(Locks::mutator_lock_); 1247 1248 // Sets imt_ref appropriately for LinkInterfaceMethods. 1249 // If there is no method in the imt location of imt_ref it will store the given method there. 1250 // Otherwise it will set the conflict method which will figure out which method to use during 1251 // runtime. 1252 void SetIMTRef(ArtMethod* unimplemented_method, 1253 ArtMethod* imt_conflict_method, 1254 ArtMethod* current_method, 1255 /*out*/bool* new_conflict, 1256 /*out*/ArtMethod** imt_ref) REQUIRES_SHARED(Locks::mutator_lock_); 1257 1258 void FillIMTFromIfTable(ObjPtr<mirror::IfTable> if_table, 1259 ArtMethod* unimplemented_method, 1260 ArtMethod* imt_conflict_method, 1261 ObjPtr<mirror::Class> klass, 1262 bool create_conflict_tables, 1263 bool ignore_copied_methods, 1264 /*out*/bool* new_conflict, 1265 /*out*/ArtMethod** imt) REQUIRES_SHARED(Locks::mutator_lock_); 1266 1267 void FillImtFromSuperClass(Handle<mirror::Class> klass, 1268 ArtMethod* unimplemented_method, 1269 ArtMethod* imt_conflict_method, 1270 bool* new_conflict, 1271 ArtMethod** imt) REQUIRES_SHARED(Locks::mutator_lock_); 1272 1273 // Check invoke type against the referenced class. Throws IncompatibleClassChangeError 1274 // (if `kThrowOnError`) and returns true on mismatch (kInterface on a non-interface class, 1275 // kVirtual on interface, kDefault on interface for dex files not supporting default methods), 1276 // otherwise returns false. 1277 template <bool kThrowOnError, typename ClassGetter> 1278 static bool CheckInvokeClassMismatch(ObjPtr<mirror::DexCache> dex_cache, 1279 InvokeType type, 1280 ClassGetter class_getter) 1281 REQUIRES_SHARED(Locks::mutator_lock_); 1282 // Helper that feeds the above function with `ClassGetter` doing `LookupResolvedType()`. 1283 template <bool kThrow> 1284 bool CheckInvokeClassMismatch(ObjPtr<mirror::DexCache> dex_cache, 1285 InvokeType type, 1286 uint32_t method_idx, 1287 ObjPtr<mirror::ClassLoader> class_loader) 1288 REQUIRES_SHARED(Locks::mutator_lock_); 1289 1290 std::vector<const DexFile*> boot_class_path_; 1291 std::vector<std::unique_ptr<const DexFile>> boot_dex_files_; 1292 1293 // JNI weak globals and side data to allow dex caches to get unloaded. We lazily delete weak 1294 // globals when we register new dex files. 1295 std::list<DexCacheData> dex_caches_ GUARDED_BY(Locks::dex_lock_); 1296 1297 // This contains the class loaders which have class tables. It is populated by 1298 // InsertClassTableForClassLoader. 1299 std::list<ClassLoaderData> class_loaders_ 1300 GUARDED_BY(Locks::classlinker_classes_lock_); 1301 1302 // Boot class path table. Since the class loader for this is null. 1303 std::unique_ptr<ClassTable> boot_class_table_ GUARDED_BY(Locks::classlinker_classes_lock_); 1304 1305 // New class roots, only used by CMS since the GC needs to mark these in the pause. 1306 std::vector<GcRoot<mirror::Class>> new_class_roots_ GUARDED_BY(Locks::classlinker_classes_lock_); 1307 1308 // Boot image oat files with new .bss GC roots to be visited in the pause by CMS. 1309 std::vector<const OatFile*> new_bss_roots_boot_oat_files_ 1310 GUARDED_BY(Locks::classlinker_classes_lock_); 1311 1312 // Number of times we've searched dex caches for a class. After a certain number of misses we move 1313 // the classes into the class_table_ to avoid dex cache based searches. 1314 Atomic<uint32_t> failed_dex_cache_class_lookups_; 1315 1316 // Well known mirror::Class roots. 1317 GcRoot<mirror::ObjectArray<mirror::Class>> class_roots_; 1318 1319 // The interface table used by all arrays. 1320 GcRoot<mirror::IfTable> array_iftable_; 1321 1322 // A cache of the last FindArrayClass results. The cache serves to avoid creating array class 1323 // descriptors for the sake of performing FindClass. 1324 static constexpr size_t kFindArrayCacheSize = 16; 1325 GcRoot<mirror::Class> find_array_class_cache_[kFindArrayCacheSize]; 1326 size_t find_array_class_cache_next_victim_; 1327 1328 bool init_done_; 1329 bool log_new_roots_ GUARDED_BY(Locks::classlinker_classes_lock_); 1330 1331 InternTable* intern_table_; 1332 1333 // Trampolines within the image the bounce to runtime entrypoints. Done so that there is a single 1334 // patch point within the image. TODO: make these proper relocations. 1335 const void* quick_resolution_trampoline_; 1336 const void* quick_imt_conflict_trampoline_; 1337 const void* quick_generic_jni_trampoline_; 1338 const void* quick_to_interpreter_bridge_trampoline_; 1339 1340 // Image pointer size. 1341 PointerSize image_pointer_size_; 1342 1343 std::unique_ptr<ClassHierarchyAnalysis> cha_; 1344 1345 class FindVirtualMethodHolderVisitor; 1346 1347 friend class AppImageClassLoadersAndDexCachesHelper; 1348 friend class ImageDumper; // for DexLock 1349 friend struct linker::CompilationHelper; // For Compile in ImageTest. 1350 friend class linker::ImageWriter; // for GetClassRoots 1351 friend class linker::OatWriter; // for boot image string/class table slot address lookup. 1352 friend class JniCompilerTest; // for GetRuntimeQuickGenericJniStub 1353 friend class JniInternalTest; // for GetRuntimeQuickGenericJniStub 1354 friend class VMClassLoader; // for LookupClass and FindClassInBaseDexClassLoader. 1355 ART_FRIEND_TEST(ClassLinkerTest, RegisterDexFileName); // for DexLock, and RegisterDexFileLocked 1356 ART_FRIEND_TEST(mirror::DexCacheMethodHandlesTest, Open); // for AllocDexCache 1357 ART_FRIEND_TEST(mirror::DexCacheTest, Open); // for AllocDexCache 1358 DISALLOW_COPY_AND_ASSIGN(ClassLinker); 1359 }; 1360 1361 class ClassLoadCallback { 1362 public: ~ClassLoadCallback()1363 virtual ~ClassLoadCallback() {} 1364 1365 // If set we will replace initial_class_def & initial_dex_file with the final versions. The 1366 // callback author is responsible for ensuring these are allocated in such a way they can be 1367 // cleaned up if another transformation occurs. Note that both must be set or null/unchanged on 1368 // return. 1369 // Note: the class may be temporary, in which case a following ClassPrepare event will be a 1370 // different object. It is the listener's responsibility to handle this. 1371 // Note: This callback is rarely useful so a default implementation has been given that does 1372 // nothing. ClassPreDefine(const char * descriptor ATTRIBUTE_UNUSED,Handle<mirror::Class> klass ATTRIBUTE_UNUSED,Handle<mirror::ClassLoader> class_loader ATTRIBUTE_UNUSED,const DexFile & initial_dex_file ATTRIBUTE_UNUSED,const DexFile::ClassDef & initial_class_def ATTRIBUTE_UNUSED,DexFile const ** final_dex_file ATTRIBUTE_UNUSED,DexFile::ClassDef const ** final_class_def ATTRIBUTE_UNUSED)1373 virtual void ClassPreDefine(const char* descriptor ATTRIBUTE_UNUSED, 1374 Handle<mirror::Class> klass ATTRIBUTE_UNUSED, 1375 Handle<mirror::ClassLoader> class_loader ATTRIBUTE_UNUSED, 1376 const DexFile& initial_dex_file ATTRIBUTE_UNUSED, 1377 const DexFile::ClassDef& initial_class_def ATTRIBUTE_UNUSED, 1378 /*out*/DexFile const** final_dex_file ATTRIBUTE_UNUSED, 1379 /*out*/DexFile::ClassDef const** final_class_def ATTRIBUTE_UNUSED) 1380 REQUIRES_SHARED(Locks::mutator_lock_) {} 1381 1382 // A class has been loaded. 1383 // Note: the class may be temporary, in which case a following ClassPrepare event will be a 1384 // different object. It is the listener's responsibility to handle this. 1385 virtual void ClassLoad(Handle<mirror::Class> klass) REQUIRES_SHARED(Locks::mutator_lock_) = 0; 1386 1387 // A class has been prepared, i.e., resolved. As the ClassLoad event might have been for a 1388 // temporary class, provide both the former and the current class. 1389 virtual void ClassPrepare(Handle<mirror::Class> temp_klass, 1390 Handle<mirror::Class> klass) REQUIRES_SHARED(Locks::mutator_lock_) = 0; 1391 }; 1392 1393 } // namespace art 1394 1395 #endif // ART_RUNTIME_CLASS_LINKER_H_ 1396