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()
288 ObsoleteMap* obsolete_maps) REQUIRES(art::Locks::mutator_lock_) { in UpdateObsoleteFrames()
296 bool VisitFrame() override REQUIRES(art::Locks::mutator_lock_) { in VisitFrame()
297 art::ScopedAssertNoThreadSuspension snts("Fixing up the stack for obsolete methods."); in VisitFrame()
298 art::ArtMethod* old_method = GetMethod(); in VisitFrame()
305 art::ArtMethod* new_obsolete_method = obsolete_maps_->FindObsoleteVersion(old_method); in VisitFrame()
308 art::Runtime* runtime = art::Runtime::Current(); in VisitFrame()
309 art::ClassLinker* cl = runtime->GetClassLinker(); in VisitFrame()
311 const size_t method_size = art::ArtMethod::Size(ptr_size); in VisitFrame()
312 auto* method_storage = allocator_->Alloc(art::Thread::Current(), in VisitFrame()
314 art::LinearAllocKind::kArtMethod); in VisitFrame()
317 new_obsolete_method = new (method_storage) art::ArtMethod(); in VisitFrame()
333 art::LinearAlloc* allocator_;
335 const std::unordered_set<art::ArtMethod*>& obsoleted_methods_;
346 static art::Mutex redefinition_lock("JVMTI Redefinition lock", art::LockLevel::kGenericBottomLock);
349 bool canHandleRedefinition(art::Thread* self) { in canHandleRedefinition()
350 art::MutexLock mu(self, redefinition_lock); in canHandleRedefinition()
358 void finishRedefinition(art::Thread* self) { in finishRedefinition()
359 art::MutexLock mu(self, redefinition_lock); in finishRedefinition()
371 art::Thread* self = art::Thread::Current(); in IsModifiableClassGeneric()
372 art::ScopedObjectAccess soa(self); in IsModifiableClassGeneric()
373 art::StackHandleScope<1> hs(self); in IsModifiableClassGeneric()
374 art::ObjPtr<art::mirror::Object> obj(self->DecodeJObject(klass)); in IsModifiableClassGeneric()
378 art::Handle<art::mirror::Class> h_klass(hs.NewHandle(obj->AsClass())); in IsModifiableClassGeneric()
399 art::Thread* self = art::Thread::Current(); in CanRedefineClass()
400 art::ScopedObjectAccess soa(self); in CanRedefineClass()
401 art::StackHandleScope<1> hs(self); in CanRedefineClass()
402 art::ObjPtr<art::mirror::Object> obj(self->DecodeJObject(klass)); in CanRedefineClass()
406 art::Handle<art::mirror::Class> h_klass(hs.NewHandle(obj->AsClass())); in CanRedefineClass()
411 jvmtiError Redefiner::CanRedefineClass(art::Handle<art::mirror::Class> klass, in CanRedefineClass()
413 art::Thread* self = art::Thread::Current(); in CanRedefineClass()
445 for (jclass c : art::NonDebuggableClasses::GetNonDebuggableClasses()) { in CanRedefineClass()
464 if (!art::Runtime::Current()->GetClassLinker()->EnsureInitialized( in CanRedefineClass()
481 if (klass->IsAssignableFrom(art::WellKnownClasses::java_lang_Thread.Get())) { in CanRedefineClass()
488 [](art::ObjPtr<art::mirror::Class> k) REQUIRES_SHARED(art::Locks::mutator_lock_) { in CanRedefineClass()
492 art::ObjPtr<art::mirror::ClassExt> ext(k->GetExtData()); in CanRedefineClass()
508 art::ClassFuncVisitor cfv( in CanRedefineClass()
509 [&](art::ObjPtr<art::mirror::Class> k) REQUIRES_SHARED(art::Locks::mutator_lock_) { in CanRedefineClass()
523 art::Runtime::Current()->GetClassLinker()->VisitClasses(&cfv); in CanRedefineClass()
530 art::Handle<art::mirror::Class> klass, /*out*/ std::string* error_msg);
532 art::Handle<art::mirror::Class> klass, /*out*/ std::string* error_msg);
535 art::MemMap Redefiner::MoveDataToMemMap(const std::string& original_location, in MoveDataToMemMap()
536 art::ArrayRef<const unsigned char> data, in MoveDataToMemMap()
541 size_t pos = modified_location.find(art::DexFileLoader::kMultiDexSeparator); in MoveDataToMemMap()
545 art::MemMap map = art::MemMap::MapAnonymous( in MoveDataToMemMap()
563 const art::DexFile* redefined_dex_file, in ClassRedefinition()
565 art::ArrayRef<const unsigned char> orig_dex_file) : in ClassRedefinition()
574 if (art::kIsDebugBuild) { in ~ClassRedefinition()
576 art::Thread* self = art::Thread::Current(); in ~ClassRedefinition()
577 art::ClassLinker* cl = art::Runtime::Current()->GetClassLinker(); in ~ClassRedefinition()
587 art::Runtime* runtime = art::Runtime::Current(); in RedefineClassesGeneric()
588 art::Thread* self = art::Thread::Current(); in RedefineClassesGeneric()
653 art::Runtime* runtime, in RedefineClassesDirect()
654 art::Thread* self, in RedefineClassesDirect()
676 art::jit::ScopedJitSuspend suspend_jit; in RedefineClassesDirect()
678 art::ScopedObjectAccess soa(self); in RedefineClassesDirect()
709 art::MemMap map = MoveDataToMemMap(original_dex_location, def.GetDexData(), error_msg_); in AddRedefinition()
717 if (map.Size() < sizeof(art::DexFile::Header)) { in AddRedefinition()
722 uint32_t checksum = reinterpret_cast<const art::DexFile::Header*>(map.Begin())->checksum_; in AddRedefinition()
723 art::ArtDexFileLoader dex_file_loader(std::move(map), name); in AddRedefinition()
724 std::unique_ptr<const art::DexFile> dex_file(dex_file_loader.Open(checksum, in AddRedefinition()
742 art::ObjPtr<art::mirror::Class> Redefiner::ClassRedefinition::GetMirrorClass() { in GetMirrorClass()
746 art::ObjPtr<art::mirror::ClassLoader> Redefiner::ClassRedefinition::GetClassLoader() { in GetClassLoader()
750 art::mirror::DexCache* Redefiner::ClassRedefinition::CreateNewDexCache( in CreateNewDexCache()
751 art::Handle<art::mirror::ClassLoader> loader) { in CreateNewDexCache()
752 art::StackHandleScope<2> hs(driver_->self_); in CreateNewDexCache()
753 art::ClassLinker* cl = driver_->runtime_->GetClassLinker(); in CreateNewDexCache()
754 art::Handle<art::mirror::DexCache> cache(hs.NewHandle( in CreateNewDexCache()
755 art::ObjPtr<art::mirror::DexCache>::DownCast( in CreateNewDexCache()
756 art::GetClassRoot<art::mirror::DexCache>(cl)->AllocObject(driver_->self_)))); in CreateNewDexCache()
761 art::Handle<art::mirror::String> location(hs.NewHandle( in CreateNewDexCache()
767 art::WriterMutexLock mu(driver_->self_, *art::Locks::dex_lock_); in CreateNewDexCache()
782 art::mirror::Object* Redefiner::ClassRedefinition::AllocateOrGetOriginalDexFile() { in AllocateOrGetOriginalDexFile()
785 return art::mirror::ByteArray::AllocateAndFill( in AllocateOrGetOriginalDexFile()
792 art::ObjPtr<art::mirror::ClassExt> ext(GetMirrorClass()->GetExtData()); in AllocateOrGetOriginalDexFile()
794 art::ObjPtr<art::mirror::Object> old_original_dex_file(ext->GetOriginalDexFile()); in AllocateOrGetOriginalDexFile()
802 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);
909 using FieldNameAndSignature = NameAndSignature<art::ArtField>;
911 FieldNameAndSignature::NameAndSignature(const art::DexFile* dex_file, uint32_t id) in NameAndSignature()
915 using MethodNameAndSignature = NameAndSignature<art::ArtMethod>;
917 MethodNameAndSignature::NameAndSignature(const art::DexFile* dex_file, uint32_t id) in NameAndSignature()
933 art::StackHandleScope<1> hs(driver_->self_); in CheckMethods()
934 art::Handle<art::mirror::Class> h_klass(hs.NewHandle(GetMirrorClass())); in CheckMethods()
938 art::ClassAccessor accessor(*dex_file_, dex_file_->GetClassDef(0)); in CheckMethods()
940 uint32_t num_old_method = h_klass->GetDeclaredMethodsSlice(art::kRuntimePointerSize).size(); in CheckMethods()
956 const art::DexFile& old_dex_file = h_klass->GetDexFile(); in CheckMethods()
957 art::ClassAccessor old_accessor(old_dex_file, *h_klass->GetClassDef()); in CheckMethods()
962 for (const art::ClassAccessor::Method& new_method : accessor.GetMethods()) { in CheckMethods()
1015 art::StackHandleScope<1> hs(driver_->self_); in CheckFields()
1016 art::Handle<art::mirror::Class> h_klass(hs.NewHandle(GetMirrorClass())); in CheckFields()
1018 art::ClassAccessor new_accessor(*dex_file_, dex_file_->GetClassDef(0)); in CheckFields()
1020 const art::DexFile& old_dex_file = h_klass->GetDexFile(); in CheckFields()
1021 art::ClassAccessor old_accessor(old_dex_file, *h_klass->GetClassDef()); in CheckFields()
1026 for (const art::ClassAccessor::Field& new_field : new_accessor.GetFields()) { in CheckFields()
1074 art::StackHandleScope<1> hs(driver_->self_); in CheckClass()
1084 const art::dex::ClassDef& def = dex_file_->GetClassDef(0); in CheckClass()
1086 art::Handle<art::mirror::Class> current_class(hs.NewHandle(GetMirrorClass())); in CheckClass()
1089 if (def.GetJavaAccessFlags() != (current_class->GetAccessFlags() & art::kAccValidClassFlags)) { in CheckClass()
1097 DCHECK_NE(def.class_idx_, art::dex::TypeIndex::Invalid()) << "Invalid type index"; in CheckClass()
1109 if (def.superclass_idx_ != art::dex::TypeIndex::Invalid()) { in CheckClass()
1121 const art::dex::TypeList* interfaces = dex_file_->GetInterfacesList(def); in CheckClass()
1130 const art::dex::TypeList* current_interfaces = current_class->GetInterfaceTypeList(); in CheckClass()
1137 const art::DexFile& orig_dex_file = current_class->GetDexFile(); in CheckClass()
1153 art::StackHandleScope<1> hs(driver_->self_); in CheckRedefinable()
1155 art::Handle<art::mirror::Class> h_klass(hs.NewHandle(GetMirrorClass())); in CheckRedefinable()
1203 RedefinitionDataHolder(art::StackHandleScope<1>* hs, in RedefinitionDataHolder()
1204 art::Runtime* runtime, in RedefinitionDataHolder()
1205 art::Thread* self, in RedefinitionDataHolder()
1207 REQUIRES_SHARED(art::Locks::mutator_lock_) : in RedefinitionDataHolder()
1208 arr_(hs->NewHandle(art::mirror::ObjectArray<art::mirror::Object>::Alloc( in RedefinitionDataHolder()
1210 art::GetClassRoot<art::mirror::ObjectArray<art::mirror::Object>>(runtime->GetClassLinker()), in RedefinitionDataHolder()
1217 ~RedefinitionDataHolder() REQUIRES_SHARED(art::Locks::mutator_lock_);
1219 bool IsNull() const REQUIRES_SHARED(art::Locks::mutator_lock_) { in IsNull()
1223 art::ObjPtr<art::mirror::ClassLoader> GetSourceClassLoader(jint klass_index) const in GetSourceClassLoader()
1224 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetSourceClassLoader()
1225 return art::ObjPtr<art::mirror::ClassLoader>::DownCast( in GetSourceClassLoader()
1228 art::ObjPtr<art::mirror::Object> GetJavaDexFile(jint klass_index) const in GetJavaDexFile()
1229 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetJavaDexFile()
1232 art::ObjPtr<art::mirror::LongArray> GetNewDexFileCookie(jint klass_index) const in GetNewDexFileCookie()
1233 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetNewDexFileCookie()
1234 return art::ObjPtr<art::mirror::LongArray>::DownCast( in GetNewDexFileCookie()
1237 art::ObjPtr<art::mirror::DexCache> GetNewDexCache(jint klass_index) const in GetNewDexCache()
1238 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetNewDexCache()
1239 return art::ObjPtr<art::mirror::DexCache>::DownCast(GetSlot(klass_index, kSlotNewDexCache)); in GetNewDexCache()
1241 art::ObjPtr<art::mirror::Class> GetMirrorClass(jint klass_index) const in GetMirrorClass()
1242 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetMirrorClass()
1243 return art::ObjPtr<art::mirror::Class>::DownCast(GetSlot(klass_index, kSlotMirrorClass)); in GetMirrorClass()
1246 art::ObjPtr<art::mirror::Object> GetOriginalDexFile(jint klass_index) const in GetOriginalDexFile()
1247 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetOriginalDexFile()
1248 return art::ObjPtr<art::mirror::Object>::DownCast(GetSlot(klass_index, kSlotOrigDexFile)); in GetOriginalDexFile()
1251 art::ObjPtr<art::mirror::PointerArray> GetOldObsoleteMethods(jint klass_index) const in GetOldObsoleteMethods()
1252 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetOldObsoleteMethods()
1253 return art::ObjPtr<art::mirror::PointerArray>::DownCast( in GetOldObsoleteMethods()
1257 art::ObjPtr<art::mirror::ObjectArray<art::mirror::DexCache>> GetOldDexCaches( in GetOldDexCaches()
1258 jint klass_index) const REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetOldDexCaches()
1259 return art::ObjPtr<art::mirror::ObjectArray<art::mirror::DexCache>>::DownCast( in GetOldDexCaches()
1263 art::ObjPtr<art::mirror::Class> GetNewClassObject(jint klass_index) const in GetNewClassObject()
1264 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetNewClassObject()
1265 return art::ObjPtr<art::mirror::Class>::DownCast(GetSlot(klass_index, kSlotNewClassObject)); in GetNewClassObject()
1268 art::ObjPtr<art::mirror::ObjectArray<art::mirror::Object>> GetOldInstanceObjects( in GetOldInstanceObjects()
1269 jint klass_index) const REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetOldInstanceObjects()
1270 return art::ObjPtr<art::mirror::ObjectArray<art::mirror::Object>>::DownCast( in GetOldInstanceObjects()
1274 art::ObjPtr<art::mirror::ObjectArray<art::mirror::Object>> GetNewInstanceObjects( in GetNewInstanceObjects()
1275 jint klass_index) const REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetNewInstanceObjects()
1276 return art::ObjPtr<art::mirror::ObjectArray<art::mirror::Object>>::DownCast( in GetNewInstanceObjects()
1279 art::ObjPtr<art::mirror::ObjectArray<art::mirror::Class>> GetOldClasses(jint klass_index) const in GetOldClasses()
1280 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetOldClasses()
1281 return art::ObjPtr<art::mirror::ObjectArray<art::mirror::Class>>::DownCast( in GetOldClasses()
1284 art::ObjPtr<art::mirror::ObjectArray<art::mirror::Class>> GetNewClasses(jint klass_index) const in GetNewClasses()
1285 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetNewClasses()
1286 return art::ObjPtr<art::mirror::ObjectArray<art::mirror::Class>>::DownCast( in GetNewClasses()
1289 bool IsInitialized(jint klass_index) REQUIRES_SHARED(art::Locks::mutator_lock_) { in IsInitialized()
1292 bool IsActuallyStructural(jint klass_index) REQUIRES_SHARED(art::Locks::mutator_lock_) { in IsActuallyStructural()
1296 bool IsInitialStructural(jint klass_index) REQUIRES_SHARED(art::Locks::mutator_lock_) { in IsInitialStructural()
1300 void SetSourceClassLoader(jint klass_index, art::ObjPtr<art::mirror::ClassLoader> loader) in SetSourceClassLoader()
1301 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetSourceClassLoader()
1304 void SetJavaDexFile(jint klass_index, art::ObjPtr<art::mirror::Object> dexfile) in SetJavaDexFile()
1305 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetJavaDexFile()
1308 void SetNewDexFileCookie(jint klass_index, art::ObjPtr<art::mirror::LongArray> cookie) in SetNewDexFileCookie()
1309 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetNewDexFileCookie()
1312 void SetNewDexCache(jint klass_index, art::ObjPtr<art::mirror::DexCache> cache) in SetNewDexCache()
1313 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetNewDexCache()
1316 void SetMirrorClass(jint klass_index, art::ObjPtr<art::mirror::Class> klass) in SetMirrorClass()
1317 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetMirrorClass()
1320 void SetOriginalDexFile(jint klass_index, art::ObjPtr<art::mirror::Object> bytes) in SetOriginalDexFile()
1321 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetOriginalDexFile()
1324 void SetOldObsoleteMethods(jint klass_index, art::ObjPtr<art::mirror::PointerArray> methods) in SetOldObsoleteMethods()
1325 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetOldObsoleteMethods()
1329 art::ObjPtr<art::mirror::ObjectArray<art::mirror::DexCache>> caches) in SetOldDexCaches()
1330 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetOldDexCaches()
1334 void SetNewClassObject(jint klass_index, art::ObjPtr<art::mirror::Class> klass) in SetNewClassObject()
1335 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetNewClassObject()
1340 art::ObjPtr<art::mirror::ObjectArray<art::mirror::Object>> objs) in SetOldInstanceObjects()
1341 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetOldInstanceObjects()
1345 art::ObjPtr<art::mirror::ObjectArray<art::mirror::Object>> objs) in SetNewInstanceObjects()
1346 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetNewInstanceObjects()
1350 art::ObjPtr<art::mirror::ObjectArray<art::mirror::Class>> klasses) in SetOldClasses()
1351 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetOldClasses()
1355 art::ObjPtr<art::mirror::ObjectArray<art::mirror::Class>> klasses) in SetNewClasses()
1356 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetNewClasses()
1359 void SetInitialized(jint klass_index) REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetInitialized()
1362 void SetActuallyStructural(jint klass_index) REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetActuallyStructural()
1365 void SetInitialStructural(jint klass_index) REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetInitialStructural()
1368 int32_t Length() const REQUIRES_SHARED(art::Locks::mutator_lock_) { in Length()
1373 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetRedefinitions()
1378 REQUIRES_SHARED(art::Locks::mutator_lock_) { in operator ==()
1383 REQUIRES_SHARED(art::Locks::mutator_lock_) { in operator !=()
1387 RedefinitionDataIter begin() REQUIRES_SHARED(art::Locks::mutator_lock_);
1388 RedefinitionDataIter end() REQUIRES_SHARED(art::Locks::mutator_lock_);
1391 mutable art::Handle<art::mirror::ObjectArray<art::mirror::Object>> arr_;
1402 art::ObjPtr<art::mirror::Object> GetSlot(jint klass_index, DataSlot slot) const in GetSlot()
1403 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetSlot()
1410 art::ObjPtr<art::mirror::Object> obj) REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetSlot()
1411 DCHECK(!art::Runtime::Current()->IsActiveTransaction()); in SetSlot()
1430 REQUIRES_SHARED(art::Locks::mutator_lock_) { in operator ==()
1435 REQUIRES_SHARED(art::Locks::mutator_lock_) { in operator !=()
1466 Redefiner::ClassRedefinition& GetRedefinition() REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetRedefinition()
1474 art::ObjPtr<art::mirror::ClassLoader> GetSourceClassLoader() const in GetSourceClassLoader()
1475 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetSourceClassLoader()
1478 art::ObjPtr<art::mirror::Object> GetJavaDexFile() const in GetJavaDexFile()
1479 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetJavaDexFile()
1482 art::ObjPtr<art::mirror::LongArray> GetNewDexFileCookie() const in GetNewDexFileCookie()
1483 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetNewDexFileCookie()
1486 art::ObjPtr<art::mirror::DexCache> GetNewDexCache() const in GetNewDexCache()
1487 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetNewDexCache()
1490 art::ObjPtr<art::mirror::Class> GetMirrorClass() const in GetMirrorClass()
1491 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetMirrorClass()
1494 art::ObjPtr<art::mirror::Object> GetOriginalDexFile() const in GetOriginalDexFile()
1495 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetOriginalDexFile()
1498 art::ObjPtr<art::mirror::PointerArray> GetOldObsoleteMethods() const in GetOldObsoleteMethods()
1499 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetOldObsoleteMethods()
1502 art::ObjPtr<art::mirror::ObjectArray<art::mirror::DexCache>> GetOldDexCaches() const in GetOldDexCaches()
1503 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetOldDexCaches()
1507 art::ObjPtr<art::mirror::Class> GetNewClassObject() const in GetNewClassObject()
1508 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetNewClassObject()
1512 art::ObjPtr<art::mirror::ObjectArray<art::mirror::Object>> GetOldInstanceObjects() const in GetOldInstanceObjects()
1513 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetOldInstanceObjects()
1516 art::ObjPtr<art::mirror::ObjectArray<art::mirror::Object>> GetNewInstanceObjects() const in GetNewInstanceObjects()
1517 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetNewInstanceObjects()
1520 art::ObjPtr<art::mirror::ObjectArray<art::mirror::Class>> GetOldClasses() const in GetOldClasses()
1521 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetOldClasses()
1524 art::ObjPtr<art::mirror::ObjectArray<art::mirror::Class>> GetNewClasses() const in GetNewClasses()
1525 REQUIRES_SHARED(art::Locks::mutator_lock_) { in GetNewClasses()
1528 bool IsInitialized() const REQUIRES_SHARED(art::Locks::mutator_lock_) { in IsInitialized()
1531 bool IsActuallyStructural() const REQUIRES_SHARED(art::Locks::mutator_lock_) { in IsActuallyStructural()
1534 bool IsInitialStructural() const REQUIRES_SHARED(art::Locks::mutator_lock_) { in IsInitialStructural()
1541 void SetSourceClassLoader(art::mirror::ClassLoader* loader) in SetSourceClassLoader()
1542 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetSourceClassLoader()
1545 void SetJavaDexFile(art::ObjPtr<art::mirror::Object> dexfile) in SetJavaDexFile()
1546 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetJavaDexFile()
1549 void SetNewDexFileCookie(art::ObjPtr<art::mirror::LongArray> cookie) in SetNewDexFileCookie()
1550 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetNewDexFileCookie()
1553 void SetNewDexCache(art::ObjPtr<art::mirror::DexCache> cache) in SetNewDexCache()
1554 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetNewDexCache()
1557 void SetMirrorClass(art::ObjPtr<art::mirror::Class> klass) in SetMirrorClass()
1558 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetMirrorClass()
1561 void SetOriginalDexFile(art::ObjPtr<art::mirror::Object> bytes) in SetOriginalDexFile()
1562 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetOriginalDexFile()
1565 void SetOldObsoleteMethods(art::ObjPtr<art::mirror::PointerArray> methods) in SetOldObsoleteMethods()
1566 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetOldObsoleteMethods()
1569 void SetOldDexCaches(art::ObjPtr<art::mirror::ObjectArray<art::mirror::DexCache>> caches) in SetOldDexCaches()
1570 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetOldDexCaches()
1573 void SetNewClassObject(art::ObjPtr<art::mirror::Class> klass) in SetNewClassObject()
1574 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetNewClassObject()
1577 void SetOldInstanceObjects(art::ObjPtr<art::mirror::ObjectArray<art::mirror::Object>> objs) in SetOldInstanceObjects()
1578 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetOldInstanceObjects()
1581 void SetNewInstanceObjects(art::ObjPtr<art::mirror::ObjectArray<art::mirror::Object>> objs) in SetNewInstanceObjects()
1582 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetNewInstanceObjects()
1585 void SetOldClasses(art::ObjPtr<art::mirror::ObjectArray<art::mirror::Class>> klasses) in SetOldClasses()
1586 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetOldClasses()
1589 void SetNewClasses(art::ObjPtr<art::mirror::ObjectArray<art::mirror::Class>> klasses) in SetNewClasses()
1590 REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetNewClasses()
1593 void SetInitialized() REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetInitialized()
1596 void SetActuallyStructural() REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetActuallyStructural()
1599 void SetInitialStructural() REQUIRES_SHARED(art::Locks::mutator_lock_) { in SetInitialStructural()
1617 art::Thread* self = art::Thread::Current(); in ~RedefinitionDataHolder()
1618 art::ClassLinker* cl = art::Runtime::Current()->GetClassLinker(); in ~RedefinitionDataHolder()
1620 art::ObjPtr<art::mirror::DexCache> dex_cache = data.GetNewDexCache(); in ~RedefinitionDataHolder()
1636 art::StackHandleScope<3> hs(driver_->self_); in CheckVerification()
1639 art::verifier::FailureKind failure = in CheckVerification()
1640 art::verifier::ClassVerifier::VerifyClass(driver_->self_, in CheckVerification()
1651 art::verifier::HardFailLogMode::kLogWarning, in CheckVerification()
1652 art::Runtime::Current()->GetTargetSdkVersion(), in CheckVerification()
1654 if (failure == art::verifier::FailureKind::kHardFailure) { in CheckVerification()
1665 art::Handle<art::mirror::ClassLoader> source_class_loader, in AllocateAndRememberNewDexFileCookie()
1666 art::Handle<art::mirror::Object> dex_file_obj, in AllocateAndRememberNewDexFileCookie()
1668 art::StackHandleScope<2> hs(driver_->self_); in AllocateAndRememberNewDexFileCookie()
1669 art::MutableHandle<art::mirror::LongArray> old_cookie( in AllocateAndRememberNewDexFileCookie()
1670 hs.NewHandle<art::mirror::LongArray>(nullptr)); in AllocateAndRememberNewDexFileCookie()
1691 art::Handle<art::mirror::LongArray> in AllocateAndRememberNewDexFileCookie()
1717 bool CompareClasses(art::ObjPtr<art::mirror::Class> l, art::ObjPtr<art::mirror::Class> r) in CompareClasses()
1718 REQUIRES_SHARED(art::Locks::mutator_lock_) { in CompareClasses()
1719 auto parents = [](art::ObjPtr<art::mirror::Class> c) REQUIRES_SHARED(art::Locks::mutator_lock_) { in CompareClasses()
1736 art::gc::Heap* heap = driver_->runtime_->GetHeap(); in CollectAndCreateNewInstances()
1737 art::VariableSizedHandleScope hs(driver_->self_); in CollectAndCreateNewInstances()
1738 art::Handle<art::mirror::Class> old_klass(hs.NewHandle(cur_data->GetMirrorClass())); in CollectAndCreateNewInstances()
1739 std::vector<art::Handle<art::mirror::Object>> old_instances; in CollectAndCreateNewInstances()
1740 auto is_instance = [&](art::mirror::Object* obj) REQUIRES_SHARED(art::Locks::mutator_lock_) { in CollectAndCreateNewInstances()
1743 heap->VisitObjects([&](art::mirror::Object* obj) REQUIRES_SHARED(art::Locks::mutator_lock_) { in CollectAndCreateNewInstances()
1749 art::Handle<art::mirror::ObjectArray<art::mirror::Class>> old_classes_arr( in CollectAndCreateNewInstances()
1751 art::Handle<art::mirror::ObjectArray<art::mirror::Class>> new_classes_arr( in CollectAndCreateNewInstances()
1755 art::Handle<art::mirror::Class> obj_array_class( in CollectAndCreateNewInstances()
1756 hs.NewHandle(art::GetClassRoot<art::mirror::ObjectArray<art::mirror::Object>>( in CollectAndCreateNewInstances()
1758 art::Handle<art::mirror::ObjectArray<art::mirror::Object>> old_instances_arr( in CollectAndCreateNewInstances()
1759 hs.NewHandle(art::mirror::ObjectArray<art::mirror::Object>::Alloc( in CollectAndCreateNewInstances()
1772 art::Handle<art::mirror::ObjectArray<art::mirror::Object>> new_instances_arr( in CollectAndCreateNewInstances()
1773 hs.NewHandle(art::mirror::ObjectArray<art::mirror::Object>::Alloc( in CollectAndCreateNewInstances()
1781 for (auto pair : art::ZipCount(art::IterationRange(old_instances.begin(), old_instances.end()))) { in CollectAndCreateNewInstances()
1782 art::Handle<art::mirror::Object> hinstance(pair.first); in CollectAndCreateNewInstances()
1784 auto iterator = art::ZipLeft(old_classes_arr.Iterate<art::mirror::Class>(), in CollectAndCreateNewInstances()
1785 new_classes_arr.Iterate<art::mirror::Class>()); in CollectAndCreateNewInstances()
1788 [&](auto class_pair) REQUIRES_SHARED(art::Locks::mutator_lock_) { in CollectAndCreateNewInstances()
1805 art::ObjPtr<art::mirror::Object> new_instance( in CollectAndCreateNewInstances()
1807 art::mirror::Class::AddFinalizer::kNoAddFinalizer, in CollectAndCreateNewInstances()
1826 art::StackHandleScope<2> hs(driver_->self_); in FinishRemainingCommonAllocations()
1829 art::Handle<art::mirror::ClassLoader> loader(hs.NewHandle(GetClassLoader())); in FinishRemainingCommonAllocations()
1831 if (!art::ClassLinker::IsBootClassLoader(loader.Get())) { in FinishRemainingCommonAllocations()
1833 art::Handle<art::mirror::Object> dex_file_obj(hs.NewHandle( in FinishRemainingCommonAllocations()
1874 art::VariableSizedHandleScope hs(driver_->self_); in FinishNewClassAllocations()
1879 [this](RedefinitionDataIter* data, art::Handle<art::mirror::Class> super_class) in FinishNewClassAllocations()
1880 REQUIRES_SHARED(art::Locks::mutator_lock_) -> art::ObjPtr<art::mirror::Class> { in FinishNewClassAllocations()
1881 art::StackHandleScope<3> chs(driver_->self_); in FinishNewClassAllocations()
1882 art::Handle<art::mirror::Class> nc( in FinishNewClassAllocations()
1896 std::vector<art::Handle<art::mirror::Class>> old_types; in FinishNewClassAllocations()
1898 art::gc::Heap* heap = driver_->runtime_->GetHeap(); in FinishNewClassAllocations()
1899 art::Handle<art::mirror::Class> in FinishNewClassAllocations()
1904 auto is_subtype = [&](art::mirror::Object* obj) REQUIRES_SHARED(art::Locks::mutator_lock_) { in FinishNewClassAllocations()
1911 heap->VisitObjects([&](art::mirror::Object* obj) REQUIRES_SHARED(art::Locks::mutator_lock_) { in FinishNewClassAllocations()
1921 art::Handle<art::mirror::Class> cls_array_class( in FinishNewClassAllocations()
1922 hs.NewHandle(art::GetClassRoot<art::mirror::ObjectArray<art::mirror::Class>>( in FinishNewClassAllocations()
1924 art::Handle<art::mirror::ObjectArray<art::mirror::Class>> old_classes_arr( in FinishNewClassAllocations()
1925 hs.NewHandle(art::mirror::ObjectArray<art::mirror::Class>::Alloc( in FinishNewClassAllocations()
1935 art::ScopedAssertNoThreadSuspension sants("Sort classes"); in FinishNewClassAllocations()
1940 [](auto& l, auto& r) REQUIRES_SHARED(art::Locks::mutator_lock_) { in FinishNewClassAllocations()
1951 art::Handle<art::mirror::ObjectArray<art::mirror::Class>> new_classes_arr( in FinishNewClassAllocations()
1952 hs.NewHandle(art::mirror::ObjectArray<art::mirror::Class>::Alloc( in FinishNewClassAllocations()
1961 art::MutableHandle<art::mirror::DexCache> dch(hs.NewHandle<art::mirror::DexCache>(nullptr)); in FinishNewClassAllocations()
1962 art::MutableHandle<art::mirror::Class> superclass(hs.NewHandle<art::mirror::Class>(nullptr)); in FinishNewClassAllocations()
1964 art::Handle<art::mirror::Class>& old_type = old_types[i]; in FinishNewClassAllocations()
1972 [&](art::Handle<art::mirror::Class>& v) in FinishNewClassAllocations()
1973 REQUIRES_SHARED(art::Locks::mutator_lock_) { in FinishNewClassAllocations()
1982 *cur_data + 1, holder.end(), [&](auto it) REQUIRES_SHARED(art::Locks::mutator_lock_) { in FinishNewClassAllocations()
1985 art::ObjPtr<art::mirror::Class> new_type; in FinishNewClassAllocations()
2010 uint32_t Redefiner::ClassRedefinition::GetNewClassSize(art::ClassAccessor& accessor) { in GetNewClassSize()
2016 for (const art::ClassAccessor::Field& f : accessor.GetStaticFields()) { in GetNewClassSize()
2034 return art::mirror::Class::ComputeClassSize(/*has_embedded_vtable=*/ false, in GetNewClassSize()
2041 art::kRuntimePointerSize); in GetNewClassSize()
2044 art::ObjPtr<art::mirror::Class>
2045 Redefiner::ClassRedefinition::AllocateNewClassObject(art::Handle<art::mirror::DexCache> cache) { in AllocateNewClassObject()
2046 art::StackHandleScope<2> hs(driver_->self_); in AllocateNewClassObject()
2047 art::Handle<art::mirror::Class> old_class(hs.NewHandle(GetMirrorClass())); in AllocateNewClassObject()
2048 art::Handle<art::mirror::Class> super_class(hs.NewHandle(old_class->GetSuperClass())); in AllocateNewClassObject()
2052 art::ObjPtr<art::mirror::Class> Redefiner::ClassRedefinition::AllocateNewClassObject( in AllocateNewClassObject()
2053 art::Handle<art::mirror::Class> old_class, in AllocateNewClassObject()
2054 art::Handle<art::mirror::Class> super_class, in AllocateNewClassObject()
2055 art::Handle<art::mirror::DexCache> cache, in AllocateNewClassObject()
2062 art::StackHandleScope<3> hs(driver_->self_); in AllocateNewClassObject()
2063 art::ClassLinker* linker = driver_->runtime_->GetClassLinker(); in AllocateNewClassObject()
2064 const art::DexFile* dex_file = cache->GetDexFile(); in AllocateNewClassObject()
2065 art::ClassAccessor accessor(*dex_file, dex_class_def_index); in AllocateNewClassObject()
2066 art::Handle<art::mirror::Class> new_class(hs.NewHandle(linker->AllocClass( in AllocateNewClassObject()
2084 art::ObjectLock<art::mirror::Class> lock(driver_->self_, new_class); in AllocateNewClassObject()
2087 new_class->SetIfTable(art::GetClassRoot<art::mirror::Object>(linker)->GetIfTable()); in AllocateNewClassObject()
2091 art::MutableHandle<art::mirror::Class> linked_class(hs.NewHandle<art::mirror::Class>(nullptr)); in AllocateNewClassObject()
2092 art::Handle<art::mirror::ObjectArray<art::mirror::Class>> proxy_ifaces( in AllocateNewClassObject()
2093 hs.NewHandle<art::mirror::ObjectArray<art::mirror::Class>>(nullptr)); in AllocateNewClassObject()
2096 art::mirror::Class::SetStatus(new_class, art::ClassStatus::kLoaded, nullptr); in AllocateNewClassObject()
2107 art::ObjectLock<art::mirror::Class> objlock(driver_->self_, linked_class); in AllocateNewClassObject()
2122 art::mirror::Class::SetStatus(linked_class, old_class->GetStatus(), driver_->self_); in AllocateNewClassObject()
2127 if (!art::mirror::Class::EnsureInstanceFieldIds(linked_class) || in AllocateNewClassObject()
2128 !art::mirror::Class::EnsureStaticFieldIds(linked_class) || in AllocateNewClassObject()
2129 !art::mirror::Class::EnsureMethodIds(linked_class)) { in AllocateNewClassObject()
2138 linked_class->VisitMethods([&](art::ArtMethod* m) REQUIRES_SHARED(art::Locks::mutator_lock_) { in AllocateNewClassObject()
2145 }, art::kRuntimePointerSize); in AllocateNewClassObject()
2146 if (art::kIsDebugBuild) { in AllocateNewClassObject()
2147 linked_class->VisitFields([&](art::ArtField* f) REQUIRES_SHARED(art::Locks::mutator_lock_) { in AllocateNewClassObject()
2241 if (art::kIsDebugBuild) { in ReleaseDexFile()
2242 art::Thread* self = art::Thread::Current(); in ReleaseDexFile()
2243 art::ClassLinker* cl = art::Runtime::Current()->GetClassLinker(); in ReleaseDexFile()
2266 ScopedDisableConcurrentAndMovingGc(art::gc::Heap* heap, art::Thread* self) in ScopedDisableConcurrentAndMovingGc()
2279 art::gc::Heap* heap_;
2280 art::Thread* self_;
2283 class ClassDefinitionPauser : public art::ClassLoadCallback {
2285 explicit ClassDefinitionPauser(art::Thread* self) REQUIRES_SHARED(art::Locks::mutator_lock_) in REQUIRES_SHARED()
2289 release_mu_("SuspendClassDefinition lock", art::kGenericBottomLock), in REQUIRES_SHARED()
2294 art::Locks::mutator_lock_->AssertSharedHeld(self_); in REQUIRES_SHARED()
2296 ~ClassDefinitionPauser() REQUIRES_SHARED(art::Locks::mutator_lock_) { in REQUIRES_SHARED()
2297 art::Locks::mutator_lock_->AssertSharedHeld(self_); in REQUIRES_SHARED()
2300 void Release() REQUIRES(art::Locks::mutator_lock_) { in Release()
2302 art::Locks::mutator_lock_->AssertExclusiveHeld(self_); in Release()
2306 art::MutexLock mu(self_, release_mu_); in Release()
2315 release_barrier_.Increment</*locks=*/art::Barrier::kAllowHoldingLocks>(self_, count); in Release()
2320 void BeginDefineClass() override REQUIRES_SHARED(art::Locks::mutator_lock_) { in BeginDefineClass()
2321 art::Thread* this_thread = art::Thread::Current(); in BeginDefineClass()
2334 art::Locks::mutator_lock_->AssertSharedHeld(this_thread); in BeginDefineClass()
2336 art::ScopedThreadSuspension sts(this_thread, art::ThreadState::kSuspended); in BeginDefineClass()
2338 art::MutexLock mu(this_thread, release_mu_); in BeginDefineClass()
2348 void EndDefineClass() override REQUIRES_SHARED(art::Locks::mutator_lock_) { in EndDefineClass()
2349 art::Thread* this_thread = art::Thread::Current(); in EndDefineClass()
2360 void ClassLoad([[maybe_unused]] art::Handle<art::mirror::Class> klass) override {} in ClassLoad()
2361 void ClassPrepare([[maybe_unused]] art::Handle<art::mirror::Class> klass1, in ClassPrepare()
2362 [[maybe_unused]] art::Handle<art::mirror::Class> klass2) override {} in ClassPrepare()
2367 void WaitFor(uint32_t t) REQUIRES(!art::Locks::mutator_lock_) { in WaitFor()
2372 art::Thread* self_;
2374 art::Barrier barrier_;
2375 art::Mutex release_mu_;
2376 art::Barrier release_barrier_;
2377 art::ConditionVariable release_cond_;
2384 ScopedSuspendClassLoading(art::Thread* self, art::Runtime* runtime, RedefinitionDataHolder& h) in ScopedSuspendClassLoading()
2385 REQUIRES_SHARED(art::Locks::mutator_lock_) in ScopedSuspendClassLoading()
2387 if (std::any_of(h.begin(), h.end(), [](auto r) REQUIRES_SHARED(art::Locks::mutator_lock_) { in ScopedSuspendClassLoading()
2393 art::ScopedThreadSuspension sts(self_, art::ThreadState::kNative); in ScopedSuspendClassLoading()
2396 art::ScopedSuspendAll ssa(__FUNCTION__); in ScopedSuspendClassLoading()
2399 art::MutexLock mu(self_, *art::Locks::thread_list_lock_); in ScopedSuspendClassLoading()
2400 runtime_->GetThreadList()->ForEach([&](art::Thread* t) { in ScopedSuspendClassLoading()
2414 art::ScopedThreadSuspension sts(self_, art::ThreadState::kNative); in ~ScopedSuspendClassLoading()
2415 art::ScopedSuspendAll ssa(__FUNCTION__); in ~ScopedSuspendClassLoading()
2422 art::Thread* self_;
2423 art::Runtime* runtime_;
2429 ScopedSuspendAllocations(art::Runtime* runtime, RedefinitionDataHolder& h) in ScopedSuspendAllocations()
2430 REQUIRES_SHARED(art::Locks::mutator_lock_) in ScopedSuspendAllocations()
2434 [](auto r) REQUIRES_SHARED(art::Locks::mutator_lock_) { in ScopedSuspendAllocations()
2439 AllocationManager::Get()->PauseAllocations(art::Thread::Current()); in ScopedSuspendAllocations()
2445 ~ScopedSuspendAllocations() REQUIRES_SHARED(art::Locks::mutator_lock_) { in REQUIRES_SHARED()
2447 AllocationManager::Get()->ResumeAllocations(art::Thread::Current()); in REQUIRES_SHARED()
2458 art::StackHandleScope<1> hs(self_); in Run()
2463 [&](auto& l, auto& r) REQUIRES_SHARED(art::Locks::mutator_lock_) { in Run()
2502 art::ClassLinker* cl = runtime_->GetClassLinker(); in Run()
2505 const art::DexFile& dex_file = data.GetRedefinition().GetDexFile(); in Run()
2523 art::ScopedThreadSuspension sts(self_, art::ThreadState::kNative); in Run()
2524 art::ScopedSuspendAll ssa("Final installation of redefined Classes!", /*long_suspend=*/true); in Run()
2526 art::ScopedAssertNoThreadSuspension nts("Updating runtime objects for redefinition"); in Run()
2545 void Redefiner::ClassRedefinition::UpdateMethods(art::ObjPtr<art::mirror::Class> mclass, in UpdateMethods()
2546 const art::dex::ClassDef& class_def) { in UpdateMethods()
2547 art::ClassLinker* linker = driver_->runtime_->GetClassLinker(); in UpdateMethods()
2548 art::PointerSize image_pointer_size = linker->GetImagePointerSize(); in UpdateMethods()
2549 const art::dex::TypeId& declaring_class_id = dex_file_->GetTypeId(class_def.class_idx_); in UpdateMethods()
2550 const art::DexFile& old_dex_file = mclass->GetDexFile(); in UpdateMethods()
2552 for (art::ArtMethod& method : mclass->GetDeclaredMethods(image_pointer_size)) { in UpdateMethods()
2556 const art::dex::StringId* new_name_id = dex_file_->FindStringId(method.GetName()); in UpdateMethods()
2557 art::dex::TypeIndex method_return_idx = in UpdateMethods()
2560 std::vector<art::dex::TypeIndex> new_type_list; in UpdateMethods()
2569 const art::dex::ProtoId* proto_id = dex_file_->FindProtoId(method_return_idx, new_type_list); in UpdateMethods()
2571 const art::dex::MethodId* method_id = dex_file_->FindMethodId(declaring_class_id, in UpdateMethods()
2588 void Redefiner::ClassRedefinition::UpdateFields(art::ObjPtr<art::mirror::Class> mclass) { in UpdateFields()
2591 for (art::ArtField& field : fields_iter) { in UpdateFields()
2592 const art::dex::TypeId* new_declaring_id = in UpdateFields()
2594 const art::dex::StringId* new_name_id = dex_file_->FindStringId(field.GetName()); in UpdateFields()
2595 const art::dex::TypeId* new_type_id = dex_file_->FindTypeId(field.GetTypeDescriptorView()); in UpdateFields()
2597 const art::dex::FieldId* new_field_id = in UpdateFields()
2609 std::map<art::ArtMethod*, art::ArtMethod*>* method_map, in CollectNewFieldAndMethodMappings()
2610 std::map<art::ArtField*, art::ArtField*>* field_map) { in CollectNewFieldAndMethodMappings()
2612 art::ZipLeft(data.GetNewClasses()->Iterate(), data.GetOldClasses()->Iterate())) { in CollectNewFieldAndMethodMappings()
2613 for (art::ArtField& f : old_cls->GetSFields()) { in CollectNewFieldAndMethodMappings()
2616 for (art::ArtField& f : old_cls->GetIFields()) { in CollectNewFieldAndMethodMappings()
2619 auto new_methods = new_cls->GetMethods(art::kRuntimePointerSize); in CollectNewFieldAndMethodMappings()
2620 for (art::ArtMethod& m : old_cls->GetMethods(art::kRuntimePointerSize)) { in CollectNewFieldAndMethodMappings()
2626 [&](art::ArtMethod& cand) REQUIRES_SHARED(art::Locks::mutator_lock_) { in CollectNewFieldAndMethodMappings()
2636 static void CopyField(art::ObjPtr<art::mirror::Object> target, in CopyField()
2637 art::ArtField* new_field, in CopyField()
2638 art::ObjPtr<art::mirror::Object> source, in CopyField()
2639 art::ArtField& old_field) REQUIRES(art::Locks::mutator_lock_) { in CopyField()
2640 art::Primitive::Type ftype = old_field.GetTypeAsPrimitiveType(); in CopyField()
2643 if (ftype == art::Primitive::kPrimNot) { in CopyField()
2648 case art::Primitive::kPrim##TYPE: \ in CopyField()
2659 case art::Primitive::kPrimNot: in CopyField()
2660 case art::Primitive::kPrimVoid: in CopyField()
2669 art::ObjPtr<art::mirror::Object> target, in CopyFields()
2670 art::ObjPtr<art::mirror::Class> target_class, in CopyFields()
2671 art::ObjPtr<art::mirror::Object> source, in CopyFields()
2672 art::ObjPtr<art::mirror::Class> source_class) in CopyFields()
2673 REQUIRES(art::Locks::mutator_lock_) { in CopyFields()
2677 for (art::ArtField& f : (is_static ? source_class->GetSFields() : source_class->GetIFields())) { in CopyFields()
2678 art::ArtField* new_field = in CopyFields()
2690 static void ClearField(art::ObjPtr<art::mirror::Object> target, art::ArtField& field) in ClearField()
2691 REQUIRES(art::Locks::mutator_lock_) { in ClearField()
2692 art::Primitive::Type ftype = field.GetTypeAsPrimitiveType(); in ClearField()
2693 if (ftype == art::Primitive::kPrimNot) { in ClearField()
2698 case art::Primitive::kPrim##TYPE: \ in ClearField()
2709 case art::Primitive::kPrimNot: in ClearField()
2710 case art::Primitive::kPrimVoid: in ClearField()
2719 art::ObjPtr<art::mirror::Object> target, in ClearFields()
2720 art::ObjPtr<art::mirror::Class> target_class) in ClearFields()
2721 REQUIRES(art::Locks::mutator_lock_) { in ClearFields()
2723 for (art::ArtField& f : (is_static ? target_class->GetSFields() : target_class->GetIFields())) { in ClearFields()
2732 art::ObjPtr<art::mirror::Object> target, in CopyAndClearFields()
2733 art::ObjPtr<art::mirror::Class> target_class, in CopyAndClearFields()
2734 art::ObjPtr<art::mirror::Object> source, in CopyAndClearFields()
2735 art::ObjPtr<art::mirror::Class> source_class) in CopyAndClearFields()
2736 REQUIRES(art::Locks::mutator_lock_) { in CopyAndClearFields()
2742 source->SetLockWord(art::LockWord::Default(), false); in CopyAndClearFields()
2743 art::WriteBarrier::ForEveryFieldWrite(target); in CopyAndClearFields()
2747 art::WriteBarrier::ForEveryFieldWrite(source); in CopyAndClearFields()
2756 art::Locks::mutator_lock_->AssertExclusiveHeld(driver_->self_); in UpdateClassStructurally()
2757 art::ClassLinker* cl = driver_->runtime_->GetClassLinker(); in UpdateClassStructurally()
2758 art::ScopedAssertNoThreadSuspension sants(__FUNCTION__); in UpdateClassStructurally()
2759 art::ObjPtr<art::mirror::ObjectArray<art::mirror::Class>> new_classes(holder.GetNewClasses()); in UpdateClassStructurally()
2760 art::ObjPtr<art::mirror::ObjectArray<art::mirror::Class>> old_classes(holder.GetOldClasses()); in UpdateClassStructurally()
2762 std::map<art::ArtMethod*, art::ArtMethod*> method_map; in UpdateClassStructurally()
2763 std::map<art::ArtField*, art::ArtField*> field_map; in UpdateClassStructurally()
2765 art::ObjPtr<art::mirror::ObjectArray<art::mirror::Object>> new_instances( in UpdateClassStructurally()
2767 art::ObjPtr<art::mirror::ObjectArray<art::mirror::Object>> old_instances( in UpdateClassStructurally()
2771 std::vector<art::ObjPtr<art::mirror::Class>> old_classes_vec(old_classes->Iterate().begin(), in UpdateClassStructurally()
2774 for (auto [new_class, old_class] : art::ZipLeft(new_classes->Iterate(), old_classes->Iterate())) { in UpdateClassStructurally()
2788 art::ZipLeft(new_instances->Iterate(), old_instances->Iterate())) { in UpdateClassStructurally()
2796 for (auto [old_class, new_class] : art::ZipLeft(old_classes->Iterate(), new_classes->Iterate())) { in UpdateClassStructurally()
2802 for (art::ArtMethod& m : old_class->GetMethods(art::kRuntimePointerSize)) { in UpdateClassStructurally()
2804 art::ArtMethod* new_method = in UpdateClassStructurally()
2805 new_class->FindClassMethod(m.GetNameView(), m.GetSignature(), art::kRuntimePointerSize); in UpdateClassStructurally()
2806 DCHECK(new_class->GetMethodsSlice(art::kRuntimePointerSize).Contains(new_method)) in UpdateClassStructurally()
2820 const auto& info) REQUIRES(art::Locks::mutator_lock_) { in UpdateClassStructurally()
2821 constexpr bool is_method = std::is_same_v<art::ArtMethod*, decltype(field_or_method)>; in UpdateClassStructurally()
2822 static_assert(is_method || std::is_same_v<art::ArtField*, decltype(field_or_method)>, in UpdateClassStructurally()
2825 if (LIKELY(info.GetType() != art::ReflectionSourceType::kSourceDexCacheResolvedField && in UpdateClassStructurally()
2826 info.GetType() != art::ReflectionSourceType::kSourceDexCacheResolvedMethod)) { in UpdateClassStructurally()
2844 art::ObjPtr<art::mirror::Class> f_or_m_class = field_or_method->GetDeclaringClass(); in UpdateClassStructurally()
2854 [&](art::ObjPtr<art::mirror::Class> cand) REQUIRES(art::Locks::mutator_lock_) { in UpdateClassStructurally()
2855 auto direct_methods = cand->GetDirectMethods(art::kRuntimePointerSize); in UpdateClassStructurally()
2858 [&](art::ArtMethod& m) REQUIRES(art::Locks::mutator_lock_) { in UpdateClassStructurally()
2863 auto pred = [&](art::ArtField& f) REQUIRES(art::Locks::mutator_lock_) { in UpdateClassStructurally()
2872 [&](art::ObjPtr<art::mirror::Class> cand) REQUIRES(art::Locks::mutator_lock_) { in UpdateClassStructurally()
2880 [&](art::ObjPtr<art::mirror::Class> cand) REQUIRES(art::Locks::mutator_lock_) { in UpdateClassStructurally()
2890 [&](art::ArtField* f, const auto& info) REQUIRES(art::Locks::mutator_lock_) { in UpdateClassStructurally()
2896 return static_cast<art::ArtField*>(nullptr); in UpdateClassStructurally()
2904 [&](art::ArtMethod* m, const auto& info) REQUIRES(art::Locks::mutator_lock_) { in UpdateClassStructurally()
2910 return static_cast<art::ArtMethod*>(nullptr); in UpdateClassStructurally()
2922 std::unordered_map<art::ObjPtr<art::mirror::Object>, in UpdateClassStructurally()
2923 art::ObjPtr<art::mirror::Object>, in UpdateClassStructurally()
2924 art::HashObjPtr> map; in UpdateClassStructurally()
2925 for (auto [new_class, old_class] : art::ZipLeft(new_classes->Iterate(), old_classes->Iterate())) { in UpdateClassStructurally()
2929 art::ZipLeft(new_instances->Iterate(), old_instances->Iterate())) { in UpdateClassStructurally()
2948 [](art::ObjPtr<art::mirror::Class> orig) REQUIRES_SHARED(art::Locks::mutator_lock_) { in UpdateClassStructurally()
2950 [&](art::ArtMethod* method) REQUIRES_SHARED(art::Locks::mutator_lock_) { in UpdateClassStructurally()
2957 art::kRuntimePointerSize); in UpdateClassStructurally()
2958 orig->VisitFields([&](art::ArtField* field) REQUIRES_SHARED(art::Locks::mutator_lock_) { in UpdateClassStructurally()
2966 art::ZipLeft(new_classes->Iterate(), art::MakeIterationRange(old_classes_vec))) { in UpdateClassStructurally()
2970 art::jit::Jit* jit = driver_->runtime_->GetJit(); in UpdateClassStructurally()
2982 art::MutexLock mu(driver_->self_, *art::Locks::thread_list_lock_); in UpdateClassStructurally()
2984 [](art::Thread* t) { t->GetInterpreterCache()->Clear(t); }); in UpdateClassStructurally()
2987 if (art::kIsDebugBuild) { in UpdateClassStructurally()
2993 [](art::ObjPtr<art::mirror::Class> orig) REQUIRES_SHARED(art::Locks::mutator_lock_) { in UpdateClassStructurally()
2995 [&](art::ArtMethod* method) REQUIRES_SHARED(art::Locks::mutator_lock_) { in UpdateClassStructurally()
3003 art::kRuntimePointerSize); in UpdateClassStructurally()
3004 orig->VisitFields([&](art::ArtField* field) REQUIRES_SHARED(art::Locks::mutator_lock_) { in UpdateClassStructurally()
3014 art::ObjPtr<art::mirror::Class> mclass(holder.GetMirrorClass()); in UpdateClassInPlace()
3017 art::ObjPtr<art::mirror::DexCache> new_dex_cache(holder.GetNewDexCache()); in UpdateClassInPlace()
3018 art::ObjPtr<art::mirror::Object> original_dex_file(holder.GetOriginalDexFile()); in UpdateClassInPlace()
3020 const art::dex::ClassDef& class_def = dex_file_->GetClassDef(0); in UpdateClassInPlace()
3024 art::ObjPtr<art::mirror::ClassExt> ext(mclass->GetExtData()); in UpdateClassInPlace()
3047 art::jit::Jit* jit = driver_->runtime_->GetJit(); in UpdateClassInPlace()
3049 art::PointerSize image_pointer_size = in UpdateClassInPlace()
3054 for (art::ArtMethod& method : mclass->GetDeclaredMethods(image_pointer_size)) { in UpdateClassInPlace()
3080 art::ObjPtr<art::mirror::Class> klass = GetMirrorClass(); in RestoreObsoleteMethodMapsIfUnneeded()
3081 art::ObjPtr<art::mirror::ClassExt> ext = klass->GetExtData(); in RestoreObsoleteMethodMapsIfUnneeded()
3082 art::ObjPtr<art::mirror::PointerArray> methods = ext->GetObsoleteMethods(); in RestoreObsoleteMethodMapsIfUnneeded()
3083 art::ObjPtr<art::mirror::PointerArray> old_methods = cur_data->GetOldObsoleteMethods(); in RestoreObsoleteMethodMapsIfUnneeded()
3093 art::ArtMethod* expected = nullptr; in RestoreObsoleteMethodMapsIfUnneeded()
3095 expected = old_methods->GetElementPtrSize<art::ArtMethod*>(i, art::kRuntimePointerSize); in RestoreObsoleteMethodMapsIfUnneeded()
3097 if (methods->GetElementPtrSize<art::ArtMethod*>(i, art::kRuntimePointerSize) != expected) { in RestoreObsoleteMethodMapsIfUnneeded()
3112 art::StackHandleScope<2> hs(driver_->self_); in EnsureClassAllocationsFinished()
3113 art::Handle<art::mirror::Class> klass(hs.NewHandle( in EnsureClassAllocationsFinished()
3120 art::Handle<art::mirror::ClassExt> ext = in EnsureClassAllocationsFinished()
3121 hs.NewHandle(art::mirror::Class::EnsureExtDataPresent(klass, driver_->self_)); in EnsureClassAllocationsFinished()
3142 if (!art::mirror::ClassExt::ExtendObsoleteArrays( in EnsureClassAllocationsFinished()
3143 ext, driver_->self_, klass->GetDeclaredMethodsSlice(art::kRuntimePointerSize).size())) { in EnsureClassAllocationsFinished()