Lines Matching refs:klass

253 static void EnsureSkipAccessChecksMethods(Handle<mirror::Class> klass, PointerSize pointer_size)  in EnsureSkipAccessChecksMethods()  argument
257 if (!klass->WasVerificationAttempted()) { in EnsureSkipAccessChecksMethods()
258 klass->SetSkipAccessChecksFlagOnAllMethods(pointer_size); in EnsureSkipAccessChecksMethods()
259 klass->SetVerificationAttempted(); in EnsureSkipAccessChecksMethods()
263 for (ArtMethod& m : klass->GetMethods(pointer_size)) { in EnsureSkipAccessChecksMethods()
293 void AddClass(Thread* self, ObjPtr<mirror::Class> klass) REQUIRES_SHARED(Locks::mutator_lock_) { in AddClass() argument
294 DCHECK_EQ(klass->GetStatus(), ClassStatus::kInitialized); in AddClass()
296 classes_[num_classes_] = self->GetJniEnv()->GetVm()->AddWeakGlobalRef(self, klass); in AddClass()
330 MutableHandle<mirror::Class> klass = hs.NewHandle<mirror::Class>(nullptr); in AdjustThreadVisibilityCounter() local
333 klass.Assign(ObjPtr<mirror::Class>::DownCast(self->DecodeJObject(classes_[i]))); in AdjustThreadVisibilityCounter()
335 if (klass != nullptr) { in AdjustThreadVisibilityCounter()
336 mirror::Class::SetStatus(klass, ClassStatus::kVisiblyInitialized, self); in AdjustThreadVisibilityCounter()
337 class_linker_->FixupStaticTrampolines(self, klass.Get()); in AdjustThreadVisibilityCounter()
422 void ClassLinker::ForceClassInitialized(Thread* self, Handle<mirror::Class> klass) { in ForceClassInitialized() argument
423 ClassLinker::VisiblyInitializedCallback* cb = MarkClassInitialized(self, klass); in ForceClassInitialized()
432 Thread* self, Handle<mirror::Class> klass) { in MarkClassInitialized() argument
436 mirror::Class::SetStatus(klass, ClassStatus::kVisiblyInitialized, self); in MarkClassInitialized()
437 FixupStaticTrampolines(self, klass.Get()); in MarkClassInitialized()
443 mirror::Class::SetStatus(klass, ClassStatus::kVisiblyInitialized, self); in MarkClassInitialized()
444 FixupStaticTrampolines(self, klass.Get()); in MarkClassInitialized()
447 mirror::Class::SetStatus(klass, ClassStatus::kInitialized, self); in MarkClassInitialized()
453 visibly_initialized_callback_->AddClass(self, klass.Get()); in MarkClassInitialized()
572 static void VlogClassInitializationFailure(Handle<mirror::Class> klass) in VlogClassInitializationFailure() argument
576 LOG(INFO) << "Failed to initialize class " << klass->GetDescriptor(&temp) << " from " in VlogClassInitializationFailure()
577 << klass->GetLocation() << "\n" << Thread::Current()->GetException()->Dump(); in VlogClassInitializationFailure()
581 static void WrapExceptionInInitializer(Handle<mirror::Class> klass) in WrapExceptionInInitializer() argument
591 if (klass->GetClassLoader() == nullptr && !Runtime::Current()->IsAotCompiler()) { in WrapExceptionInInitializer()
597 LOG(known_impossible ? FATAL : WARNING) << klass->GetDescriptor(&tmp) in WrapExceptionInInitializer()
610 VlogClassInitializationFailure(klass); in WrapExceptionInInitializer()
1093 ObjPtr<mirror::Class> klass = GetClassRoot(class_root); in FinishInit() local
1094 CHECK(klass != nullptr); in FinishInit()
1095 DCHECK(klass->IsArrayClass() || klass->IsPrimitive() || klass->GetDexCache() != nullptr); in FinishInit()
1262 ObjPtr<mirror::Class> klass = obj->AsClass(); in InitFromBootImage() local
1263 for (ArtMethod& m : klass->GetMethods(data.pointer_size)) { in InitFromBootImage()
1354 bool operator()(ObjPtr<mirror::Class> klass) REQUIRES_SHARED(Locks::mutator_lock_) { in operator ()() argument
1356 cha_->ResetSingleImplementationInHierarchy(klass, allocator_, pointer_size_); in operator ()()
1415 void operator()(ObjPtr<mirror::Class> klass ATTRIBUTE_UNUSED, in operator ()()
1596 ObjPtr<mirror::Class> klass = method.GetDeclaringClassUnchecked(); in Update()
1597 if (klass != nullptr) { in Update()
1598 CHECK(live_bitmap->Test(klass.Ptr())) << "Image method has unmarked declaring class"; in Update()
1741 auto klass = obj->AsClass(); in CheckObjects() local
1742 for (ArtField& field : klass->GetIFields()) { in CheckObjects()
1743 CHECK_EQ(field.GetDeclaringClass(), klass); in CheckObjects()
1745 for (ArtField& field : klass->GetSFields()) { in CheckObjects()
1746 CHECK_EQ(field.GetDeclaringClass(), klass); in CheckObjects()
1749 for (ArtMethod& m : klass->GetMethods(pointer_size)) { in CheckObjects()
1750 ic.CheckArtMethod(&m, klass); in CheckObjects()
1752 ObjPtr<mirror::PointerArray> vtable = klass->GetVTable(); in CheckObjects()
1756 if (klass->ShouldHaveImt()) { in CheckObjects()
1757 ImTable* imt = klass->GetImt(pointer_size); in CheckObjects()
1762 if (klass->ShouldHaveEmbeddedVTable()) { in CheckObjects()
1763 for (int32_t i = 0; i < klass->GetEmbeddedVTableLength(); ++i) { in CheckObjects()
1764 ic.CheckArtMethod(klass->GetEmbeddedVTableEntry(i, pointer_size), nullptr); in CheckObjects()
1767 ObjPtr<mirror::IfTable> iftable = klass->GetIfTable(); in CheckObjects()
1768 for (int32_t i = 0; i < klass->GetIfTableCount(); ++i) { in CheckObjects()
1845 ObjPtr<mirror::Class> klass = method.GetDeclaringClass(); in VerifyAppImage()
1846 if (klass != nullptr && !Runtime::Current()->GetHeap()->ObjectIsInBootImageSpace(klass)) { in VerifyAppImage()
1847 CHECK_EQ(class_table->LookupByDescriptor(klass), klass) in VerifyAppImage()
1848 << mirror::Class::PrettyClass(klass); in VerifyAppImage()
1854 auto verify_direct_interfaces_in_table = [&](ObjPtr<mirror::Class> klass) in VerifyAppImage()
1856 if (!klass->IsPrimitive() && klass->GetClassLoader() == class_loader.Get()) { in VerifyAppImage()
1857 classes.push_back(klass); in VerifyAppImage()
1863 for (ObjPtr<mirror::Class> klass : classes) { in VerifyAppImage()
1864 for (uint32_t i = 0, num = klass->NumDirectInterfaces(); i != num; ++i) { in VerifyAppImage()
1865 CHECK(klass->GetDirectInterface(self, klass, i) != nullptr) in VerifyAppImage()
1866 << klass->PrettyDescriptor() << " iface #" << i; in VerifyAppImage()
2047 ObjPtr<mirror::Class> klass(root.Read()); in AddImageSpace() local
2051 if (klass->GetClassLoader<kDefaultVerifyFlags, kWithoutReadBarrier>() != nullptr) { in AddImageSpace()
2052 klass->SetClassLoader(loader); in AddImageSpace()
2212 bool operator()(ObjPtr<mirror::Class> klass) override REQUIRES_SHARED(Locks::mutator_lock_) { in operator ()() argument
2213 if (klass->GetClassLoader() != defining_class_loader_) { in operator ()()
2216 return (*visitor_)(klass); in operator ()()
2249 bool operator()(ObjPtr<mirror::Class> klass) override { in operator ()() argument
2250 classes_.push_back(klass); in operator ()()
2261 bool operator()(ObjPtr<mirror::Class> klass) override REQUIRES_SHARED(Locks::mutator_lock_) { in operator ()() argument
2264 arr_->Set(index_ - 1, klass); in operator ()()
2286 for (ObjPtr<mirror::Class> klass : accumulator.classes_) { in VisitClassesWithoutClassesLock()
2287 if (!visitor->operator()(klass)) { in VisitClassesWithoutClassesLock()
2318 ObjPtr<mirror::Class> klass = classes->Get(i); in VisitClassesWithoutClassesLock() local
2319 if (klass != nullptr && !visitor->operator()(klass)) { in VisitClassesWithoutClassesLock()
2534 ObjPtr<mirror::Class> klass) { in EnsureResolved() argument
2535 DCHECK(klass != nullptr); in EnsureResolved()
2538 HandleWrapperObjPtr<mirror::Class> h = hs.NewHandleWrapper(&klass); in EnsureResolved()
2543 if (init_done_ && klass->IsTemp()) { in EnsureResolved()
2544 CHECK(!klass->IsResolved()); in EnsureResolved()
2545 if (klass->IsErroneousUnresolved()) { in EnsureResolved()
2546 ThrowEarlierClassFailure(klass); in EnsureResolved()
2550 Handle<mirror::Class> h_class(hs.NewHandle(klass)); in EnsureResolved()
2562 klass = LookupClass(self, descriptor, h_class.Get()->GetClassLoader()); in EnsureResolved()
2571 while (!klass->IsResolved() && !klass->IsErroneousUnresolved()) { in EnsureResolved()
2573 HandleWrapperObjPtr<mirror::Class> h_class(hs.NewHandleWrapper(&klass)); in EnsureResolved()
2599 if (klass->IsErroneousUnresolved()) { in EnsureResolved()
2600 ThrowEarlierClassFailure(klass); in EnsureResolved()
2604 CHECK(klass->IsResolved()) << klass->PrettyClass(); in EnsureResolved()
2606 return klass; in EnsureResolved()
2779 ObjPtr<mirror::Class> klass = LookupClass(self, descriptor, hash, nullptr); in FindClassInBootClassLoaderClassPath() local
2780 if (klass != nullptr) { in FindClassInBootClassLoaderClassPath()
2781 *result = EnsureResolved(self, descriptor, klass); in FindClassInBootClassLoaderClassPath()
2851 ObjPtr<mirror::Class> klass = LookupClass(self, descriptor, hash, class_loader.Get()); in FindClass() local
2852 if (klass != nullptr) { in FindClass()
2853 return EnsureResolved(self, descriptor, klass); in FindClass()
3050 ObjPtr<mirror::Class> Finish(ObjPtr<mirror::Class> klass) in Finish()
3053 Handle<mirror::Class> h_klass(hs.NewHandle(klass)); in Finish()
3077 auto klass = hs.NewHandle<mirror::Class>(nullptr); in DefineClass() local
3083 klass.Assign(GetClassRoot<mirror::Object>(this)); in DefineClass()
3085 klass.Assign(GetClassRoot<mirror::Class>(this)); in DefineClass()
3087 klass.Assign(GetClassRoot<mirror::String>(this)); in DefineClass()
3089 klass.Assign(GetClassRoot<mirror::Reference>(this)); in DefineClass()
3091 klass.Assign(GetClassRoot<mirror::DexCache>(this)); in DefineClass()
3093 klass.Assign(GetClassRoot<mirror::ClassExt>(this)); in DefineClass()
3135 if (klass == nullptr) { in DefineClass()
3141 klass.Assign(AllocClass(self, SizeOfClassWithoutEmbeddedTables(dex_file, dex_class_def))); in DefineClass()
3146 if (UNLIKELY(klass == nullptr)) { in DefineClass()
3157 klass, in DefineClass()
3172 klass->SetDexCache(dex_cache); in DefineClass()
3173 SetupClass(*new_dex_file, *new_class_def, klass, class_loader.Get()); in DefineClass()
3178 klass->SetStringClass(); in DefineClass()
3182 ObjectLock<mirror::Class> lock(self, klass); in DefineClass()
3183 klass->SetClinitThreadId(self->GetTid()); in DefineClass()
3185 klass->SetIfTable(GetClassRoot<mirror::Object>(this)->GetIfTable()); in DefineClass()
3188 ObjPtr<mirror::Class> existing = InsertClass(descriptor, klass.Get(), hash); in DefineClass()
3199 LoadClass(self, *new_dex_file, *new_class_def, klass); in DefineClass()
3204 if (!klass->IsErroneous()) { in DefineClass()
3205 mirror::Class::SetStatus(klass, ClassStatus::kErrorUnresolved, self); in DefineClass()
3211 CHECK(!klass->IsLoaded()); in DefineClass()
3212 if (!LoadSuperAndInterfaces(klass, *new_dex_file)) { in DefineClass()
3214 if (!klass->IsErroneous()) { in DefineClass()
3215 mirror::Class::SetStatus(klass, ClassStatus::kErrorUnresolved, self); in DefineClass()
3219 CHECK(klass->IsLoaded()); in DefineClass()
3223 Runtime::Current()->GetRuntimeCallbacks()->ClassLoad(klass); in DefineClass()
3226 CHECK(!klass->IsResolved()); in DefineClass()
3231 if (!LinkClass(self, descriptor, klass, interfaces, &h_new_class)) { in DefineClass()
3233 if (!klass->IsErroneous()) { in DefineClass()
3234 mirror::Class::SetStatus(klass, ClassStatus::kErrorUnresolved, self); in DefineClass()
3265 Runtime::Current()->GetRuntimeCallbacks()->ClassPrepare(klass, h_new_class); in DefineClass()
3422 void ClassLinker::FixupStaticTrampolines(Thread* self, ObjPtr<mirror::Class> klass) { in FixupStaticTrampolines() argument
3424 DCHECK(klass->IsVisiblyInitialized()) << klass->PrettyDescriptor(); in FixupStaticTrampolines()
3425 size_t num_direct_methods = klass->NumDirectMethods(); in FixupStaticTrampolines()
3429 if (UNLIKELY(klass->IsProxyClass())) { in FixupStaticTrampolines()
3433 if (std::any_of(klass->GetDirectMethods(pointer_size).begin(), in FixupStaticTrampolines()
3434 klass->GetDirectMethods(pointer_size).end(), in FixupStaticTrampolines()
3438 ArtMethod* first_method = klass->GetDirectMethod(0u, pointer_size); in FixupStaticTrampolines()
3439 ArtMethod* last_method = klass->GetDirectMethod(num_direct_methods - 1u, pointer_size); in FixupStaticTrampolines()
3454 const DexFile& dex_file = klass->GetDexFile(); in FixupStaticTrampolines()
3457 klass->GetDexClassDefIndex(), in FixupStaticTrampolines()
3461 ArtMethod* method = klass->GetDirectMethod(method_index, pointer_size); in FixupStaticTrampolines()
3582 Handle<mirror::Class> klass, in SetupClass() argument
3584 CHECK(klass != nullptr); in SetupClass()
3585 CHECK(klass->GetDexCache() != nullptr); in SetupClass()
3586 CHECK_EQ(ClassStatus::kNotReady, klass->GetStatus()); in SetupClass()
3590 klass->SetClass(GetClassRoot<mirror::Class>(this)); in SetupClass()
3593 klass->SetAccessFlagsDuringLinking(access_flags); in SetupClass()
3594 klass->SetClassLoader(class_loader); in SetupClass()
3595 DCHECK_EQ(klass->GetPrimitiveType(), Primitive::kPrimNot); in SetupClass()
3596 mirror::Class::SetStatus(klass, ClassStatus::kIdx, nullptr); in SetupClass()
3598 klass->SetDexClassDefIndex(dex_file.GetIndexForClassDef(dex_class_def)); in SetupClass()
3599 klass->SetDexTypeIndex(dex_class_def.class_idx_); in SetupClass()
3663 Handle<mirror::Class> klass) { in LoadClass() argument
3666 /* parse_hiddenapi_class_data= */ klass->IsBootStrapClassLoaded()); in LoadClass()
3678 LinearAlloc* const allocator = GetAllocatorForClassLoader(klass->GetClassLoader()); in LoadClass()
3693 ? OatFile::FindOatClass(dex_file, klass->GetDexClassDefIndex(), &has_oat_class) in LoadClass()
3696 klass->SetMethodsPtr( in LoadClass()
3711 LoadField(field, klass, &sfields->At(num_sfields)); in LoadClass()
3719 LoadField(field, klass, &ifields->At(num_ifields)); in LoadClass()
3724 ArtMethod* art_method = klass->GetDirectMethodUnchecked(class_def_method_index, in LoadClass()
3726 LoadMethod(dex_file, method, klass, art_method); in LoadClass()
3739 ArtMethod* art_method = klass->GetVirtualMethodUnchecked( in LoadClass()
3742 LoadMethod(dex_file, method, klass, art_method); in LoadClass()
3748 LOG(WARNING) << "Duplicate fields in class " << klass->PrettyDescriptor() in LoadClass()
3761 klass->SetSFieldsPtr(sfields); in LoadClass()
3762 DCHECK_EQ(klass->NumStaticFields(), num_sfields); in LoadClass()
3763 klass->SetIFieldsPtr(ifields); in LoadClass()
3764 DCHECK_EQ(klass->NumInstanceFields(), num_ifields); in LoadClass()
3767 WriteBarrier::ForEveryFieldWrite(klass.Get()); in LoadClass()
3772 Handle<mirror::Class> klass, in LoadField() argument
3776 dst->SetDeclaringClass(klass.Get()); in LoadField()
3784 Handle<mirror::Class> klass, in LoadMethod() argument
3792 dst->SetDeclaringClass(klass.Get()); in LoadMethod()
3801 if (klass->GetClassLoader() != nullptr) { // All non-boot finalizer methods are flagged. in LoadMethod()
3802 klass->SetFinalizable(); in LoadMethod()
3805 const char* klass_descriptor = klass->GetDescriptor(&temp); in LoadMethod()
3813 klass->SetFinalizable(); in LoadMethod()
3826 << klass->PrettyDescriptor() << " in dex file " << dex_file.GetLocation(); in LoadMethod()
3838 if (klass->IsInterface() && dst->IsAbstract()) { in LoadMethod()
4291 ObjPtr<mirror::Class> klass = ObjPtr<mirror::Class>::DownCast(obj); in CreateArrayClass() local
4292 klass->SetComponentType(component_type.Get()); in CreateArrayClass()
4297 FinishArrayClassSetup(klass); in CreateArrayClass()
4354 ObjPtr<mirror::Class> klass, in InsertClass() argument
4358 ObjPtr<mirror::DexCache> dex_cache = klass->GetDexCache(); in InsertClass()
4368 const ObjPtr<mirror::ClassLoader> class_loader = klass->GetClassLoader(); in InsertClass()
4374 VerifyObject(klass); in InsertClass()
4375 class_table->InsertWithHash(klass, hash); in InsertClass()
4381 new_class_roots_.push_back(GcRoot<mirror::Class>(klass)); in InsertClass()
4386 for (ArtMethod& method : klass->GetCopiedMethods(image_pointer_size_)) { in InsertClass()
4387 CHECK_EQ(GetHoldingClassOfCopiedMethod(&method), klass); in InsertClass()
4402 void ClassLinker::UpdateClassMethods(ObjPtr<mirror::Class> klass, in UpdateClassMethods() argument
4404 klass->SetMethodsPtrUnchecked(new_methods, in UpdateClassMethods()
4405 klass->NumDirectMethods(), in UpdateClassMethods()
4406 klass->NumDeclaredVirtualMethods()); in UpdateClassMethods()
4408 WriteBarrier::ForEveryFieldWrite(klass); in UpdateClassMethods()
4466 ObjPtr<mirror::Class> klass = class_table->Lookup(descriptor_, hash_); in Visit() local
4468 if (klass != nullptr && klass->GetClassLoader() == class_loader) { in Visit()
4469 result_->push_back(klass); in Visit()
4485 ObjPtr<mirror::Class> klass = boot_class_table_->Lookup(descriptor, hash); in LookupClasses() local
4486 if (klass != nullptr) { in LookupClasses()
4487 DCHECK(klass->GetClassLoader() == nullptr); in LookupClasses()
4488 result.push_back(klass); in LookupClasses()
4496 Handle<mirror::Class> klass, in AttemptSupertypeVerification() argument
4499 DCHECK(klass != nullptr); in AttemptSupertypeVerification()
4516 klass->PrettyDescriptor().c_str(), in AttemptSupertypeVerification()
4518 LOG(WARNING) << error_msg << " in " << klass->GetDexCache()->GetLocation()->ToModifiedUtf8(); in AttemptSupertypeVerification()
4526 ThrowVerifyError(klass.Get(), "%s", error_msg.c_str()); in AttemptSupertypeVerification()
4530 ClassReference ref(klass->GetDexCache()->GetDexFile(), klass->GetDexClassDefIndex()); in AttemptSupertypeVerification()
4535 ObjectLock<mirror::Class> super_lock(self, klass); in AttemptSupertypeVerification()
4536 mirror::Class::SetStatus(klass, ClassStatus::kErrorResolved, self); in AttemptSupertypeVerification()
4542 Handle<mirror::Class> klass, in VerifyClass() argument
4546 ObjectLock<mirror::Class> lock(self, klass); in VerifyClass()
4549 ClassStatus old_status = klass->GetStatus(); in VerifyClass()
4555 CHECK(klass->IsErroneous() || (klass->GetStatus() >= old_status)) in VerifyClass()
4556 << "Class '" << klass->PrettyClass() in VerifyClass()
4558 << " to " << klass->GetStatus(); in VerifyClass()
4559 old_status = klass->GetStatus(); in VerifyClass()
4564 if (klass->IsErroneous()) { in VerifyClass()
4565 ThrowEarlierClassFailure(klass.Get()); in VerifyClass()
4570 if (klass->IsVerified()) { in VerifyClass()
4571 EnsureSkipAccessChecksMethods(klass, image_pointer_size_); in VerifyClass()
4573 verifier_deps->ContainsDexFile(klass->GetDexFile()) && in VerifyClass()
4574 !verifier_deps->HasRecordedVerifiedStatus(klass->GetDexFile(), *klass->GetClassDef()) && in VerifyClass()
4583 PerformClassVerification(self, verifier_deps, klass, log_level, &error_msg); in VerifyClass()
4591 if (klass->IsVerifiedNeedsAccessChecks()) { in VerifyClass()
4595 klass->SetVerificationAttempted(); in VerifyClass()
4596 mirror::Class::SetStatus(klass, ClassStatus::kVerified, self); in VerifyClass()
4603 if (klass->ShouldVerifyAtRuntime()) { in VerifyClass()
4608 DCHECK_EQ(klass->GetStatus(), ClassStatus::kResolved); in VerifyClass()
4609 mirror::Class::SetStatus(klass, ClassStatus::kVerifying, self); in VerifyClass()
4613 mirror::Class::SetStatus(klass, ClassStatus::kVerified, self); in VerifyClass()
4614 EnsureSkipAccessChecksMethods(klass, image_pointer_size_); in VerifyClass()
4620 << klass->PrettyDescriptor() in VerifyClass()
4621 << " in " << klass->GetDexCache()->GetLocation()->ToModifiedUtf8(); in VerifyClass()
4625 MutableHandle<mirror::Class> supertype(hs.NewHandle(klass->GetSuperClass())); in VerifyClass()
4628 !AttemptSupertypeVerification(self, verifier_deps, klass, supertype)) { in VerifyClass()
4644 && !klass->IsInterface()) { // See (2) in VerifyClass()
4645 int32_t iftable_count = klass->GetIfTableCount(); in VerifyClass()
4649 iface.Assign(klass->GetIfTable()->GetInterface(i)); in VerifyClass()
4654 } else if (UNLIKELY(!AttemptSupertypeVerification(self, verifier_deps, klass, iface))) { in VerifyClass()
4671 supertype.Get() == klass->GetSuperClass() || in VerifyClass()
4675 const DexFile& dex_file = *klass->GetDexCache()->GetDexFile(); in VerifyClass()
4677 bool preverified = VerifyClassUsingOatFile(self, dex_file, klass, oat_file_class_status); in VerifyClass()
4680 << klass->PrettyDescriptor() in VerifyClass()
4681 << " in " << klass->GetDexCache()->GetLocation()->ToModifiedUtf8() in VerifyClass()
4694 verifier_failure = PerformClassVerification(self, verifier_deps, klass, log_level, &error_msg); in VerifyClass()
4698 ObjectLock<mirror::Class> lock(self, klass); in VerifyClass()
4703 << klass->PrettyDescriptor() in VerifyClass()
4704 << " in " << klass->GetDexCache()->GetLocation()->ToModifiedUtf8() in VerifyClass()
4709 ResolveClassExceptionHandlerTypes(klass); in VerifyClass()
4716 mirror::Class::SetStatus(klass, ClassStatus::kVerified, self); in VerifyClass()
4720 mirror::Class::SetStatus(klass, ClassStatus::kRetryVerificationAtRuntime, self); in VerifyClass()
4734 mirror::Class::SetStatus(klass, ClassStatus::kRetryVerificationAtRuntime, self); in VerifyClass()
4736 mirror::Class::SetStatus(klass, ClassStatus::kVerifiedNeedsAccessChecks, self); in VerifyClass()
4739 mirror::Class::SetStatus(klass, ClassStatus::kVerified, self); in VerifyClass()
4742 klass->SetVerificationAttempted(); in VerifyClass()
4746 VLOG(verifier) << "Verification failed on class " << klass->PrettyDescriptor() in VerifyClass()
4747 << " in " << klass->GetDexCache()->GetLocation()->ToModifiedUtf8() in VerifyClass()
4750 ThrowVerifyError(klass.Get(), "%s", error_msg.c_str()); in VerifyClass()
4751 mirror::Class::SetStatus(klass, ClassStatus::kErrorResolved, self); in VerifyClass()
4758 klass->SetVerificationAttempted(); in VerifyClass()
4766 EnsureSkipAccessChecksMethods(klass, image_pointer_size_); in VerifyClass()
4773 ClassReference(&klass->GetDexFile(), klass->GetDexClassDefIndex()), klass->GetStatus()); in VerifyClass()
4780 Handle<mirror::Class> klass, in PerformClassVerification() argument
4786 klass.Get(), in PerformClassVerification()
4796 Handle<mirror::Class> klass, in VerifyClassUsingOatFile() argument
4805 if (!callbacks->CanUseOatStatusForVerification(klass.Get())) { in VerifyClassUsingOatFile()
4816 uint16_t class_def_index = klass->GetDexClassDefIndex(); in VerifyClassUsingOatFile()
4830 oat_file_class_status = oat_file->GetVdexFile()->ComputeClassStatus(self, klass); in VerifyClassUsingOatFile()
4843 << klass->PrettyClass() << " " << dex_file.GetLocation(); in VerifyClassUsingOatFile()
4859 << " " << dex_file.GetLocation() << " " << klass->PrettyClass() << " " in VerifyClassUsingOatFile()
4860 << klass->GetDescriptor(&temp); in VerifyClassUsingOatFile()
4864 void ClassLinker::ResolveClassExceptionHandlerTypes(Handle<mirror::Class> klass) { in ResolveClassExceptionHandlerTypes() argument
4865 for (ArtMethod& method : klass->GetMethods(image_pointer_size_)) { in ResolveClassExceptionHandlerTypes()
5054 MutableHandle<mirror::Class> klass = hs.NewHandle<mirror::Class>(nullptr); in CreateProxyClass() local
5062 if (!LinkClass(self, descriptor, temp_klass, h_interfaces, &klass)) { in CreateProxyClass()
5070 CHECK_NE(temp_klass.Get(), klass.Get()); in CreateProxyClass()
5072 CHECK_EQ(interfaces_sfield.GetDeclaringClass(), klass.Get()); in CreateProxyClass()
5074 klass.Get(), in CreateProxyClass()
5076 CHECK_EQ(throws_sfield.GetDeclaringClass(), klass.Get()); in CreateProxyClass()
5078 klass.Get(), in CreateProxyClass()
5081 Runtime::Current()->GetRuntimeCallbacks()->ClassPrepare(temp_klass, klass); in CreateProxyClass()
5087 SubtypeCheck<ObjPtr<mirror::Class>>::EnsureInitialized(klass.Get()); in CreateProxyClass()
5094 ObjectLock<mirror::Class> initialization_lock(self, klass); in CreateProxyClass()
5095 EnsureSkipAccessChecksMethods(klass, image_pointer_size_); in CreateProxyClass()
5097 callback = MarkClassInitialized(self, klass); in CreateProxyClass()
5105 CHECK(klass->GetIFieldsPtr() == nullptr); in CreateProxyClass()
5106 CheckProxyConstructor(klass->GetDirectMethod(0, image_pointer_size_)); in CreateProxyClass()
5109 auto* virtual_method = klass->GetVirtualMethodUnchecked(i, image_pointer_size_); in CreateProxyClass()
5117 CHECK_EQ(ArtField::PrettyField(klass->GetStaticField(0)), interfaces_field_name); in CreateProxyClass()
5121 CHECK_EQ(ArtField::PrettyField(klass->GetStaticField(1)), throws_field_name); in CreateProxyClass()
5123 CHECK_EQ(klass.Get()->GetProxyInterfaces(), in CreateProxyClass()
5125 CHECK_EQ(klass.Get()->GetProxyThrows(), in CreateProxyClass()
5128 return klass.Get(); in CreateProxyClass()
5131 void ClassLinker::CreateProxyConstructor(Handle<mirror::Class> klass, ArtMethod* out) { in CreateProxyConstructor() argument
5153 out->SetDeclaringClass(klass.Get()); in CreateProxyConstructor()
5167 void ClassLinker::CreateProxyMethod(Handle<mirror::Class> klass, ArtMethod* prototype, in CreateProxyMethod() argument
5175 out->SetDeclaringClass(klass.Get()); in CreateProxyMethod()
5204 bool ClassLinker::CanWeInitializeClass(ObjPtr<mirror::Class> klass, bool can_init_statics, in CanWeInitializeClass() argument
5211 ArtMethod* clinit = klass->FindClassInitializer(image_pointer_size_); in CanWeInitializeClass()
5216 if (klass->NumStaticFields() != 0) { in CanWeInitializeClass()
5217 const dex::ClassDef* dex_class_def = klass->GetClassDef(); in CanWeInitializeClass()
5226 if (!klass->IsInterface()) { in CanWeInitializeClass()
5227 size_t num_interfaces = klass->GetIfTableCount(); in CanWeInitializeClass()
5229 ObjPtr<mirror::Class> iface = klass->GetIfTable()->GetInterface(i); in CanWeInitializeClass()
5237 if (klass->IsInterface() || !klass->HasSuperClass()) { in CanWeInitializeClass()
5240 ObjPtr<mirror::Class> super_class = klass->GetSuperClass(); in CanWeInitializeClass()
5248 Handle<mirror::Class> klass, in InitializeClass() argument
5256 if (klass->IsInitialized()) { in InitializeClass()
5261 if (!CanWeInitializeClass(klass.Get(), can_init_statics, can_init_parents)) { in InitializeClass()
5270 ObjectLock<mirror::Class> lock(self, klass); in InitializeClass()
5273 if (klass->IsInitialized()) { in InitializeClass()
5278 if (klass->IsErroneous()) { in InitializeClass()
5279 ThrowEarlierClassFailure(klass.Get(), true, /* log= */ true); in InitializeClass()
5280 VlogClassInitializationFailure(klass); in InitializeClass()
5284 CHECK(klass->IsResolved() && !klass->IsErroneousResolved()) in InitializeClass()
5285 << klass->PrettyClass() << ": state=" << klass->GetStatus(); in InitializeClass()
5287 if (!klass->IsVerified()) { in InitializeClass()
5288 VerifyClass(self, /*verifier_deps= */ nullptr, klass); in InitializeClass()
5289 if (!klass->IsVerified()) { in InitializeClass()
5292 if (klass->IsErroneous()) { in InitializeClass()
5302 DCHECK_NE(0, klass->GetClinitThreadId()); in InitializeClass()
5303 DCHECK_NE(self->GetTid(), klass->GetClinitThreadId()); in InitializeClass()
5305 ThrowEarlierClassFailure(klass.Get(), true); in InitializeClass()
5307 VlogClassInitializationFailure(klass); in InitializeClass()
5310 CHECK(klass->ShouldVerifyAtRuntime() || klass->IsVerifiedNeedsAccessChecks()); in InitializeClass()
5323 DCHECK(!klass->IsErroneous()) << klass->GetStatus(); in InitializeClass()
5324 if (klass->IsInitialized()) { in InitializeClass()
5334 if (klass->GetStatus() == ClassStatus::kInitializing) { in InitializeClass()
5337 VlogClassInitializationFailure(klass); in InitializeClass()
5341 if (klass->GetClinitThreadId() == self->GetTid()) { in InitializeClass()
5346 return WaitForInitializeClass(klass, self, lock); in InitializeClass()
5356 ? OatFile::FindOatClass(klass->GetDexFile(), klass->GetDexClassDefIndex(), &has_oat_class) in InitializeClass()
5359 !ValidateSuperClassDescriptors(klass)) { in InitializeClass()
5360 mirror::Class::SetStatus(klass, ClassStatus::kErrorResolved, self); in InitializeClass()
5365 CHECK_EQ(klass->GetStatus(), ClassStatus::kVerified) << klass->PrettyClass() in InitializeClass()
5366 << " self.tid=" << self->GetTid() << " clinit.tid=" << klass->GetClinitThreadId(); in InitializeClass()
5370 klass->SetClinitThreadId(self->GetTid()); in InitializeClass()
5371 mirror::Class::SetStatus(klass, ClassStatus::kInitializing, self); in InitializeClass()
5379 if (!klass->IsInterface() && klass->HasSuperClass()) { in InitializeClass()
5380 ObjPtr<mirror::Class> super_class = klass->GetSuperClass(); in InitializeClass()
5400 ObjectLock<mirror::Class> lock(self, klass); in InitializeClass()
5402 mirror::Class::SetStatus(klass, ClassStatus::kErrorResolved, self); in InitializeClass()
5409 if (!klass->IsInterface()) { in InitializeClass()
5411 size_t num_direct_interfaces = klass->NumDirectInterfaces(); in InitializeClass()
5417 handle_scope_iface.Assign(mirror::Class::GetDirectInterface(self, klass.Get(), i)); in InitializeClass()
5418 CHECK(handle_scope_iface != nullptr) << klass->PrettyDescriptor() << " iface #" << i; in InitializeClass()
5435 ObjectLock<mirror::Class> lock(self, klass); in InitializeClass()
5437 mirror::Class::SetStatus(klass, ClassStatus::kErrorResolved, self); in InitializeClass()
5445 const size_t num_static_fields = klass->NumStaticFields(); in InitializeClass()
5447 const dex::ClassDef* dex_class_def = klass->GetClassDef(); in InitializeClass()
5450 Handle<mirror::ClassLoader> class_loader(hs.NewHandle(klass->GetClassLoader())); in InitializeClass()
5451 Handle<mirror::DexCache> dex_cache(hs.NewHandle(klass->GetDexCache())); in InitializeClass()
5456 ArtField* field = klass->GetStaticField(i); in InitializeClass()
5504 ArtMethod* clinit = klass->FindClassInitializer(image_pointer_size_); in InitializeClass()
5517 ObjectLock<mirror::Class> lock(self, klass); in InitializeClass()
5520 WrapExceptionInInitializer(klass); in InitializeClass()
5521 mirror::Class::SetStatus(klass, ClassStatus::kErrorResolved, self); in InitializeClass()
5527 << mirror::Class::PrettyDescriptor(klass.Get()) in InitializeClass()
5530 mirror::Class::SetStatus(klass, ClassStatus::kErrorResolved, self); in InitializeClass()
5542 callback = MarkClassInitialized(self, klass); in InitializeClass()
5545 LOG(INFO) << "Initialized class " << klass->GetDescriptor(&temp) << " from " << in InitializeClass()
5546 klass->GetLocation(); in InitializeClass()
5609 bool ClassLinker::WaitForInitializeClass(Handle<mirror::Class> klass, in WaitForInitializeClass() argument
5615 CHECK(!klass->IsInitialized()); in WaitForInitializeClass()
5622 WrapExceptionInInitializer(klass); in WaitForInitializeClass()
5623 mirror::Class::SetStatus(klass, ClassStatus::kErrorResolved, self); in WaitForInitializeClass()
5627 if (klass->GetStatus() == ClassStatus::kInitializing) { in WaitForInitializeClass()
5630 if (klass->GetStatus() == ClassStatus::kVerified && in WaitForInitializeClass()
5635 if (klass->IsErroneous()) { in WaitForInitializeClass()
5639 klass->PrettyDescriptor().c_str()); in WaitForInitializeClass()
5640 VlogClassInitializationFailure(klass); in WaitForInitializeClass()
5643 if (klass->IsInitialized()) { in WaitForInitializeClass()
5646 LOG(FATAL) << "Unexpected class status. " << klass->PrettyClass() << " is " in WaitForInitializeClass()
5647 << klass->GetStatus(); in WaitForInitializeClass()
5652 static void ThrowSignatureCheckResolveReturnTypeException(Handle<mirror::Class> klass, in ThrowSignatureCheckResolveReturnTypeException() argument
5665 ThrowWrappedLinkageError(klass.Get(), in ThrowSignatureCheckResolveReturnTypeException()
5668 mirror::Class::PrettyDescriptor(klass.Get()).c_str(), in ThrowSignatureCheckResolveReturnTypeException()
5675 static void ThrowSignatureCheckResolveArgException(Handle<mirror::Class> klass, in ThrowSignatureCheckResolveArgException() argument
5687 ThrowWrappedLinkageError(klass.Get(), in ThrowSignatureCheckResolveArgException()
5690 mirror::Class::PrettyDescriptor(klass.Get()).c_str(), in ThrowSignatureCheckResolveArgException()
5697 static void ThrowSignatureMismatch(Handle<mirror::Class> klass, in ThrowSignatureMismatch() argument
5702 ThrowLinkageError(klass.Get(), in ThrowSignatureMismatch()
5704 mirror::Class::PrettyDescriptor(klass.Get()).c_str(), in ThrowSignatureMismatch()
5712 Handle<mirror::Class> klass, in HasSameSignatureWithDifferentClassLoaders() argument
5721 ThrowSignatureCheckResolveReturnTypeException(klass, super_klass, method1, method1); in HasSameSignatureWithDifferentClassLoaders()
5726 ThrowSignatureCheckResolveReturnTypeException(klass, super_klass, method1, method2); in HasSameSignatureWithDifferentClassLoaders()
5730 ThrowSignatureMismatch(klass, super_klass, method1, in HasSameSignatureWithDifferentClassLoaders()
5743 ThrowSignatureMismatch(klass, super_klass, method1, in HasSameSignatureWithDifferentClassLoaders()
5751 ThrowSignatureMismatch(klass, super_klass, method1, in HasSameSignatureWithDifferentClassLoaders()
5760 ThrowSignatureMismatch(klass, super_klass, method1, in HasSameSignatureWithDifferentClassLoaders()
5771 ThrowSignatureCheckResolveArgException(klass, super_klass, method1, in HasSameSignatureWithDifferentClassLoaders()
5779 ThrowSignatureCheckResolveArgException(klass, super_klass, method1, in HasSameSignatureWithDifferentClassLoaders()
5784 ThrowSignatureMismatch(klass, super_klass, method1, in HasSameSignatureWithDifferentClassLoaders()
5798 bool ClassLinker::ValidateSuperClassDescriptors(Handle<mirror::Class> klass) { in ValidateSuperClassDescriptors() argument
5799 if (klass->IsInterface()) { in ValidateSuperClassDescriptors()
5806 if (klass->HasSuperClass() && in ValidateSuperClassDescriptors()
5807 klass->GetClassLoader() != klass->GetSuperClass()->GetClassLoader()) { in ValidateSuperClassDescriptors()
5808 super_klass.Assign(klass->GetSuperClass()); in ValidateSuperClassDescriptors()
5809 for (int i = klass->GetSuperClass()->GetVTableLength() - 1; i >= 0; --i) { in ValidateSuperClassDescriptors()
5810 auto* m = klass->GetVTableEntry(i, image_pointer_size_); in ValidateSuperClassDescriptors()
5811 auto* super_m = klass->GetSuperClass()->GetVTableEntry(i, image_pointer_size_); in ValidateSuperClassDescriptors()
5814 klass, in ValidateSuperClassDescriptors()
5824 for (int32_t i = 0; i < klass->GetIfTableCount(); ++i) { in ValidateSuperClassDescriptors()
5825 super_klass.Assign(klass->GetIfTable()->GetInterface(i)); in ValidateSuperClassDescriptors()
5826 if (klass->GetClassLoader() != super_klass->GetClassLoader()) { in ValidateSuperClassDescriptors()
5829 auto* m = klass->GetIfTable()->GetMethodArray(i)->GetElementPtrSize<ArtMethod*>( in ValidateSuperClassDescriptors()
5834 klass, in ValidateSuperClassDescriptors()
5960 static ImTable* FindSuperImt(ObjPtr<mirror::Class> klass, PointerSize pointer_size) in FindSuperImt() argument
5962 while (klass->HasSuperClass()) { in FindSuperImt()
5963 klass = klass->GetSuperClass(); in FindSuperImt()
5964 if (klass->ShouldHaveImt()) { in FindSuperImt()
5965 return klass->GetImt(pointer_size); in FindSuperImt()
5973 Handle<mirror::Class> klass, in LinkClass() argument
5976 CHECK_EQ(ClassStatus::kLoaded, klass->GetStatus()); in LinkClass()
5978 if (!LinkSuperClass(klass)) { in LinkClass()
5985 if (!LinkMethods(self, klass, interfaces, &new_conflict, imt_data)) { in LinkClass()
5988 if (!LinkInstanceFields(self, klass)) { in LinkClass()
5992 if (!LinkStaticFields(self, klass, &class_size)) { in LinkClass()
5995 CreateReferenceInstanceOffsets(klass); in LinkClass()
5996 CHECK_EQ(ClassStatus::kLoaded, klass->GetStatus()); in LinkClass()
5999 if (klass->ShouldHaveImt()) { in LinkClass()
6006 ImTable* super_imt = FindSuperImt(klass.Get(), image_pointer_size_); in LinkClass()
6018 LinearAlloc* allocator = GetAllocatorForClassLoader(klass->GetClassLoader()); in LinkClass()
6028 if (!klass->IsTemp() || (!init_done_ && klass->GetClassSize() == class_size)) { in LinkClass()
6031 CHECK_EQ(klass->GetClassSize(), class_size) << klass->PrettyDescriptor(); in LinkClass()
6033 if (klass->ShouldHaveEmbeddedVTable()) { in LinkClass()
6034 klass->PopulateEmbeddedVTable(image_pointer_size_); in LinkClass()
6036 if (klass->ShouldHaveImt()) { in LinkClass()
6037 klass->SetImt(imt, image_pointer_size_); in LinkClass()
6044 cha_->UpdateAfterLoadingOf(klass); in LinkClass()
6049 mirror::Class::SetStatus(klass, ClassStatus::kResolved, self); in LinkClass()
6050 h_new_class_out->Assign(klass.Get()); in LinkClass()
6052 CHECK(!klass->IsResolved()); in LinkClass()
6056 hs.NewHandle(mirror::Class::CopyOf(klass, self, class_size, imt, image_pointer_size_)); in LinkClass()
6061 klass->SetMethodsPtrUnchecked(nullptr, 0, 0); in LinkClass()
6062 klass->SetSFieldsPtrUnchecked(nullptr); in LinkClass()
6063 klass->SetIFieldsPtrUnchecked(nullptr); in LinkClass()
6066 mirror::Class::SetStatus(klass, ClassStatus::kErrorUnresolved, self); in LinkClass()
6072 FixupTemporaryDeclaringClass(klass.Get(), h_new_class.Get()); in LinkClass()
6085 CHECK_EQ(existing, klass.Get()); in LinkClass()
6100 mirror::Class::SetStatus(klass, ClassStatus::kRetired, self); in LinkClass()
6112 bool ClassLinker::LoadSuperAndInterfaces(Handle<mirror::Class> klass, const DexFile& dex_file) { in LoadSuperAndInterfaces() argument
6113 CHECK_EQ(ClassStatus::kIdx, klass->GetStatus()); in LoadSuperAndInterfaces()
6114 const dex::ClassDef& class_def = dex_file.GetClassDef(klass->GetDexClassDefIndex()); in LoadSuperAndInterfaces()
6124 ThrowClassCircularityError(klass.Get(), in LoadSuperAndInterfaces()
6126 klass->PrettyDescriptor().c_str()); in LoadSuperAndInterfaces()
6130 ObjPtr<mirror::Class> super_class = ResolveType(super_class_idx, klass.Get()); in LoadSuperAndInterfaces()
6136 if (!klass->CanAccess(super_class)) { in LoadSuperAndInterfaces()
6137 ThrowIllegalAccessError(klass.Get(), "Class %s extended by class %s is inaccessible", in LoadSuperAndInterfaces()
6139 klass->PrettyDescriptor().c_str()); in LoadSuperAndInterfaces()
6143 klass->SetSuperClass(super_class); in LoadSuperAndInterfaces()
6149 ObjPtr<mirror::Class> interface = ResolveType(idx, klass.Get()); in LoadSuperAndInterfaces()
6155 if (!klass->CanAccess(interface)) { in LoadSuperAndInterfaces()
6157 ThrowIllegalAccessError(klass.Get(), in LoadSuperAndInterfaces()
6160 klass->PrettyDescriptor().c_str()); in LoadSuperAndInterfaces()
6166 mirror::Class::SetStatus(klass, ClassStatus::kLoaded, nullptr); in LoadSuperAndInterfaces()
6170 bool ClassLinker::LinkSuperClass(Handle<mirror::Class> klass) { in LinkSuperClass() argument
6171 CHECK(!klass->IsPrimitive()); in LinkSuperClass()
6172 ObjPtr<mirror::Class> super = klass->GetSuperClass(); in LinkSuperClass()
6174 if (klass.Get() == object_class) { in LinkSuperClass()
6176 ThrowClassFormatError(klass.Get(), "java.lang.Object must not have a superclass"); in LinkSuperClass()
6182 ThrowLinkageError(klass.Get(), "No superclass defined for class %s", in LinkSuperClass()
6183 klass->PrettyDescriptor().c_str()); in LinkSuperClass()
6187 if (klass->IsInterface() && super != object_class) { in LinkSuperClass()
6188 ThrowClassFormatError(klass.Get(), "Interfaces must have java.lang.Object as superclass"); in LinkSuperClass()
6192 ThrowVerifyError(klass.Get(), in LinkSuperClass()
6195 klass->PrettyDescriptor().c_str()); in LinkSuperClass()
6199 ThrowIncompatibleClassChangeError(klass.Get(), in LinkSuperClass()
6202 klass->PrettyDescriptor().c_str()); in LinkSuperClass()
6205 if (!klass->CanAccess(super)) { in LinkSuperClass()
6206 ThrowIllegalAccessError(klass.Get(), "Superclass %s is inaccessible to class %s", in LinkSuperClass()
6208 klass->PrettyDescriptor().c_str()); in LinkSuperClass()
6215 klass->SetFinalizable(); in LinkSuperClass()
6220 klass->SetClassLoaderClass(); in LinkSuperClass()
6226 CHECK_EQ(klass->GetClassFlags(), 0u); in LinkSuperClass()
6227 klass->SetClassFlags(klass->GetClassFlags() | reference_flags); in LinkSuperClass()
6231 ThrowLinkageError(klass.Get(), in LinkSuperClass()
6233 klass->PrettyDescriptor().c_str()); in LinkSuperClass()
6324 Handle<mirror::Class> klass, in LinkMethods() argument
6338 return SetupInterfaceLookupTable(self, klass, interfaces) in LinkMethods()
6339 && LinkVirtualMethods(self, klass, /*out*/ &default_translations) in LinkMethods()
6340 && LinkInterfaceMethods(self, klass, default_translations, out_new_conflict, out_imt); in LinkMethods()
6393 LinkVirtualHashTable(Handle<mirror::Class> klass, in LinkVirtualHashTable() argument
6397 : klass_(klass), in LinkVirtualHashTable()
6465 Handle<mirror::Class> klass, in LinkVirtualMethods() argument
6467 const size_t num_virtual_methods = klass->NumVirtualMethods(); in LinkVirtualMethods()
6468 if (klass->IsInterface()) { in LinkVirtualMethods()
6471 ThrowClassFormatError(klass.Get(), "Too many methods on interface: %zu", num_virtual_methods); in LinkVirtualMethods()
6477 ArtMethod* m = klass->GetVirtualMethodDuringLinking(i, image_pointer_size_); in LinkVirtualMethods()
6488 ThrowClassFormatError(klass.Get(), in LinkVirtualMethods()
6501 klass->SetHasDefaultMethods(); in LinkVirtualMethods()
6504 } else if (klass->HasSuperClass()) { in LinkVirtualMethods()
6505 const size_t super_vtable_length = klass->GetSuperClass()->GetVTableLength(); in LinkVirtualMethods()
6508 Handle<mirror::Class> super_class(hs.NewHandle(klass->GetSuperClass())); in LinkVirtualMethods()
6525 if (num_virtual_methods == 0 && super_class->GetIfTableCount() == klass->GetIfTableCount()) { in LinkVirtualMethods()
6526 klass->SetVTable(vtable.Get()); in LinkVirtualMethods()
6535 if (num_virtual_methods == 0 && super_class->GetIfTableCount() == klass->GetIfTableCount()) { in LinkVirtualMethods()
6536 klass->SetVTable(super_vtable.Get()); in LinkVirtualMethods()
6568 LinkVirtualHashTable hash_table(klass, hash_table_size, hash_table_ptr, image_pointer_size_); in LinkVirtualMethods()
6571 DCHECK(klass->GetVirtualMethodDuringLinking( in LinkVirtualMethods()
6580 if (!klass->CanAccessMember(super_method->GetDeclaringClass(), in LinkVirtualMethods()
6596 ArtMethod* virtual_method = klass->GetVirtualMethodDuringLinking( in LinkVirtualMethods()
6599 ThrowLinkageError(klass.Get(), "Method %s overrides final method in class %s", in LinkVirtualMethods()
6612 klass, in LinkVirtualMethods()
6652 << " in " << mirror::Class::PrettyClass(klass.Get()); in LinkVirtualMethods()
6662 ArtMethod* local_method = klass->GetVirtualMethodDuringLinking(i, image_pointer_size_); in LinkVirtualMethods()
6673 ThrowClassFormatError(klass.Get(), "Too many methods defined on class: %zd", actual_count); in LinkVirtualMethods()
6686 klass->SetVTable(vtable.Get()); in LinkVirtualMethods()
6688 CHECK_EQ(klass.Get(), GetClassRoot<mirror::Object>(this)); in LinkVirtualMethods()
6690 ThrowClassFormatError(klass.Get(), "Too many methods: %d", in LinkVirtualMethods()
6700 ArtMethod* virtual_method = klass->GetVirtualMethodDuringLinking(i, image_pointer_size_); in LinkVirtualMethods()
6704 klass->SetVTable(vtable); in LinkVirtualMethods()
6705 InitializeObjectVirtualMethodHashes(klass.Get(), in LinkVirtualMethods()
6772 Handle<mirror::Class> klass, in FindDefaultMethodImplementation() argument
6787 size_t iftable_count = klass->GetIfTableCount(); in FindDefaultMethodImplementation()
6795 MutableHandle<mirror::IfTable> iftable(hs.NewHandle(klass->GetIfTable())); in FindDefaultMethodImplementation()
6838 << klass->PrettyClass() << " conflict."; in FindDefaultMethodImplementation()
6864 << "subinterface on class '" << klass->PrettyClass() << "'"; in FindDefaultMethodImplementation()
6874 << "' in '" << klass->PrettyClass() << "'"; in FindDefaultMethodImplementation()
6881 ArtMethod* ClassLinker::AddMethodToConflictTable(ObjPtr<mirror::Class> klass, in AddMethodToConflictTable() argument
6887 LinearAlloc* linear_alloc = GetAllocatorForClassLoader(klass->GetClassLoader()); in AddMethodToConflictTable()
6919 Handle<mirror::Class> klass, in AllocateIfTableMethodArrays() argument
6921 DCHECK(!klass->IsInterface()); in AllocateIfTableMethodArrays()
6922 const bool has_superclass = klass->HasSuperClass(); in AllocateIfTableMethodArrays()
6924 const size_t ifcount = klass->GetIfTableCount(); in AllocateIfTableMethodArrays()
6925 const size_t super_ifcount = has_superclass ? klass->GetSuperClass()->GetIfTableCount() : 0U; in AllocateIfTableMethodArrays()
6935 ObjPtr<mirror::IfTable> if_table = klass->GetSuperClass()->GetIfTable(); in AllocateIfTableMethodArrays()
6987 void ClassLinker::FillIMTAndConflictTables(ObjPtr<mirror::Class> klass) { in FillIMTAndConflictTables() argument
6988 DCHECK(klass->ShouldHaveImt()) << klass->PrettyClass(); in FillIMTAndConflictTables()
6989 DCHECK(!klass->IsTemp()) << klass->PrettyClass(); in FillIMTAndConflictTables()
6995 if (klass->GetIfTable() != nullptr) { in FillIMTAndConflictTables()
6997 FillIMTFromIfTable(klass->GetIfTable(), in FillIMTAndConflictTables()
7000 klass, in FillIMTAndConflictTables()
7009 ObjPtr<mirror::Class> super_class = klass->GetSuperClass(); in FillIMTAndConflictTables()
7038 imt = klass->GetImt(image_pointer_size_); in FillIMTAndConflictTables()
7042 klass->SetImt(imt, image_pointer_size_); in FillIMTAndConflictTables()
7062 ObjPtr<mirror::Class> klass, in FillIMTFromIfTable() argument
7075 if (klass->IsInterface()) { in FillIMTFromIfTable()
7116 LinearAlloc* linear_alloc = GetAllocatorForClassLoader(klass->GetClassLoader()); in FillIMTFromIfTable()
7202 ObjPtr<mirror::Class> klass, in FillIfTable() argument
7225 : mirror::Class::GetDirectInterface(self, klass, i); in FillIfTable()
7282 Handle<mirror::Class> klass, in SetupInterfaceLookupTable() argument
7285 const bool has_superclass = klass->HasSuperClass(); in SetupInterfaceLookupTable()
7286 const size_t super_ifcount = has_superclass ? klass->GetSuperClass()->GetIfTableCount() : 0U; in SetupInterfaceLookupTable()
7289 have_interfaces ? interfaces->GetLength() : klass->NumDirectInterfaces(); in SetupInterfaceLookupTable()
7293 klass->SetIfTable(klass->GetSuperClass()->GetIfTable()); in SetupInterfaceLookupTable()
7296 DCHECK_EQ(klass->GetIfTableCount(), 0); in SetupInterfaceLookupTable()
7301 ObjPtr<mirror::IfTable> super_iftable = klass->GetSuperClass()->GetIfTable(); in SetupInterfaceLookupTable()
7310 klass->SetIfTable(super_iftable); in SetupInterfaceLookupTable()
7319 : mirror::Class::GetDirectInterface(self, klass.Get(), i); in SetupInterfaceLookupTable()
7323 ThrowIncompatibleClassChangeError(klass.Get(), in SetupInterfaceLookupTable()
7325 klass->PrettyDescriptor().c_str(), in SetupInterfaceLookupTable()
7339 ObjPtr<mirror::IfTable> super_iftable = klass->GetSuperClass()->GetIfTable(); in SetupInterfaceLookupTable()
7352 self, klass.Get(), interfaces.Get(), iftable.Get(), super_ifcount, num_interfaces); in SetupInterfaceLookupTable()
7369 klass->SetIfTable(iftable.Get()); in SetupInterfaceLookupTable()
7397 Handle<mirror::Class> klass, in CheckClassOwnsVTableEntries() argument
7401 Handle<mirror::PointerArray> check_vtable(hs.NewHandle(klass->GetVTableDuringLinking())); in CheckClassOwnsVTableEntries()
7402 ObjPtr<mirror::Class> super_temp = (klass->HasSuperClass()) ? klass->GetSuperClass() : nullptr; in CheckClassOwnsVTableEntries()
7412 << klass->PrettyClass(); in CheckClassOwnsVTableEntries()
7414 ArraySlice<ArtMethod> virtuals = klass->GetVirtualMethodsSliceUnchecked(pointer_size); in CheckClassOwnsVTableEntries()
7421 << klass->PrettyClass() << " or any of its superclasses!"; in CheckClassOwnsVTableEntries()
7429 void CheckVTableHasNoDuplicates(Thread* self, Handle<mirror::Class> klass) in CheckVTableHasNoDuplicates() argument
7432 Handle<mirror::PointerArray> vtable(hs.NewHandle(klass->GetVTableDuringLinking())); in CheckVTableHasNoDuplicates()
7445 auto log_fn = [&vtable, &klass](int32_t i, int32_t j) REQUIRES_SHARED(Locks::mutator_lock_) { in CheckVTableHasNoDuplicates()
7449 << klass->PrettyClass() << " in method " << m1->PrettyMethod() in CheckVTableHasNoDuplicates()
7468 if (!klass->CanAccessMember(vtable_entry->GetDeclaringClass(), in CheckVTableHasNoDuplicates()
7498 if (!klass->CanAccessMember(vtable_entry->GetDeclaringClass(), in CheckVTableHasNoDuplicates()
7572 if (!klass->CanAccessMember(vtable_entry->GetDeclaringClass(), in CheckVTableHasNoDuplicates()
7597 Handle<mirror::Class> klass, in CheckVTableHasNoDuplicates() argument
7602 CheckVTableHasNoDuplicates<PointerSize::k64>(self, klass); in CheckVTableHasNoDuplicates()
7605 CheckVTableHasNoDuplicates<PointerSize::k32>(self, klass); in CheckVTableHasNoDuplicates()
7610 static void CheckVTable(Thread* self, Handle<mirror::Class> klass, PointerSize pointer_size) in CheckVTable() argument
7612 CheckClassOwnsVTableEntries(self, klass, pointer_size); in CheckVTable()
7613 CheckVTableHasNoDuplicates(self, klass, pointer_size); in CheckVTable()
7618 void ClassLinker::FillImtFromSuperClass(Handle<mirror::Class> klass, in FillImtFromSuperClass() argument
7623 DCHECK(klass->HasSuperClass()); in FillImtFromSuperClass()
7624 ObjPtr<mirror::Class> super_class = klass->GetSuperClass(); in FillImtFromSuperClass()
7638 klass.Get(), in FillImtFromSuperClass()
7650 Handle<mirror::Class> klass, in LinkInterfaceMethodsHelper() argument
7654 klass_(klass), in LinkInterfaceMethodsHelper()
8145 Handle<mirror::Class> klass, in LinkInterfaceMethods() argument
8152 const bool is_interface = klass->IsInterface(); in LinkInterfaceMethods()
8153 const bool has_superclass = klass->HasSuperClass(); in LinkInterfaceMethods()
8155 const size_t super_ifcount = has_superclass ? klass->GetSuperClass()->GetIfTableCount() : 0U; in LinkInterfaceMethods()
8156 const size_t ifcount = klass->GetIfTableCount(); in LinkInterfaceMethods()
8158 Handle<mirror::IfTable> iftable(hs.NewHandle(klass->GetIfTable())); in LinkInterfaceMethods()
8160 MutableHandle<mirror::PointerArray> vtable(hs.NewHandle(klass->GetVTableDuringLinking())); in LinkInterfaceMethods()
8166 FillImtFromSuperClass(klass, in LinkInterfaceMethods()
8175 if (!AllocateIfTableMethodArrays(self, klass, iftable)) { in LinkInterfaceMethods()
8180 LinkInterfaceMethodsHelper helper(this, klass, self, runtime); in LinkInterfaceMethods()
8218 input_virtual_methods = klass->GetDeclaredVirtualMethodsSlice(image_pointer_size_); in LinkInterfaceMethods()
8261 ThrowIllegalAccessError(klass.Get(), in LinkInterfaceMethods()
8358 LengthPrefixedArray<ArtMethod>* old_methods = kIsDebugBuild ? klass->GetMethodsPtr() : nullptr; in LinkInterfaceMethods()
8360 LengthPrefixedArray<ArtMethod>* methods = kIsDebugBuild ? klass->GetMethodsPtr() : nullptr; in LinkInterfaceMethods()
8382 CheckVTable(self, klass, image_pointer_size_); in LinkInterfaceMethods()
8391 Handle<mirror::Class> klass,
8570 Handle<mirror::Class> klass, in LinkFields() argument
8574 const size_t num_fields = is_static ? klass->NumStaticFields() : klass->NumInstanceFields(); in LinkFields()
8575 LengthPrefixedArray<ArtField>* const fields = is_static ? klass->GetSFieldsPtr() : in LinkFields()
8576 klass->GetIFieldsPtr(); in LinkFields()
8581 field_offset = klass->GetFirstReferenceStaticFieldOffsetDuringLinking( in LinkFields()
8584 ObjPtr<mirror::Class> super_class = klass->GetSuperClass(); in LinkFields()
8587 << klass->PrettyClass() << " " << super_class->PrettyClass(); in LinkFields()
8592 CHECK_EQ(num_fields == 0, fields == nullptr) << klass->PrettyClass(); in LinkFields()
8775 DCHECK(!class_linker->init_done_ || !klass->DescriptorEquals("Ljava/lang/ref/Reference;")); in LinkFields()
8778 klass->DescriptorEquals("Ljava/lang/ref/Reference;")) { in LinkFields()
8781 CHECK_EQ(num_reference_fields, num_fields) << klass->PrettyClass(); in LinkFields()
8783 << klass->PrettyClass(); in LinkFields()
8790 klass->SetNumReferenceStaticFields(num_reference_fields); in LinkFields()
8793 klass->SetNumReferenceInstanceFields(num_reference_fields); in LinkFields()
8794 ObjPtr<mirror::Class> super_class = klass->GetSuperClass(); in LinkFields()
8800 klass->SetClassFlags(klass->GetClassFlags() | mirror::kClassFlagNoReferenceFields); in LinkFields()
8804 DCHECK_EQ(super_class == nullptr, klass->DescriptorEquals("Ljava/lang/Object;")); in LinkFields()
8806 ObjPtr<mirror::Class> cur_super = klass.Get(); in LinkFields()
8812 CHECK_EQ(total_reference_instance_fields, 1u) << klass->PrettyDescriptor(); in LinkFields()
8816 << klass->PrettyClass(); in LinkFields()
8819 if (!klass->IsVariableSize()) { in LinkFields()
8821 DCHECK_GE(size, sizeof(mirror::Object)) << klass->GetDescriptor(&temp); in LinkFields()
8822 size_t previous_size = klass->GetObjectSize(); in LinkFields()
8825 CHECK_EQ(previous_size, size) << klass->GetDescriptor(&temp); in LinkFields()
8827 klass->SetObjectSize(size); in LinkFields()
8835 ? klass->GetFirstReferenceStaticFieldOffsetDuringLinking(class_linker->image_pointer_size_) in LinkFields()
8836 : klass->GetFirstReferenceInstanceFieldOffset(); in LinkFields()
8844 << " class=" << klass->PrettyClass() << " field=" << field->PrettyField() in LinkFields()
8854 if (klass->DescriptorEquals("Ljava/lang/ref/Reference;") && in LinkFields()
8879 bool ClassLinker::LinkInstanceFields(Thread* self, Handle<mirror::Class> klass) { in LinkInstanceFields() argument
8880 CHECK(klass != nullptr); in LinkInstanceFields()
8881 return LinkFieldsHelper::LinkFields(this, self, klass, false, nullptr); in LinkInstanceFields()
8884 bool ClassLinker::LinkStaticFields(Thread* self, Handle<mirror::Class> klass, size_t* class_size) { in LinkStaticFields() argument
8885 CHECK(klass != nullptr); in LinkStaticFields()
8886 return LinkFieldsHelper::LinkFields(this, self, klass, true, class_size); in LinkStaticFields()
8890 void ClassLinker::CreateReferenceInstanceOffsets(Handle<mirror::Class> klass) { in CreateReferenceInstanceOffsets() argument
8892 ObjPtr<mirror::Class> super_class = klass->GetSuperClass(); in CreateReferenceInstanceOffsets()
8898 size_t num_reference_fields = klass->NumReferenceInstanceFieldsDuringLinking(); in CreateReferenceInstanceOffsets()
8915 klass->SetReferenceInstanceOffsets(reference_offsets); in CreateReferenceInstanceOffsets()
9032 ArtMethod* ClassLinker::FindResolvedMethod(ObjPtr<mirror::Class> klass, in FindResolvedMethod() argument
9040 if (klass->IsInterface()) { in FindResolvedMethod()
9041 resolved = klass->FindInterfaceMethod(dex_cache, method_idx, image_pointer_size_); in FindResolvedMethod()
9043 resolved = klass->FindClassMethod(dex_cache, method_idx, image_pointer_size_); in FindResolvedMethod()
9057 ArtMethod* itf_method = klass->FindAccessibleInterfaceMethod(resolved, image_pointer_size_); in FindResolvedMethod()
9102 ArtMethod* ClassLinker::FindIncompatibleMethod(ObjPtr<mirror::Class> klass, in FindIncompatibleMethod() argument
9106 if (klass->IsInterface()) { in FindIncompatibleMethod()
9107 ArtMethod* method = klass->FindClassMethod(dex_cache, method_idx, image_pointer_size_); in FindIncompatibleMethod()
9115 klass->FindInterfaceMethod(dex_cache, method_idx, image_pointer_size_); in FindIncompatibleMethod()
9143 ObjPtr<mirror::Class> klass = nullptr; in ResolveMethod() local
9147 klass = LookupResolvedType(method_id.class_idx_, dex_cache.Get(), class_loader.Get()); in ResolveMethod()
9148 if (UNLIKELY(klass == nullptr)) { in ResolveMethod()
9151 klass = ResolveType(method_id.class_idx_, dex_cache, class_loader); in ResolveMethod()
9152 if (klass == nullptr) { in ResolveMethod()
9162 klass = ResolveType(method_id.class_idx_, dex_cache, class_loader); in ResolveMethod()
9163 if (klass == nullptr) { in ResolveMethod()
9172 dex_cache.Get(), type, [klass]() { return klass; })) { in ResolveMethod()
9178 resolved = FindResolvedMethod(klass, dex_cache.Get(), class_loader.Get(), method_idx); in ResolveMethod()
9204 resolved = FindIncompatibleMethod(klass, dex_cache.Get(), class_loader.Get(), method_idx); in ResolveMethod()
9212 ThrowNoSuchMethodError(type, klass, name, signature); in ResolveMethod()
9231 ObjPtr<mirror::Class> klass = ResolveType(method_id.class_idx_, dex_cache, class_loader); in ResolveMethodWithoutInvokeType() local
9232 if (klass == nullptr) { in ResolveMethodWithoutInvokeType()
9236 if (klass->IsInterface()) { in ResolveMethodWithoutInvokeType()
9237 resolved = klass->FindInterfaceMethod(dex_cache.Get(), method_idx, image_pointer_size_); in ResolveMethodWithoutInvokeType()
9239 resolved = klass->FindClassMethod(dex_cache.Get(), method_idx, image_pointer_size_); in ResolveMethodWithoutInvokeType()
9257 ObjPtr<mirror::Class> klass = dex_cache->GetResolvedType(field_id.class_idx_); in LookupResolvedField() local
9258 if (klass == nullptr) { in LookupResolvedField()
9259 klass = LookupResolvedType(field_id.class_idx_, dex_cache, class_loader); in LookupResolvedField()
9261 if (klass == nullptr) { in LookupResolvedField()
9265 DCHECK(klass->IsResolved()); in LookupResolvedField()
9267 return FindResolvedField(klass, dex_cache, class_loader, field_idx, is_static); in LookupResolvedField()
9283 ObjPtr<mirror::Class> klass = ResolveType(field_id.class_idx_, dex_cache, class_loader); in ResolveField() local
9284 if (klass == nullptr) { in ResolveField()
9289 resolved = FindResolvedField(klass, dex_cache.Get(), class_loader.Get(), field_idx, is_static); in ResolveField()
9293 ThrowNoSuchFieldError(is_static ? "static " : "instance ", klass, type, name); in ResolveField()
9309 ObjPtr<mirror::Class> klass = ResolveType(field_id.class_idx_, dex_cache, class_loader); in ResolveFieldJLS() local
9310 if (klass == nullptr) { in ResolveFieldJLS()
9315 resolved = FindResolvedFieldJLS(klass, dex_cache.Get(), class_loader.Get(), field_idx); in ResolveFieldJLS()
9319 ThrowNoSuchFieldError("", klass, type, name); in ResolveFieldJLS()
9324 ArtField* ClassLinker::FindResolvedField(ObjPtr<mirror::Class> klass, in FindResolvedField() argument
9333 resolved = is_static ? mirror::Class::FindStaticField(self, klass, dex_cache, field_idx) in FindResolvedField()
9334 : klass->FindInstanceField(dex_cache, field_idx); in FindResolvedField()
9340 resolved = is_static ? mirror::Class::FindStaticField(self, klass, name, type) in FindResolvedField()
9341 : klass->FindInstanceField(name, type); in FindResolvedField()
9358 ArtField* ClassLinker::FindResolvedFieldJLS(ObjPtr<mirror::Class> klass, in FindResolvedFieldJLS() argument
9369 resolved = mirror::Class::FindField(self, klass, name, type); in FindResolvedFieldJLS()
9726 ObjPtr<mirror::Class> klass = ResolveType(type_idx, referrer); in ResolveMethodHandleForMethod() local
9727 if (nullptr == klass) { in ResolveMethodHandleForMethod()
9731 method_params->Set(index++, klass); in ResolveMethodHandleForMethod()
9923 void ClassLinker::SetClassRoot(ClassRoot class_root, ObjPtr<mirror::Class> klass) { in SetClassRoot() argument
9926 DCHECK(klass != nullptr); in SetClassRoot()
9927 DCHECK(klass->GetClassLoader() == nullptr); in SetClassRoot()
9934 class_roots->Set<false>(index, klass); in SetClassRoot()
10187 bool operator()(ObjPtr<mirror::Class> klass) REQUIRES_SHARED(Locks::mutator_lock_) override { in operator ()() argument
10188 if (klass->GetVirtualMethodsSliceUnchecked(pointer_size_).Contains(method_)) { in operator ()()
10189 holder_ = klass; in operator ()()