Lines Matching refs:art

140 constexpr bool kCheckAllMethodsSeenOnce = art::kIsDebugBuild;
149 art::ArtMethod* FindObsoleteVersion(art::ArtMethod* original) const in FindObsoleteVersion()
150 REQUIRES(art::Locks::mutator_lock_, art::Roles::uninterruptible_) { in FindObsoleteVersion()
153 art::ArtMethod* res = obsolete_methods_->GetElementPtrSize<art::ArtMethod*>( in FindObsoleteVersion()
154 method_pair->second, art::kRuntimePointerSize); in FindObsoleteVersion()
162 void RecordObsolete(art::ArtMethod* original, art::ArtMethod* obsolete) in RecordObsolete()
163 REQUIRES(art::Locks::mutator_lock_, art::Roles::uninterruptible_) { in RecordObsolete()
169 obsolete_methods_->GetElementPtrSize<art::ArtMethod*>(slot, art::kRuntimePointerSize)); in RecordObsolete()
171 obsolete_methods_->SetElementPtrSize(slot, obsolete, art::kRuntimePointerSize); in RecordObsolete()
176 ObsoleteMap(art::ObjPtr<art::mirror::PointerArray> obsolete_methods, in ObsoleteMap()
177 art::ObjPtr<art::mirror::ObjectArray<art::mirror::DexCache>> obsolete_dex_caches, in ObsoleteMap()
178 art::ObjPtr<art::mirror::DexCache> original_dex_cache) in ObsoleteMap()
184 while (obsolete_methods_->GetElementPtrSize<art::ArtMethod*>( in ObsoleteMap()
185 next_free_slot_, art::kRuntimePointerSize) != nullptr) { in ObsoleteMap()
194 art::ArtMethod* old_method;
195 art::ArtMethod* obsolete_method;
207 REQUIRES(art::Locks::mutator_lock_, art::Roles::uninterruptible_) { in operator *()
208 art::ArtMethod* obsolete = map_->obsolete_methods_->GetElementPtrSize<art::ArtMethod*>( in operator *()
209 iter_->second, art::kRuntimePointerSize); in operator *()
235 std::unordered_map<art::ArtMethod*, int32_t>::const_iterator iter) in ObsoleteMapIter()
239 std::unordered_map<art::ArtMethod*, int32_t>::const_iterator iter_;
254 std::unordered_map<art::ArtMethod*, int32_t> id_map_;
257 art::ObjPtr<art::mirror::PointerArray> obsolete_methods_;
258 art::ObjPtr<art::mirror::ObjectArray<art::mirror::DexCache>> obsolete_dex_caches_;
259 art::ObjPtr<art::mirror::DexCache> original_dex_cache_;
264 class ObsoleteMethodStackVisitor : public art::StackVisitor {
267 art::Thread* thread, in ObsoleteMethodStackVisitor()
268 art::LinearAlloc* allocator, in ObsoleteMethodStackVisitor()
269 const std::unordered_set<art::ArtMethod*>& obsoleted_methods, in ObsoleteMethodStackVisitor()
285 art::Thread* thread, in UpdateObsoleteFrames()
286 art::LinearAlloc* allocator, in UpdateObsoleteFrames()
287 const std::unordered_set<art::ArtMethod*>& obsoleted_methods, in UpdateObsoleteFrames()
289 REQUIRES(art::Locks::mutator_lock_) { in UpdateObsoleteFrames()
297 bool VisitFrame() override REQUIRES(art::Locks::mutator_lock_) { in VisitFrame()
298 art::ScopedAssertNoThreadSuspension snts("Fixing up the stack for obsolete methods."); in VisitFrame()
299 art::ArtMethod* old_method = GetMethod(); in VisitFrame()
306 art::ArtMethod* new_obsolete_method = obsolete_maps_->FindObsoleteVersion(old_method); in VisitFrame()
309 art::Runtime* runtime = art::Runtime::Current(); in VisitFrame()
310 art::ClassLinker* cl = runtime->GetClassLinker(); in VisitFrame()
312 const size_t method_size = art::ArtMethod::Size(ptr_size); in VisitFrame()
313 auto* method_storage = allocator_->Alloc(art::Thread::Current(), method_size); in VisitFrame()
316 new_obsolete_method = new (method_storage) art::ArtMethod(); in VisitFrame()
332 art::LinearAlloc* allocator_;
334 const std::unordered_set<art::ArtMethod*>& obsoleted_methods_;
347 art::Thread* self = art::Thread::Current(); in IsModifiableClassGeneric()
348 art::ScopedObjectAccess soa(self); in IsModifiableClassGeneric()
349 art::StackHandleScope<1> hs(self); in IsModifiableClassGeneric()
350 art::ObjPtr<art::mirror::Object> obj(self->DecodeJObject(klass)); in IsModifiableClassGeneric()
354 art::Handle<art::mirror::Class> h_klass(hs.NewHandle(obj->AsClass())); in IsModifiableClassGeneric()
375 art::Thread* self = art::Thread::Current(); in GetClassRedefinitionError()
376 art::ScopedObjectAccess soa(self); in GetClassRedefinitionError()
377 art::StackHandleScope<1> hs(self); in GetClassRedefinitionError()
378 art::ObjPtr<art::mirror::Object> obj(self->DecodeJObject(klass)); in GetClassRedefinitionError()
382 art::Handle<art::mirror::Class> h_klass(hs.NewHandle(obj->AsClass())); in GetClassRedefinitionError()
387 jvmtiError Redefiner::GetClassRedefinitionError(art::Handle<art::mirror::Class> klass, in GetClassRedefinitionError()
389 art::Thread* self = art::Thread::Current(); in GetClassRedefinitionError()
421 for (jclass c : art::NonDebuggableClasses::GetNonDebuggableClasses()) { in GetClassRedefinitionError()
440 if (!art::Runtime::Current()->GetClassLinker()->EnsureInitialized( in GetClassRedefinitionError()
458 self->DecodeJObject(art::WellKnownClasses::java_lang_Thread)->AsClass())) { in GetClassRedefinitionError()
465 [](art::ObjPtr<art::mirror::Class> k) REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetClassRedefinitionError()
469 art::ObjPtr<art::mirror::ClassExt> ext(k->GetExtData()); in GetClassRedefinitionError()
485 art::ClassFuncVisitor cfv( in GetClassRedefinitionError()
486 [&](art::ObjPtr<art::mirror::Class> k) REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetClassRedefinitionError()
500 art::Runtime::Current()->GetClassLinker()->VisitClasses(&cfv); in GetClassRedefinitionError()
507 art::Handle<art::mirror::Class> klass, /*out*/ std::string* error_msg);
509 art::Handle<art::mirror::Class> klass, /*out*/ std::string* error_msg);
512 art::MemMap Redefiner::MoveDataToMemMap(const std::string& original_location, in MoveDataToMemMap()
513 art::ArrayRef<const unsigned char> data, in MoveDataToMemMap()
515 art::MemMap map = art::MemMap::MapAnonymous( in MoveDataToMemMap()
533 const art::DexFile* redefined_dex_file, in ClassRedefinition()
535 art::ArrayRef<const unsigned char> orig_dex_file) : in ClassRedefinition()
554 art::Runtime* runtime = art::Runtime::Current(); in RedefineClassesGeneric()
555 art::Thread* self = art::Thread::Current(); in RedefineClassesGeneric()
631 art::Thread::Current(), in StructurallyRedefineClassDirect()
639 art::Runtime::Current(), in StructurallyRedefineClassDirect()
640 art::Thread::Current(), in StructurallyRedefineClassDirect()
651 art::Runtime* runtime, in RedefineClassesDirect()
652 art::Thread* self, in RedefineClassesDirect()
669 art::jit::ScopedJitSuspend suspend_jit; in RedefineClassesDirect()
671 art::ScopedObjectAccess soa(self); in RedefineClassesDirect()
700 art::MemMap map = MoveDataToMemMap(original_dex_location, def.GetDexData(), error_msg_); in AddRedefinition()
708 if (map.Size() < sizeof(art::DexFile::Header)) { in AddRedefinition()
713 uint32_t checksum = reinterpret_cast<const art::DexFile::Header*>(map.Begin())->checksum_; in AddRedefinition()
714 const art::ArtDexFileLoader dex_file_loader; in AddRedefinition()
715 std::unique_ptr<const art::DexFile> dex_file(dex_file_loader.Open(name, in AddRedefinition()
735 art::ObjPtr<art::mirror::Class> Redefiner::ClassRedefinition::GetMirrorClass() { in GetMirrorClass()
739 art::ObjPtr<art::mirror::ClassLoader> Redefiner::ClassRedefinition::GetClassLoader() { in GetClassLoader()
743 art::mirror::DexCache* Redefiner::ClassRedefinition::CreateNewDexCache( in CreateNewDexCache()
744 art::Handle<art::mirror::ClassLoader> loader) { in CreateNewDexCache()
745 art::StackHandleScope<2> hs(driver_->self_); in CreateNewDexCache()
746 art::ClassLinker* cl = driver_->runtime_->GetClassLinker(); in CreateNewDexCache()
747 art::Handle<art::mirror::DexCache> cache(hs.NewHandle( in CreateNewDexCache()
748 art::ObjPtr<art::mirror::DexCache>::DownCast( in CreateNewDexCache()
749 art::GetClassRoot<art::mirror::DexCache>(cl)->AllocObject(driver_->self_)))); in CreateNewDexCache()
754 art::Handle<art::mirror::String> location(hs.NewHandle( in CreateNewDexCache()
760 art::WriterMutexLock mu(driver_->self_, *art::Locks::dex_lock_); in CreateNewDexCache()
777 art::mirror::Object* Redefiner::ClassRedefinition::AllocateOrGetOriginalDexFile() { in AllocateOrGetOriginalDexFile()
780 return art::mirror::ByteArray::AllocateAndFill( in AllocateOrGetOriginalDexFile()
787 art::ObjPtr<art::mirror::ClassExt> ext(GetMirrorClass()->GetExtData()); in AllocateOrGetOriginalDexFile()
789 art::ObjPtr<art::mirror::Object> old_original_dex_file(ext->GetOriginalDexFile()); in AllocateOrGetOriginalDexFile()
797 art::ObjPtr<art::mirror::DexCache> current_dex_cache(GetMirrorClass()->GetDexCache()); in AllocateOrGetOriginalDexFile()
808 art::LinearAlloc* allocator;
809 std::unordered_set<art::ArtMethod*> obsolete_methods;
811 explicit CallbackCtx(ObsoleteMap* map, art::LinearAlloc* alloc) in CallbackCtx()
815 void DoAllocateObsoleteMethodsCallback(art::Thread* t, void* vdata) NO_THREAD_SAFETY_ANALYSIS { in DoAllocateObsoleteMethodsCallback()
827 art::ObjPtr<art::mirror::Class> art_klass) { in FindAndAllocateObsoleteMethods()
829 art::ScopedAssertNoThreadSuspension ns("No thread suspension during thread stack walking"); in FindAndAllocateObsoleteMethods()
830 art::ObjPtr<art::mirror::ClassExt> ext = art_klass->GetExtData(); in FindAndAllocateObsoleteMethods()
832 art::ClassLinker* linker = driver_->runtime_->GetClassLinker(); in FindAndAllocateObsoleteMethods()
837 for (auto& m : art_klass->GetDeclaredMethods(art::kRuntimePointerSize)) { in FindAndAllocateObsoleteMethods()
853 art::MutexLock mu(driver_->self_, *art::Locks::thread_list_lock_); in FindAndAllocateObsoleteMethods()
854 art::ThreadList* list = art::Runtime::Current()->GetThreadList(); in FindAndAllocateObsoleteMethods()
858 art::jit::Jit* jit = art::Runtime::Current()->GetJit(); in FindAndAllocateObsoleteMethods()
871 template <> struct SignatureType<art::ArtField> { using type = std::string_view; };
872 template <> struct SignatureType<art::ArtMethod> { using type = art::Signature; };
878 NameAndSignature(const art::DexFile* dex_file, uint32_t id);
905 using FieldNameAndSignature = NameAndSignature<art::ArtField>;
907 FieldNameAndSignature::NameAndSignature(const art::DexFile* dex_file, uint32_t id) in NameAndSignature()
911 using MethodNameAndSignature = NameAndSignature<art::ArtMethod>;
913 MethodNameAndSignature::NameAndSignature(const art::DexFile* dex_file, uint32_t id) in NameAndSignature()
929 art::StackHandleScope<1> hs(driver_->self_); in CheckMethods()
930 art::Handle<art::mirror::Class> h_klass(hs.NewHandle(GetMirrorClass())); in CheckMethods()
934 art::ClassAccessor accessor(*dex_file_, dex_file_->GetClassDef(0)); in CheckMethods()
936 uint32_t num_old_method = h_klass->GetDeclaredMethodsSlice(art::kRuntimePointerSize).size(); in CheckMethods()
952 const art::DexFile& old_dex_file = h_klass->GetDexFile(); in CheckMethods()
953 art::ClassAccessor old_accessor(old_dex_file, *h_klass->GetClassDef()); in CheckMethods()
958 for (const art::ClassAccessor::Method& new_method : accessor.GetMethods()) { in CheckMethods()
1011 art::StackHandleScope<1> hs(driver_->self_); in CheckFields()
1012 art::Handle<art::mirror::Class> h_klass(hs.NewHandle(GetMirrorClass())); in CheckFields()
1014 art::ClassAccessor new_accessor(*dex_file_, dex_file_->GetClassDef(0)); in CheckFields()
1016 const art::DexFile& old_dex_file = h_klass->GetDexFile(); in CheckFields()
1017 art::ClassAccessor old_accessor(old_dex_file, *h_klass->GetClassDef()); in CheckFields()
1022 for (const art::ClassAccessor::Field& new_field : new_accessor.GetFields()) { in CheckFields()
1070 art::StackHandleScope<1> hs(driver_->self_); in CheckClass()
1080 const art::dex::ClassDef& def = dex_file_->GetClassDef(0); in CheckClass()
1082 art::Handle<art::mirror::Class> current_class(hs.NewHandle(GetMirrorClass())); in CheckClass()
1085 if (def.GetJavaAccessFlags() != (current_class->GetAccessFlags() & art::kAccValidClassFlags)) { in CheckClass()
1093 DCHECK_NE(def.class_idx_, art::dex::TypeIndex::Invalid()) << "Invalid type index"; in CheckClass()
1105 if (def.superclass_idx_ != art::dex::TypeIndex::Invalid()) { in CheckClass()
1117 const art::dex::TypeList* interfaces = dex_file_->GetInterfacesList(def); in CheckClass()
1126 const art::dex::TypeList* current_interfaces = current_class->GetInterfaceTypeList(); in CheckClass()
1133 const art::DexFile& orig_dex_file = current_class->GetDexFile(); in CheckClass()
1149 art::StackHandleScope<1> hs(driver_->self_); in CheckRedefinable()
1151 art::Handle<art::mirror::Class> h_klass(hs.NewHandle(GetMirrorClass())); in CheckRedefinable()
1199 RedefinitionDataHolder(art::StackHandleScope<1>* hs, in RedefinitionDataHolder()
1200 art::Runtime* runtime, in RedefinitionDataHolder()
1201 art::Thread* self, in RedefinitionDataHolder()
1203 REQUIRES_SHARED(art::Locks::mutator_lock_) : in RedefinitionDataHolder()
1204 arr_(hs->NewHandle(art::mirror::ObjectArray<art::mirror::Object>::Alloc( in RedefinitionDataHolder()
1206 art::GetClassRoot<art::mirror::ObjectArray<art::mirror::Object>>(runtime->GetClassLinker()), in RedefinitionDataHolder()
1213 bool IsNull() const REQUIRES_SHARED(art::Locks::mutator_lock_) { in IsNull()
1217 art::ObjPtr<art::mirror::ClassLoader> GetSourceClassLoader(jint klass_index) const in GetSourceClassLoader()
1218 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetSourceClassLoader()
1219 return art::ObjPtr<art::mirror::ClassLoader>::DownCast( in GetSourceClassLoader()
1222 art::ObjPtr<art::mirror::Object> GetJavaDexFile(jint klass_index) const in GetJavaDexFile()
1223 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetJavaDexFile()
1226 art::ObjPtr<art::mirror::LongArray> GetNewDexFileCookie(jint klass_index) const in GetNewDexFileCookie()
1227 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetNewDexFileCookie()
1228 return art::ObjPtr<art::mirror::LongArray>::DownCast( in GetNewDexFileCookie()
1231 art::ObjPtr<art::mirror::DexCache> GetNewDexCache(jint klass_index) const in GetNewDexCache()
1232 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetNewDexCache()
1233 return art::ObjPtr<art::mirror::DexCache>::DownCast(GetSlot(klass_index, kSlotNewDexCache)); in GetNewDexCache()
1235 art::ObjPtr<art::mirror::Class> GetMirrorClass(jint klass_index) const in GetMirrorClass()
1236 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetMirrorClass()
1237 return art::ObjPtr<art::mirror::Class>::DownCast(GetSlot(klass_index, kSlotMirrorClass)); in GetMirrorClass()
1240 art::ObjPtr<art::mirror::Object> GetOriginalDexFile(jint klass_index) const in GetOriginalDexFile()
1241 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetOriginalDexFile()
1242 return art::ObjPtr<art::mirror::Object>::DownCast(GetSlot(klass_index, kSlotOrigDexFile)); in GetOriginalDexFile()
1245 art::ObjPtr<art::mirror::PointerArray> GetOldObsoleteMethods(jint klass_index) const in GetOldObsoleteMethods()
1246 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetOldObsoleteMethods()
1247 return art::ObjPtr<art::mirror::PointerArray>::DownCast( in GetOldObsoleteMethods()
1251 art::ObjPtr<art::mirror::ObjectArray<art::mirror::DexCache>> GetOldDexCaches( in GetOldDexCaches()
1252 jint klass_index) const REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetOldDexCaches()
1253 return art::ObjPtr<art::mirror::ObjectArray<art::mirror::DexCache>>::DownCast( in GetOldDexCaches()
1257 art::ObjPtr<art::mirror::Class> GetNewClassObject(jint klass_index) const in GetNewClassObject()
1258 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetNewClassObject()
1259 return art::ObjPtr<art::mirror::Class>::DownCast(GetSlot(klass_index, kSlotNewClassObject)); in GetNewClassObject()
1262 art::ObjPtr<art::mirror::ObjectArray<art::mirror::Object>> GetOldInstanceObjects( in GetOldInstanceObjects()
1263 jint klass_index) const REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetOldInstanceObjects()
1264 return art::ObjPtr<art::mirror::ObjectArray<art::mirror::Object>>::DownCast( in GetOldInstanceObjects()
1268 art::ObjPtr<art::mirror::ObjectArray<art::mirror::Object>> GetNewInstanceObjects( in GetNewInstanceObjects()
1269 jint klass_index) const REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetNewInstanceObjects()
1270 return art::ObjPtr<art::mirror::ObjectArray<art::mirror::Object>>::DownCast( in GetNewInstanceObjects()
1273 art::ObjPtr<art::mirror::ObjectArray<art::mirror::Class>> GetOldClasses(jint klass_index) const in GetOldClasses()
1274 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetOldClasses()
1275 return art::ObjPtr<art::mirror::ObjectArray<art::mirror::Class>>::DownCast( in GetOldClasses()
1278 art::ObjPtr<art::mirror::ObjectArray<art::mirror::Class>> GetNewClasses(jint klass_index) const in GetNewClasses()
1279 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetNewClasses()
1280 return art::ObjPtr<art::mirror::ObjectArray<art::mirror::Class>>::DownCast( in GetNewClasses()
1283 bool IsInitialized(jint klass_index) REQUIRES_SHARED(art::Locks::mutator_lock_) { in IsInitialized()
1286 bool IsActuallyStructural(jint klass_index) REQUIRES_SHARED(art::Locks::mutator_lock_) { in IsActuallyStructural()
1290 bool IsInitialStructural(jint klass_index) REQUIRES_SHARED(art::Locks::mutator_lock_) { in IsInitialStructural()
1294 void SetSourceClassLoader(jint klass_index, art::ObjPtr<art::mirror::ClassLoader> loader) in SetSourceClassLoader()
1295 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetSourceClassLoader()
1298 void SetJavaDexFile(jint klass_index, art::ObjPtr<art::mirror::Object> dexfile) in SetJavaDexFile()
1299 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetJavaDexFile()
1302 void SetNewDexFileCookie(jint klass_index, art::ObjPtr<art::mirror::LongArray> cookie) in SetNewDexFileCookie()
1303 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetNewDexFileCookie()
1306 void SetNewDexCache(jint klass_index, art::ObjPtr<art::mirror::DexCache> cache) in SetNewDexCache()
1307 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetNewDexCache()
1310 void SetMirrorClass(jint klass_index, art::ObjPtr<art::mirror::Class> klass) in SetMirrorClass()
1311 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetMirrorClass()
1314 void SetOriginalDexFile(jint klass_index, art::ObjPtr<art::mirror::Object> bytes) in SetOriginalDexFile()
1315 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetOriginalDexFile()
1318 void SetOldObsoleteMethods(jint klass_index, art::ObjPtr<art::mirror::PointerArray> methods) in SetOldObsoleteMethods()
1319 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetOldObsoleteMethods()
1323 art::ObjPtr<art::mirror::ObjectArray<art::mirror::DexCache>> caches) in SetOldDexCaches()
1324 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetOldDexCaches()
1328 void SetNewClassObject(jint klass_index, art::ObjPtr<art::mirror::Class> klass) in SetNewClassObject()
1329 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetNewClassObject()
1334 art::ObjPtr<art::mirror::ObjectArray<art::mirror::Object>> objs) in SetOldInstanceObjects()
1335 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetOldInstanceObjects()
1339 art::ObjPtr<art::mirror::ObjectArray<art::mirror::Object>> objs) in SetNewInstanceObjects()
1340 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetNewInstanceObjects()
1344 art::ObjPtr<art::mirror::ObjectArray<art::mirror::Class>> klasses) in SetOldClasses()
1345 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetOldClasses()
1349 art::ObjPtr<art::mirror::ObjectArray<art::mirror::Class>> klasses) in SetNewClasses()
1350 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetNewClasses()
1353 void SetInitialized(jint klass_index) REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetInitialized()
1356 void SetActuallyStructural(jint klass_index) REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetActuallyStructural()
1359 void SetInitialStructural(jint klass_index) REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetInitialStructural()
1362 int32_t Length() const REQUIRES_SHARED(art::Locks::mutator_lock_) { in Length()
1367 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetRedefinitions()
1372 REQUIRES_SHARED(art::Locks::mutator_lock_) { in operator ==()
1377 REQUIRES_SHARED(art::Locks::mutator_lock_) { in operator !=()
1381 RedefinitionDataIter begin() REQUIRES_SHARED(art::Locks::mutator_lock_);
1382 RedefinitionDataIter end() REQUIRES_SHARED(art::Locks::mutator_lock_);
1385 mutable art::Handle<art::mirror::ObjectArray<art::mirror::Object>> arr_;
1396 art::ObjPtr<art::mirror::Object> GetSlot(jint klass_index, DataSlot slot) const in GetSlot()
1397 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetSlot()
1404 art::ObjPtr<art::mirror::Object> obj) REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetSlot()
1405 DCHECK(!art::Runtime::Current()->IsActiveTransaction()); in SetSlot()
1423 REQUIRES_SHARED(art::Locks::mutator_lock_) { in operator ==()
1428 REQUIRES_SHARED(art::Locks::mutator_lock_) { in operator !=()
1459 Redefiner::ClassRedefinition& GetRedefinition() REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetRedefinition()
1467 art::ObjPtr<art::mirror::ClassLoader> GetSourceClassLoader() const in GetSourceClassLoader()
1468 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetSourceClassLoader()
1471 art::ObjPtr<art::mirror::Object> GetJavaDexFile() const in GetJavaDexFile()
1472 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetJavaDexFile()
1475 art::ObjPtr<art::mirror::LongArray> GetNewDexFileCookie() const in GetNewDexFileCookie()
1476 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetNewDexFileCookie()
1479 art::ObjPtr<art::mirror::DexCache> GetNewDexCache() const in GetNewDexCache()
1480 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetNewDexCache()
1483 art::ObjPtr<art::mirror::Class> GetMirrorClass() const in GetMirrorClass()
1484 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetMirrorClass()
1487 art::ObjPtr<art::mirror::Object> GetOriginalDexFile() const in GetOriginalDexFile()
1488 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetOriginalDexFile()
1491 art::ObjPtr<art::mirror::PointerArray> GetOldObsoleteMethods() const in GetOldObsoleteMethods()
1492 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetOldObsoleteMethods()
1495 art::ObjPtr<art::mirror::ObjectArray<art::mirror::DexCache>> GetOldDexCaches() const in GetOldDexCaches()
1496 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetOldDexCaches()
1500 art::ObjPtr<art::mirror::Class> GetNewClassObject() const in GetNewClassObject()
1501 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetNewClassObject()
1505 art::ObjPtr<art::mirror::ObjectArray<art::mirror::Object>> GetOldInstanceObjects() const in GetOldInstanceObjects()
1506 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetOldInstanceObjects()
1509 art::ObjPtr<art::mirror::ObjectArray<art::mirror::Object>> GetNewInstanceObjects() const in GetNewInstanceObjects()
1510 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetNewInstanceObjects()
1513 art::ObjPtr<art::mirror::ObjectArray<art::mirror::Class>> GetOldClasses() const in GetOldClasses()
1514 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetOldClasses()
1517 art::ObjPtr<art::mirror::ObjectArray<art::mirror::Class>> GetNewClasses() const in GetNewClasses()
1518 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetNewClasses()
1521 bool IsInitialized() const REQUIRES_SHARED(art::Locks::mutator_lock_) { in IsInitialized()
1524 bool IsActuallyStructural() const REQUIRES_SHARED(art::Locks::mutator_lock_) { in IsActuallyStructural()
1527 bool IsInitialStructural() const REQUIRES_SHARED(art::Locks::mutator_lock_) { in IsInitialStructural()
1534 void SetSourceClassLoader(art::mirror::ClassLoader* loader) in SetSourceClassLoader()
1535 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetSourceClassLoader()
1538 void SetJavaDexFile(art::ObjPtr<art::mirror::Object> dexfile) in SetJavaDexFile()
1539 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetJavaDexFile()
1542 void SetNewDexFileCookie(art::ObjPtr<art::mirror::LongArray> cookie) in SetNewDexFileCookie()
1543 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetNewDexFileCookie()
1546 void SetNewDexCache(art::ObjPtr<art::mirror::DexCache> cache) in SetNewDexCache()
1547 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetNewDexCache()
1550 void SetMirrorClass(art::ObjPtr<art::mirror::Class> klass) in SetMirrorClass()
1551 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetMirrorClass()
1554 void SetOriginalDexFile(art::ObjPtr<art::mirror::Object> bytes) in SetOriginalDexFile()
1555 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetOriginalDexFile()
1558 void SetOldObsoleteMethods(art::ObjPtr<art::mirror::PointerArray> methods) in SetOldObsoleteMethods()
1559 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetOldObsoleteMethods()
1562 void SetOldDexCaches(art::ObjPtr<art::mirror::ObjectArray<art::mirror::DexCache>> caches) in SetOldDexCaches()
1563 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetOldDexCaches()
1566 void SetNewClassObject(art::ObjPtr<art::mirror::Class> klass) in SetNewClassObject()
1567 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetNewClassObject()
1570 void SetOldInstanceObjects(art::ObjPtr<art::mirror::ObjectArray<art::mirror::Object>> objs) in SetOldInstanceObjects()
1571 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetOldInstanceObjects()
1574 void SetNewInstanceObjects(art::ObjPtr<art::mirror::ObjectArray<art::mirror::Object>> objs) in SetNewInstanceObjects()
1575 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetNewInstanceObjects()
1578 void SetOldClasses(art::ObjPtr<art::mirror::ObjectArray<art::mirror::Class>> klasses) in SetOldClasses()
1579 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetOldClasses()
1582 void SetNewClasses(art::ObjPtr<art::mirror::ObjectArray<art::mirror::Class>> klasses) in SetNewClasses()
1583 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetNewClasses()
1586 void SetInitialized() REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetInitialized()
1589 void SetActuallyStructural() REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetActuallyStructural()
1592 void SetInitialStructural() REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetInitialStructural()
1611 art::StackHandleScope<2> hs(driver_->self_); in CheckVerification()
1614 art::verifier::FailureKind failure = in CheckVerification()
1615 art::verifier::ClassVerifier::VerifyClass(driver_->self_, in CheckVerification()
1624 art::verifier::HardFailLogMode::kLogWarning, in CheckVerification()
1625 art::Runtime::Current()->GetTargetSdkVersion(), in CheckVerification()
1628 case art::verifier::FailureKind::kNoFailure: in CheckVerification()
1632 case art::verifier::FailureKind::kSoftFailure: in CheckVerification()
1633 case art::verifier::FailureKind::kAccessChecksFailure: in CheckVerification()
1634 case art::verifier::FailureKind::kTypeChecksFailure: in CheckVerification()
1640 case art::verifier::FailureKind::kHardFailure: { in CheckVerification()
1651 art::Handle<art::mirror::ClassLoader> source_class_loader, in AllocateAndRememberNewDexFileCookie()
1652 art::Handle<art::mirror::Object> dex_file_obj, in AllocateAndRememberNewDexFileCookie()
1654 art::StackHandleScope<2> hs(driver_->self_); in AllocateAndRememberNewDexFileCookie()
1655 art::MutableHandle<art::mirror::LongArray> old_cookie( in AllocateAndRememberNewDexFileCookie()
1656 hs.NewHandle<art::mirror::LongArray>(nullptr)); in AllocateAndRememberNewDexFileCookie()
1675 art::Handle<art::mirror::LongArray> in AllocateAndRememberNewDexFileCookie()
1700 bool CompareClasses(art::ObjPtr<art::mirror::Class> l, art::ObjPtr<art::mirror::Class> r) in CompareClasses()
1701 REQUIRES_SHARED(art::Locks::mutator_lock_) { in CompareClasses()
1702 auto parents = [](art::ObjPtr<art::mirror::Class> c) REQUIRES_SHARED(art::Locks::mutator_lock_) { in CompareClasses()
1719 art::gc::Heap* heap = driver_->runtime_->GetHeap(); in CollectAndCreateNewInstances()
1720 art::VariableSizedHandleScope hs(driver_->self_); in CollectAndCreateNewInstances()
1721 art::Handle<art::mirror::Class> old_klass(hs.NewHandle(cur_data->GetMirrorClass())); in CollectAndCreateNewInstances()
1722 std::vector<art::Handle<art::mirror::Object>> old_instances; in CollectAndCreateNewInstances()
1723 auto is_instance = [&](art::mirror::Object* obj) REQUIRES_SHARED(art::Locks::mutator_lock_) { in CollectAndCreateNewInstances()
1726 heap->VisitObjects([&](art::mirror::Object* obj) REQUIRES_SHARED(art::Locks::mutator_lock_) { in CollectAndCreateNewInstances()
1732 art::Handle<art::mirror::ObjectArray<art::mirror::Class>> old_classes_arr( in CollectAndCreateNewInstances()
1734 art::Handle<art::mirror::ObjectArray<art::mirror::Class>> new_classes_arr( in CollectAndCreateNewInstances()
1738 art::Handle<art::mirror::Class> obj_array_class( in CollectAndCreateNewInstances()
1739 hs.NewHandle(art::GetClassRoot<art::mirror::ObjectArray<art::mirror::Object>>( in CollectAndCreateNewInstances()
1741 art::Handle<art::mirror::ObjectArray<art::mirror::Object>> old_instances_arr( in CollectAndCreateNewInstances()
1742 hs.NewHandle(art::mirror::ObjectArray<art::mirror::Object>::Alloc( in CollectAndCreateNewInstances()
1755 art::Handle<art::mirror::ObjectArray<art::mirror::Object>> new_instances_arr( in CollectAndCreateNewInstances()
1756 hs.NewHandle(art::mirror::ObjectArray<art::mirror::Object>::Alloc( in CollectAndCreateNewInstances()
1764 for (auto pair : art::ZipCount(art::IterationRange(old_instances.begin(), old_instances.end()))) { in CollectAndCreateNewInstances()
1765 art::Handle<art::mirror::Object> hinstance(pair.first); in CollectAndCreateNewInstances()
1767 auto iterator = art::ZipLeft(old_classes_arr.Iterate<art::mirror::Class>(), in CollectAndCreateNewInstances()
1768 new_classes_arr.Iterate<art::mirror::Class>()); in CollectAndCreateNewInstances()
1771 [&](auto class_pair) REQUIRES_SHARED(art::Locks::mutator_lock_) { in CollectAndCreateNewInstances()
1788 art::ObjPtr<art::mirror::Object> new_instance( in CollectAndCreateNewInstances()
1790 art::mirror::Class::AddFinalizer::kNoAddFinalizer, in CollectAndCreateNewInstances()
1809 art::ScopedObjectAccessUnchecked soa(driver_->self_); in FinishRemainingCommonAllocations()
1810 art::StackHandleScope<2> hs(driver_->self_); in FinishRemainingCommonAllocations()
1813 art::Handle<art::mirror::ClassLoader> loader(hs.NewHandle(GetClassLoader())); in FinishRemainingCommonAllocations()
1815 if (!art::ClassLinker::IsBootClassLoader(soa, loader.Get())) { in FinishRemainingCommonAllocations()
1817 art::Handle<art::mirror::Object> dex_file_obj(hs.NewHandle( in FinishRemainingCommonAllocations()
1858 art::VariableSizedHandleScope hs(driver_->self_); in FinishNewClassAllocations()
1863 [this](RedefinitionDataIter* data, art::Handle<art::mirror::Class> super_class) in FinishNewClassAllocations()
1864 REQUIRES_SHARED(art::Locks::mutator_lock_) -> art::ObjPtr<art::mirror::Class> { in FinishNewClassAllocations()
1865 art::StackHandleScope<3> chs(driver_->self_); in FinishNewClassAllocations()
1866 art::Handle<art::mirror::Class> nc( in FinishNewClassAllocations()
1885 std::vector<art::Handle<art::mirror::Class>> old_types; in FinishNewClassAllocations()
1887 art::gc::Heap* heap = driver_->runtime_->GetHeap(); in FinishNewClassAllocations()
1888 art::Handle<art::mirror::Class> in FinishNewClassAllocations()
1893 auto is_subtype = [&](art::mirror::Object* obj) REQUIRES_SHARED(art::Locks::mutator_lock_) { in FinishNewClassAllocations()
1900 heap->VisitObjects([&](art::mirror::Object* obj) REQUIRES_SHARED(art::Locks::mutator_lock_) { in FinishNewClassAllocations()
1910 art::Handle<art::mirror::Class> cls_array_class( in FinishNewClassAllocations()
1911 hs.NewHandle(art::GetClassRoot<art::mirror::ObjectArray<art::mirror::Class>>( in FinishNewClassAllocations()
1913 art::Handle<art::mirror::ObjectArray<art::mirror::Class>> old_classes_arr( in FinishNewClassAllocations()
1914 hs.NewHandle(art::mirror::ObjectArray<art::mirror::Class>::Alloc( in FinishNewClassAllocations()
1924 art::ScopedAssertNoThreadSuspension sants("Sort classes"); in FinishNewClassAllocations()
1929 [](auto& l, auto& r) REQUIRES_SHARED(art::Locks::mutator_lock_) { in FinishNewClassAllocations()
1940 art::Handle<art::mirror::ObjectArray<art::mirror::Class>> new_classes_arr( in FinishNewClassAllocations()
1941 hs.NewHandle(art::mirror::ObjectArray<art::mirror::Class>::Alloc( in FinishNewClassAllocations()
1950 art::MutableHandle<art::mirror::DexCache> dch(hs.NewHandle<art::mirror::DexCache>(nullptr)); in FinishNewClassAllocations()
1951 art::MutableHandle<art::mirror::Class> superclass(hs.NewHandle<art::mirror::Class>(nullptr)); in FinishNewClassAllocations()
1953 art::Handle<art::mirror::Class>& old_type = old_types[i]; in FinishNewClassAllocations()
1961 [&](art::Handle<art::mirror::Class>& v) in FinishNewClassAllocations()
1962 REQUIRES_SHARED(art::Locks::mutator_lock_) { in FinishNewClassAllocations()
1971 *cur_data + 1, holder.end(), [&](auto it) REQUIRES_SHARED(art::Locks::mutator_lock_) { in FinishNewClassAllocations()
1974 art::ObjPtr<art::mirror::Class> new_type; in FinishNewClassAllocations()
1999 uint32_t Redefiner::ClassRedefinition::GetNewClassSize(art::ClassAccessor& accessor) { in GetNewClassSize()
2005 for (const art::ClassAccessor::Field& f : accessor.GetStaticFields()) { in GetNewClassSize()
2023 return art::mirror::Class::ComputeClassSize(/*has_embedded_vtable=*/ false, in GetNewClassSize()
2030 art::kRuntimePointerSize); in GetNewClassSize()
2033 art::ObjPtr<art::mirror::Class>
2034 Redefiner::ClassRedefinition::AllocateNewClassObject(art::Handle<art::mirror::DexCache> cache) { in AllocateNewClassObject()
2035 art::StackHandleScope<2> hs(driver_->self_); in AllocateNewClassObject()
2036 art::Handle<art::mirror::Class> old_class(hs.NewHandle(GetMirrorClass())); in AllocateNewClassObject()
2037 art::Handle<art::mirror::Class> super_class(hs.NewHandle(old_class->GetSuperClass())); in AllocateNewClassObject()
2041 art::ObjPtr<art::mirror::Class> Redefiner::ClassRedefinition::AllocateNewClassObject( in AllocateNewClassObject()
2042 art::Handle<art::mirror::Class> old_class, in AllocateNewClassObject()
2043 art::Handle<art::mirror::Class> super_class, in AllocateNewClassObject()
2044 art::Handle<art::mirror::DexCache> cache, in AllocateNewClassObject()
2051 art::StackHandleScope<3> hs(driver_->self_); in AllocateNewClassObject()
2052 art::ClassLinker* linker = driver_->runtime_->GetClassLinker(); in AllocateNewClassObject()
2053 const art::DexFile* dex_file = cache->GetDexFile(); in AllocateNewClassObject()
2054 art::ClassAccessor accessor(*dex_file, dex_class_def_index); in AllocateNewClassObject()
2055 art::Handle<art::mirror::Class> new_class(hs.NewHandle(linker->AllocClass( in AllocateNewClassObject()
2073 art::ObjectLock<art::mirror::Class> lock(driver_->self_, new_class); in AllocateNewClassObject()
2076 new_class->SetIfTable(art::GetClassRoot<art::mirror::Object>(linker)->GetIfTable()); in AllocateNewClassObject()
2080 art::MutableHandle<art::mirror::Class> linked_class(hs.NewHandle<art::mirror::Class>(nullptr)); in AllocateNewClassObject()
2081 art::Handle<art::mirror::ObjectArray<art::mirror::Class>> proxy_ifaces( in AllocateNewClassObject()
2082 hs.NewHandle<art::mirror::ObjectArray<art::mirror::Class>>(nullptr)); in AllocateNewClassObject()
2085 art::mirror::Class::SetStatus(new_class, art::ClassStatus::kLoaded, nullptr); in AllocateNewClassObject()
2096 art::ObjectLock<art::mirror::Class> objlock(driver_->self_, linked_class); in AllocateNewClassObject()
2115 art::mirror::Class::SetStatus(linked_class, old_class->GetStatus(), driver_->self_); in AllocateNewClassObject()
2120 if (!art::mirror::Class::EnsureInstanceFieldIds(linked_class) || in AllocateNewClassObject()
2121 !art::mirror::Class::EnsureStaticFieldIds(linked_class) || in AllocateNewClassObject()
2122 !art::mirror::Class::EnsureMethodIds(linked_class)) { in AllocateNewClassObject()
2131 linked_class->VisitMethods([&](art::ArtMethod* m) REQUIRES_SHARED(art::Locks::mutator_lock_) { in AllocateNewClassObject()
2138 }, art::kRuntimePointerSize); in AllocateNewClassObject()
2139 if (art::kIsDebugBuild) { in AllocateNewClassObject()
2140 linked_class->VisitFields([&](art::ArtField* f) REQUIRES_SHARED(art::Locks::mutator_lock_) { in AllocateNewClassObject()
2254 ScopedDisableConcurrentAndMovingGc(art::gc::Heap* heap, art::Thread* self) in ScopedDisableConcurrentAndMovingGc()
2267 art::gc::Heap* heap_;
2268 art::Thread* self_;
2271 class ClassDefinitionPauser : public art::ClassLoadCallback {
2273 explicit ClassDefinitionPauser(art::Thread* self) REQUIRES_SHARED(art::Locks::mutator_lock_) in REQUIRES_SHARED()
2277 release_mu_("SuspendClassDefinition lock", art::kGenericBottomLock), in REQUIRES_SHARED()
2282 art::Locks::mutator_lock_->AssertSharedHeld(self_); in REQUIRES_SHARED()
2284 ~ClassDefinitionPauser() REQUIRES_SHARED(art::Locks::mutator_lock_) { in REQUIRES_SHARED()
2285 art::Locks::mutator_lock_->AssertSharedHeld(self_); in REQUIRES_SHARED()
2288 void Release() REQUIRES(art::Locks::mutator_lock_) { in Release()
2290 art::Locks::mutator_lock_->AssertExclusiveHeld(self_); in Release()
2294 art::MutexLock mu(self_, release_mu_); in Release()
2303 release_barrier_.Increment</*locks=*/art::Barrier::kAllowHoldingLocks>(self_, count); in Release()
2308 void BeginDefineClass() override REQUIRES_SHARED(art::Locks::mutator_lock_) { in BeginDefineClass()
2309 art::Thread* this_thread = art::Thread::Current(); in BeginDefineClass()
2322 art::Locks::mutator_lock_->AssertSharedHeld(this_thread); in BeginDefineClass()
2324 art::ScopedThreadSuspension sts(this_thread, art::ThreadState::kSuspended); in BeginDefineClass()
2326 art::MutexLock mu(this_thread, release_mu_); in BeginDefineClass()
2336 void EndDefineClass() override REQUIRES_SHARED(art::Locks::mutator_lock_) { in EndDefineClass()
2337 art::Thread* this_thread = art::Thread::Current(); in EndDefineClass()
2348 void ClassLoad(art::Handle<art::mirror::Class> klass ATTRIBUTE_UNUSED) override {} in ClassLoad()
2349 void ClassPrepare(art::Handle<art::mirror::Class> klass1 ATTRIBUTE_UNUSED, in ClassPrepare()
2350 art::Handle<art::mirror::Class> klass2 ATTRIBUTE_UNUSED) override {} in ClassPrepare()
2355 void WaitFor(uint32_t t) REQUIRES(!art::Locks::mutator_lock_) { in WaitFor()
2360 art::Thread* self_;
2362 art::Barrier barrier_;
2363 art::Mutex release_mu_;
2364 art::Barrier release_barrier_;
2365 art::ConditionVariable release_cond_;
2372 ScopedSuspendClassLoading(art::Thread* self, art::Runtime* runtime, RedefinitionDataHolder& h) in ScopedSuspendClassLoading()
2373 REQUIRES_SHARED(art::Locks::mutator_lock_) in ScopedSuspendClassLoading()
2375 if (std::any_of(h.begin(), h.end(), [](auto r) REQUIRES_SHARED(art::Locks::mutator_lock_) { in ScopedSuspendClassLoading()
2381 art::ScopedThreadSuspension sts(self_, art::ThreadState::kNative); in ScopedSuspendClassLoading()
2384 art::ScopedSuspendAll ssa(__FUNCTION__); in ScopedSuspendClassLoading()
2387 art::MutexLock mu(self_, *art::Locks::thread_list_lock_); in ScopedSuspendClassLoading()
2388 runtime_->GetThreadList()->ForEach([&](art::Thread* t) { in ScopedSuspendClassLoading()
2402 art::ScopedThreadSuspension sts(self_, art::ThreadState::kNative); in ~ScopedSuspendClassLoading()
2403 art::ScopedSuspendAll ssa(__FUNCTION__); in ~ScopedSuspendClassLoading()
2410 art::Thread* self_;
2411 art::Runtime* runtime_;
2417 ScopedSuspendAllocations(art::Runtime* runtime, RedefinitionDataHolder& h) in ScopedSuspendAllocations()
2418 REQUIRES_SHARED(art::Locks::mutator_lock_) in ScopedSuspendAllocations()
2422 [](auto r) REQUIRES_SHARED(art::Locks::mutator_lock_) { in ScopedSuspendAllocations()
2427 AllocationManager::Get()->PauseAllocations(art::Thread::Current()); in ScopedSuspendAllocations()
2433 ~ScopedSuspendAllocations() REQUIRES_SHARED(art::Locks::mutator_lock_) { in REQUIRES_SHARED()
2435 AllocationManager::Get()->ResumeAllocations(art::Thread::Current()); in REQUIRES_SHARED()
2446 art::StackHandleScope<1> hs(self_); in Run()
2451 [&](auto& l, auto& r) REQUIRES_SHARED(art::Locks::mutator_lock_) { in Run()
2490 art::ClassLinker* cl = runtime_->GetClassLinker(); in Run()
2508 art::ScopedThreadSuspension sts(self_, art::ThreadState::kNative); in Run()
2509 art::ScopedSuspendAll ssa("Final installation of redefined Classes!", /*long_suspend=*/true); in Run()
2511 art::ScopedAssertNoThreadSuspension nts("Updating runtime objects for redefinition"); in Run()
2546 art::verifier::FailureKind failure = in ReverifyClass()
2547 art::verifier::ClassVerifier::ReverifyClass(driver_->self_, in ReverifyClass()
2550 art::verifier::HardFailLogMode::kLogWarning, in ReverifyClass()
2552 art::Runtime::Current()->GetTargetSdkVersion(), in ReverifyClass()
2554 CHECK_NE(failure, art::verifier::FailureKind::kHardFailure); in ReverifyClass()
2557 void Redefiner::ClassRedefinition::UpdateMethods(art::ObjPtr<art::mirror::Class> mclass, in UpdateMethods()
2558 const art::dex::ClassDef& class_def) { in UpdateMethods()
2559 art::ClassLinker* linker = driver_->runtime_->GetClassLinker(); in UpdateMethods()
2560 art::PointerSize image_pointer_size = linker->GetImagePointerSize(); in UpdateMethods()
2561 const art::dex::TypeId& declaring_class_id = dex_file_->GetTypeId(class_def.class_idx_); in UpdateMethods()
2562 const art::DexFile& old_dex_file = mclass->GetDexFile(); in UpdateMethods()
2564 for (art::ArtMethod& method : mclass->GetDeclaredMethods(image_pointer_size)) { in UpdateMethods()
2565 const art::dex::StringId* new_name_id = dex_file_->FindStringId(method.GetName()); in UpdateMethods()
2566 art::dex::TypeIndex method_return_idx = in UpdateMethods()
2569 std::vector<art::dex::TypeIndex> new_type_list; in UpdateMethods()
2578 const art::dex::ProtoId* proto_id = dex_file_->FindProtoId(method_return_idx, new_type_list); in UpdateMethods()
2580 const art::dex::MethodId* method_id = dex_file_->FindMethodId(declaring_class_id, in UpdateMethods()
2596 void Redefiner::ClassRedefinition::UpdateFields(art::ObjPtr<art::mirror::Class> mclass) { in UpdateFields()
2599 for (art::ArtField& field : fields_iter) { in UpdateFields()
2601 const art::dex::TypeId* new_declaring_id = in UpdateFields()
2603 const art::dex::StringId* new_name_id = dex_file_->FindStringId(field.GetName()); in UpdateFields()
2604 const art::dex::TypeId* new_type_id = dex_file_->FindTypeId(field.GetTypeDescriptor()); in UpdateFields()
2606 const art::dex::FieldId* new_field_id = in UpdateFields()
2618 std::map<art::ArtMethod*, art::ArtMethod*>* method_map, in CollectNewFieldAndMethodMappings()
2619 std::map<art::ArtField*, art::ArtField*>* field_map) { in CollectNewFieldAndMethodMappings()
2621 art::ZipLeft(data.GetNewClasses()->Iterate(), data.GetOldClasses()->Iterate())) { in CollectNewFieldAndMethodMappings()
2622 for (art::ArtField& f : old_cls->GetSFields()) { in CollectNewFieldAndMethodMappings()
2625 for (art::ArtField& f : old_cls->GetIFields()) { in CollectNewFieldAndMethodMappings()
2628 auto new_methods = new_cls->GetMethods(art::kRuntimePointerSize); in CollectNewFieldAndMethodMappings()
2629 for (art::ArtMethod& m : old_cls->GetMethods(art::kRuntimePointerSize)) { in CollectNewFieldAndMethodMappings()
2635 [&](art::ArtMethod& cand) REQUIRES_SHARED(art::Locks::mutator_lock_) { in CollectNewFieldAndMethodMappings()
2645 static void CopyField(art::ObjPtr<art::mirror::Object> target, in CopyField()
2646 art::ArtField* new_field, in CopyField()
2647 art::ObjPtr<art::mirror::Object> source, in CopyField()
2648 art::ArtField& old_field) REQUIRES(art::Locks::mutator_lock_) { in CopyField()
2649 art::Primitive::Type ftype = old_field.GetTypeAsPrimitiveType(); in CopyField()
2652 if (ftype == art::Primitive::kPrimNot) { in CopyField()
2657 case art::Primitive::kPrim##TYPE: \ in CopyField()
2668 case art::Primitive::kPrimNot: in CopyField()
2669 case art::Primitive::kPrimVoid: in CopyField()
2678 art::ObjPtr<art::mirror::Object> target, in CopyFields()
2679 art::ObjPtr<art::mirror::Class> target_class, in CopyFields()
2680 art::ObjPtr<art::mirror::Object> source, in CopyFields()
2681 art::ObjPtr<art::mirror::Class> source_class) in CopyFields()
2682 REQUIRES(art::Locks::mutator_lock_) { in CopyFields()
2686 for (art::ArtField& f : (is_static ? source_class->GetSFields() : source_class->GetIFields())) { in CopyFields()
2687 art::ArtField* new_field = in CopyFields()
2699 static void ClearField(art::ObjPtr<art::mirror::Object> target, art::ArtField& field) in ClearField()
2700 REQUIRES(art::Locks::mutator_lock_) { in ClearField()
2701 art::Primitive::Type ftype = field.GetTypeAsPrimitiveType(); in ClearField()
2702 if (ftype == art::Primitive::kPrimNot) { in ClearField()
2707 case art::Primitive::kPrim##TYPE: \ in ClearField()
2718 case art::Primitive::kPrimNot: in ClearField()
2719 case art::Primitive::kPrimVoid: in ClearField()
2728 art::ObjPtr<art::mirror::Object> target, in ClearFields()
2729 art::ObjPtr<art::mirror::Class> target_class) in ClearFields()
2730 REQUIRES(art::Locks::mutator_lock_) { in ClearFields()
2732 for (art::ArtField& f : (is_static ? target_class->GetSFields() : target_class->GetIFields())) { in ClearFields()
2741 art::ObjPtr<art::mirror::Object> target, in CopyAndClearFields()
2742 art::ObjPtr<art::mirror::Class> target_class, in CopyAndClearFields()
2743 art::ObjPtr<art::mirror::Object> source, in CopyAndClearFields()
2744 art::ObjPtr<art::mirror::Class> source_class) in CopyAndClearFields()
2745 REQUIRES(art::Locks::mutator_lock_) { in CopyAndClearFields()
2751 source->SetLockWord(art::LockWord::Default(), false); in CopyAndClearFields()
2752 art::WriteBarrier::ForEveryFieldWrite(target); in CopyAndClearFields()
2756 art::WriteBarrier::ForEveryFieldWrite(source); in CopyAndClearFields()
2765 art::Locks::mutator_lock_->AssertExclusiveHeld(driver_->self_); in UpdateClassStructurally()
2766 art::ClassLinker* cl = driver_->runtime_->GetClassLinker(); in UpdateClassStructurally()
2767 art::ScopedAssertNoThreadSuspension sants(__FUNCTION__); in UpdateClassStructurally()
2768 art::ObjPtr<art::mirror::ObjectArray<art::mirror::Class>> new_classes(holder.GetNewClasses()); in UpdateClassStructurally()
2769 art::ObjPtr<art::mirror::ObjectArray<art::mirror::Class>> old_classes(holder.GetOldClasses()); in UpdateClassStructurally()
2771 std::map<art::ArtMethod*, art::ArtMethod*> method_map; in UpdateClassStructurally()
2772 std::map<art::ArtField*, art::ArtField*> field_map; in UpdateClassStructurally()
2774 art::ObjPtr<art::mirror::ObjectArray<art::mirror::Object>> new_instances( in UpdateClassStructurally()
2776 art::ObjPtr<art::mirror::ObjectArray<art::mirror::Object>> old_instances( in UpdateClassStructurally()
2780 std::vector<art::ObjPtr<art::mirror::Class>> old_classes_vec(old_classes->Iterate().begin(), in UpdateClassStructurally()
2783 for (auto [new_class, old_class] : art::ZipLeft(new_classes->Iterate(), old_classes->Iterate())) { in UpdateClassStructurally()
2797 art::ZipLeft(new_instances->Iterate(), old_instances->Iterate())) { in UpdateClassStructurally()
2805 for (auto [old_class, new_class] : art::ZipLeft(old_classes->Iterate(), new_classes->Iterate())) { in UpdateClassStructurally()
2811 for (art::ArtMethod& m : old_class->GetMethods(art::kRuntimePointerSize)) { in UpdateClassStructurally()
2813 art::ArtMethod* new_method = in UpdateClassStructurally()
2814 new_class->FindClassMethod(m.GetNameView(), m.GetSignature(), art::kRuntimePointerSize); in UpdateClassStructurally()
2815 DCHECK(new_class->GetMethodsSlice(art::kRuntimePointerSize).Contains(new_method)) in UpdateClassStructurally()
2829 const auto& info) REQUIRES(art::Locks::mutator_lock_) { in UpdateClassStructurally()
2830 constexpr bool is_method = std::is_same_v<art::ArtMethod*, decltype(field_or_method)>; in UpdateClassStructurally()
2831 static_assert(is_method || std::is_same_v<art::ArtField*, decltype(field_or_method)>, in UpdateClassStructurally()
2834 if (LIKELY(info.GetType() != art::ReflectionSourceType::kSourceDexCacheResolvedField && in UpdateClassStructurally()
2835 info.GetType() != art::ReflectionSourceType::kSourceDexCacheResolvedMethod)) { in UpdateClassStructurally()
2853 art::ObjPtr<art::mirror::Class> f_or_m_class = field_or_method->GetDeclaringClass(); in UpdateClassStructurally()
2863 [&](art::ObjPtr<art::mirror::Class> cand) REQUIRES(art::Locks::mutator_lock_) { in UpdateClassStructurally()
2864 auto direct_methods = cand->GetDirectMethods(art::kRuntimePointerSize); in UpdateClassStructurally()
2867 [&](art::ArtMethod& m) REQUIRES(art::Locks::mutator_lock_) { in UpdateClassStructurally()
2872 auto pred = [&](art::ArtField& f) REQUIRES(art::Locks::mutator_lock_) { in UpdateClassStructurally()
2881 [&](art::ObjPtr<art::mirror::Class> cand) REQUIRES(art::Locks::mutator_lock_) { in UpdateClassStructurally()
2889 [&](art::ObjPtr<art::mirror::Class> cand) REQUIRES(art::Locks::mutator_lock_) { in UpdateClassStructurally()
2899 [&](art::ArtField* f, const auto& info) REQUIRES(art::Locks::mutator_lock_) { in UpdateClassStructurally()
2905 return static_cast<art::ArtField*>(nullptr); in UpdateClassStructurally()
2913 [&](art::ArtMethod* m, const auto& info) REQUIRES(art::Locks::mutator_lock_) { in UpdateClassStructurally()
2919 return static_cast<art::ArtMethod*>(nullptr); in UpdateClassStructurally()
2931 std::unordered_map<art::ObjPtr<art::mirror::Object>, in UpdateClassStructurally()
2932 art::ObjPtr<art::mirror::Object>, in UpdateClassStructurally()
2933 art::HashObjPtr> map; in UpdateClassStructurally()
2934 for (auto [new_class, old_class] : art::ZipLeft(new_classes->Iterate(), old_classes->Iterate())) { in UpdateClassStructurally()
2938 art::ZipLeft(new_instances->Iterate(), old_instances->Iterate())) { in UpdateClassStructurally()
2954 art::ZipLeft(new_classes->Iterate(), art::MakeIterationRange(old_classes_vec))) { in UpdateClassStructurally()
2958 art::jit::Jit* jit = driver_->runtime_->GetJit(); in UpdateClassStructurally()
2970 art::MutexLock mu(driver_->self_, *art::Locks::thread_list_lock_); in UpdateClassStructurally()
2972 [](art::Thread* t) { t->GetInterpreterCache()->Clear(t); }); in UpdateClassStructurally()
2975 if (art::kIsDebugBuild) { in UpdateClassStructurally()
2981 [](art::ObjPtr<art::mirror::Class> orig) REQUIRES_SHARED(art::Locks::mutator_lock_) { in UpdateClassStructurally()
2983 [&](art::ArtMethod* method) REQUIRES_SHARED(art::Locks::mutator_lock_) { in UpdateClassStructurally()
2991 art::kRuntimePointerSize); in UpdateClassStructurally()
2992 orig->VisitFields([&](art::ArtField* field) REQUIRES_SHARED(art::Locks::mutator_lock_) { in UpdateClassStructurally()
3002 art::ObjPtr<art::mirror::Class> mclass(holder.GetMirrorClass()); in UpdateClassInPlace()
3005 art::ObjPtr<art::mirror::DexCache> new_dex_cache(holder.GetNewDexCache()); in UpdateClassInPlace()
3006 art::ObjPtr<art::mirror::Object> original_dex_file(holder.GetOriginalDexFile()); in UpdateClassInPlace()
3008 const art::dex::ClassDef& class_def = dex_file_->GetClassDef(0); in UpdateClassInPlace()
3012 art::ObjPtr<art::mirror::ClassExt> ext(mclass->GetExtData()); in UpdateClassInPlace()
3035 art::jit::Jit* jit = driver_->runtime_->GetJit(); in UpdateClassInPlace()
3037 art::PointerSize image_pointer_size = in UpdateClassInPlace()
3042 for (art::ArtMethod& method : mclass->GetDeclaredMethods(image_pointer_size)) { in UpdateClassInPlace()
3063 art::ObjPtr<art::mirror::Class> klass(cur_data.GetMirrorClass()); in UpdateClassCommon()
3070 klass->VisitMethods([](art::ArtMethod* m) REQUIRES_SHARED(art::Locks::mutator_lock_) { in UpdateClassCommon()
3076 }, art::kRuntimePointerSize); in UpdateClassCommon()
3087 art::ObjPtr<art::mirror::Class> klass = GetMirrorClass(); in RestoreObsoleteMethodMapsIfUnneeded()
3088 art::ObjPtr<art::mirror::ClassExt> ext = klass->GetExtData(); in RestoreObsoleteMethodMapsIfUnneeded()
3089 art::ObjPtr<art::mirror::PointerArray> methods = ext->GetObsoleteMethods(); in RestoreObsoleteMethodMapsIfUnneeded()
3090 art::ObjPtr<art::mirror::PointerArray> old_methods = cur_data->GetOldObsoleteMethods(); in RestoreObsoleteMethodMapsIfUnneeded()
3100 art::ArtMethod* expected = nullptr; in RestoreObsoleteMethodMapsIfUnneeded()
3102 expected = old_methods->GetElementPtrSize<art::ArtMethod*>(i, art::kRuntimePointerSize); in RestoreObsoleteMethodMapsIfUnneeded()
3104 if (methods->GetElementPtrSize<art::ArtMethod*>(i, art::kRuntimePointerSize) != expected) { in RestoreObsoleteMethodMapsIfUnneeded()
3119 art::StackHandleScope<2> hs(driver_->self_); in EnsureClassAllocationsFinished()
3120 art::Handle<art::mirror::Class> klass(hs.NewHandle( in EnsureClassAllocationsFinished()
3127 art::Handle<art::mirror::ClassExt> ext = in EnsureClassAllocationsFinished()
3128 hs.NewHandle(art::mirror::Class::EnsureExtDataPresent(klass, driver_->self_)); in EnsureClassAllocationsFinished()
3145 if (!art::mirror::ClassExt::ExtendObsoleteArrays( in EnsureClassAllocationsFinished()
3146 ext, driver_->self_, klass->GetDeclaredMethodsSlice(art::kRuntimePointerSize).size())) { in EnsureClassAllocationsFinished()