Lines Matching refs:mirror
89 static void ThrowEarlierClassFailure(mirror::Class* c) in ThrowEarlierClassFailure()
190 memset(find_array_class_cache_, 0, kFindArrayCacheSize * sizeof(mirror::Class*)); in ClassLinker()
194 extern "C" void art_quick_generic_jni_trampoline(mirror::ArtMethod*);
195 extern "C" void art_quick_resolution_trampoline(mirror::ArtMethod*);
196 extern "C" void art_quick_imt_conflict_trampoline(mirror::ArtMethod*);
197 extern "C" void art_quick_to_interpreter_bridge(mirror::ArtMethod*);
211 Handle<mirror::Class> java_lang_Class(hs.NewHandle(down_cast<mirror::Class*>( in InitWithoutImage()
213 mirror::Class::ClassClassSize(), in InitWithoutImage()
216 mirror::Class::SetClassClass(java_lang_Class.Get()); in InitWithoutImage()
221 java_lang_Class->SetClassSize(mirror::Class::ClassClassSize()); in InitWithoutImage()
226 Handle<mirror::Class> class_array_class(hs.NewHandle( in InitWithoutImage()
227 AllocClass(self, java_lang_Class.Get(), mirror::ObjectArray<mirror::Class>::ClassSize()))); in InitWithoutImage()
231 Handle<mirror::Class> java_lang_Object(hs.NewHandle( in InitWithoutImage()
232 AllocClass(self, java_lang_Class.Get(), mirror::Object::ClassSize()))); in InitWithoutImage()
236 java_lang_Object->SetStatus(mirror::Class::kStatusLoaded, self); in InitWithoutImage()
239 Handle<mirror::Class> object_array_class(hs.NewHandle( in InitWithoutImage()
240 AllocClass(self, java_lang_Class.Get(), mirror::ObjectArray<mirror::Object>::ClassSize()))); in InitWithoutImage()
244 Handle<mirror::Class> char_class(hs.NewHandle( in InitWithoutImage()
245 AllocClass(self, java_lang_Class.Get(), mirror::Class::PrimitiveClassSize()))); in InitWithoutImage()
248 Handle<mirror::Class> char_array_class(hs.NewHandle( in InitWithoutImage()
250 mirror::Array::ClassSize()))); in InitWithoutImage()
252 mirror::CharArray::SetArrayClass(char_array_class.Get()); in InitWithoutImage()
255 Handle<mirror::Class> java_lang_String(hs.NewHandle( in InitWithoutImage()
256 AllocClass(self, java_lang_Class.Get(), mirror::String::ClassSize()))); in InitWithoutImage()
257 mirror::String::SetClass(java_lang_String.Get()); in InitWithoutImage()
258 java_lang_String->SetObjectSize(mirror::String::InstanceSize()); in InitWithoutImage()
259 java_lang_String->SetStatus(mirror::Class::kStatusResolved, self); in InitWithoutImage()
262 Handle<mirror::Class> java_lang_ref_Reference(hs.NewHandle( in InitWithoutImage()
263 AllocClass(self, java_lang_Class.Get(), mirror::Reference::ClassSize()))); in InitWithoutImage()
264 mirror::Reference::SetClass(java_lang_ref_Reference.Get()); in InitWithoutImage()
265 java_lang_ref_Reference->SetObjectSize(mirror::Reference::InstanceSize()); in InitWithoutImage()
266 java_lang_ref_Reference->SetStatus(mirror::Class::kStatusResolved, self); in InitWithoutImage()
269 class_roots_ = GcRoot<mirror::ObjectArray<mirror::Class> >( in InitWithoutImage()
270 mirror::ObjectArray<mirror::Class>::Alloc(self, object_array_class.Get(), in InitWithoutImage()
292 array_iftable_ = GcRoot<mirror::IfTable>(AllocIfTable(self, 2)); in InitWithoutImage()
295 Handle<mirror::Class> int_array_class(hs.NewHandle( in InitWithoutImage()
296 AllocClass(self, java_lang_Class.Get(), mirror::Array::ClassSize()))); in InitWithoutImage()
298 mirror::IntArray::SetArrayClass(int_array_class.Get()); in InitWithoutImage()
304 Handle<mirror::Class> java_lang_DexCache(hs.NewHandle( in InitWithoutImage()
305 AllocClass(self, java_lang_Class.Get(), mirror::DexCache::ClassSize()))); in InitWithoutImage()
307 java_lang_DexCache->SetObjectSize(mirror::DexCache::InstanceSize()); in InitWithoutImage()
308 java_lang_DexCache->SetStatus(mirror::Class::kStatusResolved, self); in InitWithoutImage()
312 Handle<mirror::Class> java_lang_reflect_ArtField(hs.NewHandle( in InitWithoutImage()
313 AllocClass(self, java_lang_Class.Get(), mirror::ArtField::ClassSize()))); in InitWithoutImage()
315 java_lang_reflect_ArtField->SetObjectSize(mirror::ArtField::InstanceSize()); in InitWithoutImage()
317 java_lang_reflect_ArtField->SetStatus(mirror::Class::kStatusResolved, self); in InitWithoutImage()
318 mirror::ArtField::SetClass(java_lang_reflect_ArtField.Get()); in InitWithoutImage()
320 Handle<mirror::Class> java_lang_reflect_ArtMethod(hs.NewHandle( in InitWithoutImage()
321 AllocClass(self, java_lang_Class.Get(), mirror::ArtMethod::ClassSize()))); in InitWithoutImage()
323 java_lang_reflect_ArtMethod->SetObjectSize(mirror::ArtMethod::InstanceSize(sizeof(void*))); in InitWithoutImage()
325 java_lang_reflect_ArtMethod->SetStatus(mirror::Class::kStatusResolved, self); in InitWithoutImage()
326 mirror::ArtMethod::SetClass(java_lang_reflect_ArtMethod.Get()); in InitWithoutImage()
329 Handle<mirror::Class> object_array_string(hs.NewHandle( in InitWithoutImage()
331 mirror::ObjectArray<mirror::String>::ClassSize()))); in InitWithoutImage()
335 Handle<mirror::Class> object_array_art_method(hs.NewHandle( in InitWithoutImage()
337 mirror::ObjectArray<mirror::ArtMethod>::ClassSize()))); in InitWithoutImage()
341 Handle<mirror::Class> object_array_art_field(hs.NewHandle( in InitWithoutImage()
343 mirror::ObjectArray<mirror::ArtField>::ClassSize()))); in InitWithoutImage()
380 java_lang_Object->SetStatus(mirror::Class::kStatusNotReady, self); in InitWithoutImage()
381 mirror::Class* Object_class = FindSystemClass(self, "Ljava/lang/Object;"); in InitWithoutImage()
383 CHECK_EQ(java_lang_Object->GetObjectSize(), mirror::Object::InstanceSize()); in InitWithoutImage()
384 java_lang_String->SetStatus(mirror::Class::kStatusNotReady, self); in InitWithoutImage()
385 mirror::Class* String_class = FindSystemClass(self, "Ljava/lang/String;"); in InitWithoutImage()
387 java_lang_String->DumpClass(os1, mirror::Class::kDumpClassFullDetail); in InitWithoutImage()
388 String_class->DumpClass(os2, mirror::Class::kDumpClassFullDetail); in InitWithoutImage()
390 CHECK_EQ(java_lang_String->GetObjectSize(), mirror::String::InstanceSize()); in InitWithoutImage()
391 java_lang_DexCache->SetStatus(mirror::Class::kStatusNotReady, self); in InitWithoutImage()
392 mirror::Class* DexCache_class = FindSystemClass(self, "Ljava/lang/DexCache;"); in InitWithoutImage()
395 CHECK_EQ(java_lang_DexCache->GetObjectSize(), mirror::DexCache::InstanceSize()); in InitWithoutImage()
399 mirror::BooleanArray::SetArrayClass(GetClassRoot(kBooleanArrayClass)); in InitWithoutImage()
402 mirror::ByteArray::SetArrayClass(GetClassRoot(kByteArrayClass)); in InitWithoutImage()
404 mirror::Class* found_char_array_class = FindSystemClass(self, "[C"); in InitWithoutImage()
408 mirror::ShortArray::SetArrayClass(GetClassRoot(kShortArrayClass)); in InitWithoutImage()
410 mirror::Class* found_int_array_class = FindSystemClass(self, "[I"); in InitWithoutImage()
414 mirror::LongArray::SetArrayClass(GetClassRoot(kLongArrayClass)); in InitWithoutImage()
417 mirror::FloatArray::SetArrayClass(GetClassRoot(kFloatArrayClass)); in InitWithoutImage()
420 mirror::DoubleArray::SetArrayClass(GetClassRoot(kDoubleArrayClass)); in InitWithoutImage()
422 mirror::Class* found_class_array_class = FindSystemClass(self, "[Ljava/lang/Class;"); in InitWithoutImage()
425 mirror::Class* found_object_array_class = FindSystemClass(self, "[Ljava/lang/Object;"); in InitWithoutImage()
429 mirror::Class* java_lang_Cloneable = FindSystemClass(self, "Ljava/lang/Cloneable;"); in InitWithoutImage()
431 mirror::Class* java_io_Serializable = FindSystemClass(self, "Ljava/io/Serializable;"); in InitWithoutImage()
436 mirror::IfTable* array_iftable = array_iftable_.Read(); in InitWithoutImage()
442 CHECK_EQ(java_lang_Cloneable, mirror::Class::GetDirectInterface(self, class_array_class, 0)); in InitWithoutImage()
443 CHECK_EQ(java_io_Serializable, mirror::Class::GetDirectInterface(self, class_array_class, 1)); in InitWithoutImage()
444 CHECK_EQ(java_lang_Cloneable, mirror::Class::GetDirectInterface(self, object_array_class, 0)); in InitWithoutImage()
445 CHECK_EQ(java_io_Serializable, mirror::Class::GetDirectInterface(self, object_array_class, 1)); in InitWithoutImage()
448 mirror::Class* Class_class = FindSystemClass(self, "Ljava/lang/Class;"); in InitWithoutImage()
451 java_lang_reflect_ArtMethod->SetStatus(mirror::Class::kStatusNotReady, self); in InitWithoutImage()
452 mirror::Class* Art_method_class = FindSystemClass(self, "Ljava/lang/reflect/ArtMethod;"); in InitWithoutImage()
455 java_lang_reflect_ArtField->SetStatus(mirror::Class::kStatusNotReady, self); in InitWithoutImage()
456 mirror::Class* Art_field_class = FindSystemClass(self, "Ljava/lang/reflect/ArtField;"); in InitWithoutImage()
459 mirror::Class* String_array_class = in InitWithoutImage()
463 mirror::Class* Art_method_array_class = in InitWithoutImage()
467 mirror::Class* Art_field_array_class = in InitWithoutImage()
474 mirror::Class* java_lang_reflect_Proxy = FindSystemClass(self, "Ljava/lang/reflect/Proxy;"); in InitWithoutImage()
479 java_lang_ref_Reference->SetStatus(mirror::Class::kStatusNotReady, self); in InitWithoutImage()
480 mirror::Class* Reference_class = FindSystemClass(self, "Ljava/lang/ref/Reference;"); in InitWithoutImage()
482 CHECK_EQ(java_lang_ref_Reference->GetObjectSize(), mirror::Reference::InstanceSize()); in InitWithoutImage()
483 CHECK_EQ(java_lang_ref_Reference->GetClassSize(), mirror::Reference::ClassSize()); in InitWithoutImage()
484 mirror::Class* java_lang_ref_FinalizerReference = in InitWithoutImage()
489 mirror::Class* java_lang_ref_PhantomReference = in InitWithoutImage()
494 mirror::Class* java_lang_ref_SoftReference = in InitWithoutImage()
498 mirror::Class* java_lang_ref_WeakReference = in InitWithoutImage()
505 mirror::Class* java_lang_ClassLoader = FindSystemClass(self, "Ljava/lang/ClassLoader;"); in InitWithoutImage()
506 CHECK_EQ(java_lang_ClassLoader->GetObjectSize(), mirror::ClassLoader::InstanceSize()); in InitWithoutImage()
512 mirror::Throwable::SetClass(GetClassRoot(kJavaLangThrowable)); in InitWithoutImage()
518 mirror::StackTraceElement::SetClass(GetClassRoot(kJavaLangStackTraceElement)); in InitWithoutImage()
532 mirror::Class* resolved_type = ResolveType(dex_file, void_type_idx, java_lang_Object.Get()); in InitWithoutImage()
549 mirror::Class* java_lang_ref_Reference = GetClassRoot(kJavaLangRefReference); in FinishInit()
550 mirror::Class* java_lang_ref_FinalizerReference = in FinishInit()
553 mirror::ArtField* pendingNext = java_lang_ref_Reference->GetInstanceField(0); in FinishInit()
557 mirror::ArtField* queue = java_lang_ref_Reference->GetInstanceField(1); in FinishInit()
561 mirror::ArtField* queueNext = java_lang_ref_Reference->GetInstanceField(2); in FinishInit()
565 mirror::ArtField* referent = java_lang_ref_Reference->GetInstanceField(3); in FinishInit()
569 mirror::ArtField* zombie = java_lang_ref_FinalizerReference->GetInstanceField(2); in FinishInit()
576 mirror::Class* klass = GetClassRoot(class_root); in FinishInit()
595 mirror::Class* c = GetClassRoot(ClassRoot(i)); in RunRootClinits()
598 Handle<mirror::Class> h_class(hs.NewHandle(GetClassRoot(ClassRoot(i)))); in RunRootClinits()
1577 static void InitFromImageInterpretOnlyCallback(mirror::Object* obj, void* arg) in InitFromImageInterpretOnlyCallback()
1585 mirror::ArtMethod* method = obj->AsArtMethod(); in InitFromImageInterpretOnlyCallback()
1619 mirror::Object* dex_caches_object = space->GetImageHeader().GetImageRoot(ImageHeader::kDexCaches); in InitFromImage()
1620 mirror::ObjectArray<mirror::DexCache>* dex_caches = in InitFromImage()
1621 dex_caches_object->AsObjectArray<mirror::DexCache>(); in InitFromImage()
1624 Handle<mirror::ObjectArray<mirror::Class>> class_roots(hs.NewHandle( in InitFromImage()
1626 AsObjectArray<mirror::Class>())); in InitFromImage()
1627 class_roots_ = GcRoot<mirror::ObjectArray<mirror::Class>>(class_roots.Get()); in InitFromImage()
1631 mirror::String::SetClass(GetClassRoot(kJavaLangString)); in InitFromImage()
1637 Handle<mirror::DexCache> dex_cache(hs.NewHandle(dex_caches->Get(i))); in InitFromImage()
1657 mirror::ArtMethod::SetClass(GetClassRoot(kJavaLangReflectArtMethod)); in InitFromImage()
1658 size_t art_method_object_size = mirror::ArtMethod::GetJavaLangReflectArtMethod()->GetObjectSize(); in InitFromImage()
1663 CHECK_EQ(art_method_object_size, mirror::ArtMethod::InstanceSize(sizeof(void*))) in InitFromImage()
1666 if (art_method_object_size == mirror::ArtMethod::InstanceSize(4)) { in InitFromImage()
1669 CHECK_EQ(art_method_object_size, mirror::ArtMethod::InstanceSize(8)); in InitFromImage()
1680 mirror::Class::SetClassClass(class_roots->Get(kJavaLangClass)); in InitFromImage()
1681 class_roots_ = GcRoot<mirror::ObjectArray<mirror::Class>>(class_roots.Get()); in InitFromImage()
1684 array_iftable_ = GcRoot<mirror::IfTable>(GetClassRoot(kObjectArrayClass)->GetIfTable()); in InitFromImage()
1687 mirror::Reference::SetClass(GetClassRoot(kJavaLangRefReference)); in InitFromImage()
1688 mirror::ArtField::SetClass(GetClassRoot(kJavaLangReflectArtField)); in InitFromImage()
1689 mirror::BooleanArray::SetArrayClass(GetClassRoot(kBooleanArrayClass)); in InitFromImage()
1690 mirror::ByteArray::SetArrayClass(GetClassRoot(kByteArrayClass)); in InitFromImage()
1691 mirror::CharArray::SetArrayClass(GetClassRoot(kCharArrayClass)); in InitFromImage()
1692 mirror::DoubleArray::SetArrayClass(GetClassRoot(kDoubleArrayClass)); in InitFromImage()
1693 mirror::FloatArray::SetArrayClass(GetClassRoot(kFloatArrayClass)); in InitFromImage()
1694 mirror::IntArray::SetArrayClass(GetClassRoot(kIntArrayClass)); in InitFromImage()
1695 mirror::LongArray::SetArrayClass(GetClassRoot(kLongArrayClass)); in InitFromImage()
1696 mirror::ShortArray::SetArrayClass(GetClassRoot(kShortArrayClass)); in InitFromImage()
1697 mirror::Throwable::SetClass(GetClassRoot(kJavaLangThrowable)); in InitFromImage()
1698 mirror::StackTraceElement::SetClass(GetClassRoot(kJavaLangStackTraceElement)); in InitFromImage()
1708 for (GcRoot<mirror::Class>& root : class_table_) { in VisitClassRoots()
1711 for (GcRoot<mirror::Class>& root : pre_zygote_class_table_) { in VisitClassRoots()
1716 mirror::Class* old_ref = root.Read<kWithoutReadBarrier>(); in VisitClassRoots()
1718 mirror::Class* new_ref = root.Read<kWithoutReadBarrier>(); in VisitClassRoots()
1723 auto it = class_table_.Find(GcRoot<mirror::Class>(old_ref)); in VisitClassRoots()
1725 *it = GcRoot<mirror::Class>(new_ref); in VisitClassRoots()
1750 for (GcRoot<mirror::DexCache>& dex_cache : dex_caches_) { in VisitRoots()
1781 for (GcRoot<mirror::Class>& root : class_table_) { in VisitClasses()
1786 for (GcRoot<mirror::Class>& root : pre_zygote_class_table_) { in VisitClasses()
1793 static bool GetClassesVisitorSet(mirror::Class* c, void* arg) { in GetClassesVisitorSet()
1794 std::set<mirror::Class*>* classes = reinterpret_cast<std::set<mirror::Class*>*>(arg); in GetClassesVisitorSet()
1800 Handle<mirror::ObjectArray<mirror::Class>>* classes;
1805 static bool GetClassesVisitorArray(mirror::Class* c, void* varg) in GetClassesVisitorArray()
1822 std::set<mirror::Class*> classes; in VisitClassesWithoutClassesLock()
1824 for (mirror::Class* klass : classes) { in VisitClassesWithoutClassesLock()
1832 Handle<mirror::ObjectArray<mirror::Class>> classes = in VisitClassesWithoutClassesLock()
1833 hs.NewHandle<mirror::ObjectArray<mirror::Class>>(nullptr); in VisitClassesWithoutClassesLock()
1845 mirror::Class* class_type = mirror::Class::GetJavaLangClass(); in VisitClassesWithoutClassesLock()
1846 mirror::Class* array_of_class = FindArrayClass(self, &class_type); in VisitClassesWithoutClassesLock()
1848 mirror::ObjectArray<mirror::Class>::Alloc(self, array_of_class, class_table_size)); in VisitClassesWithoutClassesLock()
1858 mirror::Class* klass = classes->Get(i); in VisitClassesWithoutClassesLock()
1867 mirror::Class::ResetClass(); in ~ClassLinker()
1868 mirror::String::ResetClass(); in ~ClassLinker()
1869 mirror::Reference::ResetClass(); in ~ClassLinker()
1870 mirror::ArtField::ResetClass(); in ~ClassLinker()
1871 mirror::ArtMethod::ResetClass(); in ~ClassLinker()
1872 mirror::BooleanArray::ResetArrayClass(); in ~ClassLinker()
1873 mirror::ByteArray::ResetArrayClass(); in ~ClassLinker()
1874 mirror::CharArray::ResetArrayClass(); in ~ClassLinker()
1875 mirror::DoubleArray::ResetArrayClass(); in ~ClassLinker()
1876 mirror::FloatArray::ResetArrayClass(); in ~ClassLinker()
1877 mirror::IntArray::ResetArrayClass(); in ~ClassLinker()
1878 mirror::LongArray::ResetArrayClass(); in ~ClassLinker()
1879 mirror::ShortArray::ResetArrayClass(); in ~ClassLinker()
1880 mirror::Throwable::ResetClass(); in ~ClassLinker()
1881 mirror::StackTraceElement::ResetClass(); in ~ClassLinker()
1886 mirror::DexCache* ClassLinker::AllocDexCache(Thread* self, const DexFile& dex_file) { in AllocDexCache()
1889 Handle<mirror::Class> dex_cache_class(hs.NewHandle(GetClassRoot(kJavaLangDexCache))); in AllocDexCache()
1890 Handle<mirror::DexCache> dex_cache( in AllocDexCache()
1891 hs.NewHandle(down_cast<mirror::DexCache*>( in AllocDexCache()
1897 Handle<mirror::String> in AllocDexCache()
1902 Handle<mirror::ObjectArray<mirror::String>> in AllocDexCache()
1907 Handle<mirror::ObjectArray<mirror::Class>> in AllocDexCache()
1912 Handle<mirror::ObjectArray<mirror::ArtMethod>> in AllocDexCache()
1917 Handle<mirror::ObjectArray<mirror::ArtField>> in AllocDexCache()
1927 mirror::Class* ClassLinker::AllocClass(Thread* self, mirror::Class* java_lang_Class, in AllocClass()
1929 DCHECK_GE(class_size, sizeof(mirror::Class)); in AllocClass()
1931 mirror::Class::InitializeClassVisitor visitor(class_size); in AllocClass()
1932 mirror::Object* k = kMovingClasses ? in AllocClass()
1942 mirror::Class* ClassLinker::AllocClass(Thread* self, uint32_t class_size) { in AllocClass()
1946 mirror::ArtField* ClassLinker::AllocArtField(Thread* self) { in AllocArtField()
1947 return down_cast<mirror::ArtField*>( in AllocArtField()
1951 mirror::ArtMethod* ClassLinker::AllocArtMethod(Thread* self) { in AllocArtMethod()
1952 return down_cast<mirror::ArtMethod*>( in AllocArtMethod()
1956 mirror::ObjectArray<mirror::StackTraceElement>* ClassLinker::AllocStackTraceElementArray( in AllocStackTraceElementArray()
1958 return mirror::ObjectArray<mirror::StackTraceElement>::Alloc( in AllocStackTraceElementArray()
1962 mirror::Class* ClassLinker::EnsureResolved(Thread* self, const char* descriptor, in EnsureResolved()
1963 mirror::Class* klass) { in EnsureResolved()
1974 Handle<mirror::Class> h_class(hs.NewHandle(klass)); in EnsureResolved()
1975 ObjectLock<mirror::Class> lock(self, h_class); in EnsureResolved()
1993 HandleWrapper<mirror::Class> h_class(hs.NewHandleWrapper(&klass)); in EnsureResolved()
1994 ObjectLock<mirror::Class> lock(self, h_class); in EnsureResolved()
1998 h_class->SetStatus(mirror::Class::kStatusError, self); in EnsureResolved()
2031 mirror::Class* ClassLinker::FindClassInPathClassLoader(ScopedObjectAccessAlreadyRunnable& soa, in FindClassInPathClassLoader()
2034 Handle<mirror::ClassLoader> class_loader) { in FindClassInPathClassLoader()
2036 soa.Decode<mirror::Class*>(WellKnownClasses::dalvik_system_PathClassLoader) || in FindClassInPathClassLoader()
2038 soa.Decode<mirror::Class*>(WellKnownClasses::java_lang_BootClassLoader)) { in FindClassInPathClassLoader()
2044 mirror::Class* klass = LookupClass(descriptor, hash, nullptr); in FindClassInPathClassLoader()
2048 klass = DefineClass(self, descriptor, hash, NullHandle<mirror::ClassLoader>(), *pair.first, in FindClassInPathClassLoader()
2060 Handle<mirror::ArtField> cookie_field = in FindClassInPathClassLoader()
2062 Handle<mirror::ArtField> dex_file_field = in FindClassInPathClassLoader()
2065 mirror::Object* dex_path_list = in FindClassInPathClassLoader()
2071 mirror::Object* dex_elements_obj = in FindClassInPathClassLoader()
2077 Handle<mirror::ObjectArray<mirror::Object>> dex_elements = in FindClassInPathClassLoader()
2078 hs.NewHandle(dex_elements_obj->AsObjectArray<mirror::Object>()); in FindClassInPathClassLoader()
2080 mirror::Object* element = dex_elements->GetWithoutChecks(i); in FindClassInPathClassLoader()
2085 mirror::Object* dex_file = dex_file_field->GetObject(element); in FindClassInPathClassLoader()
2099 mirror::Class* klass = DefineClass(self, descriptor, hash, class_loader, *dex_file, in FindClassInPathClassLoader()
2117 mirror::Class* ClassLinker::FindClass(Thread* self, const char* descriptor, in FindClass()
2118 Handle<mirror::ClassLoader> class_loader) { in FindClass()
2129 mirror::Class* klass = LookupClass(descriptor, hash, class_loader.Get()); in FindClass()
2140 return DefineClass(self, descriptor, hash, NullHandle<mirror::ClassLoader>(), *pair.first, in FindClass()
2146 mirror::Throwable* pre_allocated = Runtime::Current()->GetPreAllocatedNoClassDefFoundError(); in FindClass()
2162 return DefineClass(self, descriptor, hash, NullHandle<mirror::ClassLoader>(), *pair.first, in FindClass()
2179 mirror::Class* klass = FindClassInPathClassLoader(soa, self, descriptor, hash, class_loader); in FindClass()
2210 return soa.Decode<mirror::Class*>(result.get()); in FindClass()
2218 mirror::Class* ClassLinker::DefineClass(Thread* self, const char* descriptor, size_t hash, in DefineClass()
2219 Handle<mirror::ClassLoader> class_loader, in DefineClass()
2223 auto klass = hs.NewHandle<mirror::Class>(nullptr); in DefineClass()
2258 ObjectLock<mirror::Class> lock(self, klass); in DefineClass()
2263 klass->SetStatus(mirror::Class::kStatusError, self); in DefineClass()
2270 mirror::Class* existing = InsertClass(descriptor, klass.Get(), hash); in DefineClass()
2282 klass->SetStatus(mirror::Class::kStatusError, self); in DefineClass()
2290 auto interfaces = hs.NewHandle<mirror::ObjectArray<mirror::Class>>(nullptr); in DefineClass()
2292 mirror::Class* new_class = nullptr; in DefineClass()
2296 klass->SetStatus(mirror::Class::kStatusError, self); in DefineClass()
2304 Handle<mirror::Class> new_class_h(hs.NewHandle(new_class)); in DefineClass()
2342 return mirror::Class::ComputeClassSize(false, 0, num_32, num_64, num_ref); in SizeOfClassWithoutEmbeddedTables()
2392 bool ClassLinker::FindOatMethodFor(mirror::ArtMethod* method, OatFile::OatMethod* oat_method) { in FindOatMethodFor()
2396 mirror::Class* declaring_class = method->GetDeclaringClass(); in FindOatMethodFor()
2434 const void* ClassLinker::GetQuickOatCodeFor(mirror::ArtMethod* method) { in GetQuickOatCodeFor()
2463 const void* ClassLinker::GetPortableOatCodeFor(mirror::ArtMethod* method, in GetPortableOatCodeFor()
2493 const void* ClassLinker::GetOatMethodQuickCodeFor(mirror::ArtMethod* method) { in GetOatMethodQuickCodeFor()
2526 mirror::ArtMethod* method, const void* quick_code, const void* portable_code) in NeedsInterpreter()
2547 void ClassLinker::FixupStaticTrampolines(mirror::Class* klass) { in FixupStaticTrampolines()
2577 mirror::ArtMethod* method = klass->GetDirectMethod(method_index); in FixupStaticTrampolines()
2627 void ClassLinker::LinkCode(Handle<mirror::ArtMethod> method, const OatFile::OatClass* oat_class, in LinkCode()
2729 Handle<mirror::Class> klass, in LoadClass()
2730 mirror::ClassLoader* class_loader) { in LoadClass()
2733 CHECK_EQ(mirror::Class::kStatusNotReady, klass->GetStatus()); in LoadClass()
2746 klass->SetStatus(mirror::Class::kStatusIdx, nullptr); in LoadClass()
2769 Handle<mirror::Class> klass, in LoadClassMembers()
2770 mirror::ClassLoader* class_loader, in LoadClassMembers()
2776 mirror::ObjectArray<mirror::ArtField>* statics = AllocArtFieldArray(self, it.NumStaticFields()); in LoadClassMembers()
2784 mirror::ObjectArray<mirror::ArtField>* fields = in LoadClassMembers()
2794 Handle<mirror::ArtField> sfield(hs.NewHandle(AllocArtField(self))); in LoadClassMembers()
2804 Handle<mirror::ArtField> ifield(hs.NewHandle(AllocArtField(self))); in LoadClassMembers()
2816 mirror::ObjectArray<mirror::ArtMethod>* directs = in LoadClassMembers()
2826 mirror::ObjectArray<mirror::ArtMethod>* virtuals = in LoadClassMembers()
2839 Handle<mirror::ArtMethod> method(hs.NewHandle(LoadMethod(self, dex_file, it, klass))); in LoadClassMembers()
2859 Handle<mirror::ArtMethod> method(hs.NewHandle(LoadMethod(self, dex_file, it, klass))); in LoadClassMembers()
2873 Handle<mirror::Class> klass, Handle<mirror::ArtField> dst) { in LoadField()
2880 mirror::ArtMethod* ClassLinker::LoadMethod(Thread* self, const DexFile& dex_file, in LoadMethod()
2882 Handle<mirror::Class> klass) { in LoadMethod()
2887 mirror::ArtMethod* dst = AllocArtMethod(self); in LoadMethod()
2947 Handle<mirror::DexCache> dex_cache(hs.NewHandle(AllocDexCache(self, dex_file))); in AppendToBootClassPath()
2954 Handle<mirror::DexCache> dex_cache) { in AppendToBootClassPath()
2963 mirror::DexCache* dex_cache = GetDexCache(i); in IsDexFileRegisteredLocked()
2977 Handle<mirror::DexCache> dex_cache) { in RegisterDexFileLocked()
2982 dex_caches_.push_back(GcRoot<mirror::DexCache>(dex_cache.Get())); in RegisterDexFileLocked()
3002 Handle<mirror::DexCache> dex_cache(hs.NewHandle(AllocDexCache(self, dex_file))); in RegisterDexFile()
3015 Handle<mirror::DexCache> dex_cache) { in RegisterDexFile()
3020 mirror::DexCache* ClassLinker::FindDexCache(const DexFile& dex_file) { in FindDexCache()
3024 mirror::DexCache* dex_cache = GetDexCache(i); in FindDexCache()
3032 mirror::DexCache* dex_cache = GetDexCache(i); in FindDexCache()
3039 mirror::DexCache* dex_cache = GetDexCache(i); in FindDexCache()
3046 void ClassLinker::FixupDexCaches(mirror::ArtMethod* resolution_method) { in FixupDexCaches()
3049 mirror::DexCache* dex_cache = GetDexCache(i); in FixupDexCaches()
3054 mirror::Class* ClassLinker::CreatePrimitiveClass(Thread* self, Primitive::Type type) { in CreatePrimitiveClass()
3055 mirror::Class* klass = AllocClass(self, mirror::Class::PrimitiveClassSize()); in CreatePrimitiveClass()
3062 mirror::Class* ClassLinker::InitializePrimitiveClass(mirror::Class* primitive_class, in InitializePrimitiveClass()
3068 Handle<mirror::Class> h_class(hs.NewHandle(primitive_class)); in InitializePrimitiveClass()
3069 ObjectLock<mirror::Class> lock(self, h_class); in InitializePrimitiveClass()
3072 primitive_class->SetStatus(mirror::Class::kStatusInitialized, self); in InitializePrimitiveClass()
3074 mirror::Class* existing = InsertClass(descriptor, primitive_class, in InitializePrimitiveClass()
3093 mirror::Class* ClassLinker::CreateArrayClass(Thread* self, const char* descriptor, size_t hash, in CreateArrayClass()
3094 Handle<mirror::ClassLoader> class_loader) { in CreateArrayClass()
3098 Handle<mirror::Class> component_type(hs.NewHandle(FindClass(self, descriptor + 1, class_loader))); in CreateArrayClass()
3133 mirror::Class* new_class = LookupClass(descriptor, hash, component_type->GetClassLoader()); in CreateArrayClass()
3147 auto new_class = hs.NewHandle<mirror::Class>(nullptr); in CreateArrayClass()
3169 new_class.Assign(AllocClass(self, mirror::Array::ClassSize())); in CreateArrayClass()
3175 ObjectLock<mirror::Class> lock(self, new_class); // Must hold lock on object when initializing. in CreateArrayClass()
3177 mirror::Class* java_lang_Object = GetClassRoot(kJavaLangObject); in CreateArrayClass()
3182 new_class->SetStatus(mirror::Class::kStatusLoaded, self); in CreateArrayClass()
3184 StackHandleScope<mirror::Class::kImtSize> hs(self, in CreateArrayClass()
3188 new_class->SetStatus(mirror::Class::kStatusInitialized, self); in CreateArrayClass()
3206 mirror::IfTable* array_iftable = array_iftable_.Read(); in CreateArrayClass()
3222 mirror::Class* existing = InsertClass(descriptor, new_class.Get(), hash); in CreateArrayClass()
3235 mirror::Class* ClassLinker::FindPrimitiveClass(char type) { in FindPrimitiveClass()
3263 mirror::Class* ClassLinker::InsertClass(const char* descriptor, mirror::Class* klass, in InsertClass()
3266 mirror::DexCache* dex_cache = klass->GetDexCache(); in InsertClass()
3275 mirror::Class* existing = LookupClassFromTableLocked(descriptor, klass->GetClassLoader(), hash); in InsertClass()
3289 class_table_.InsertWithHash(GcRoot<mirror::Class>(klass), hash); in InsertClass()
3291 new_class_roots_.push_back(GcRoot<mirror::Class>(klass)); in InsertClass()
3296 mirror::Class* ClassLinker::UpdateClass(const char* descriptor, mirror::Class* klass, in UpdateClass()
3306 mirror::Class* existing = existing_it->Read(); in UpdateClass()
3309 CHECK_EQ(klass->GetStatus(), mirror::Class::kStatusResolving) << descriptor; in UpdateClass()
3324 *existing_it = GcRoot<mirror::Class>(klass); in UpdateClass()
3326 new_class_roots_.push_back(GcRoot<mirror::Class>(klass)); in UpdateClass()
3332 bool ClassLinker::RemoveClass(const char* descriptor, mirror::ClassLoader* class_loader) { in RemoveClass()
3348 mirror::Class* ClassLinker::LookupClass(const char* descriptor, size_t hash, in LookupClass()
3349 mirror::ClassLoader* class_loader) { in LookupClass()
3352 mirror::Class* result = LookupClassFromTableLocked(descriptor, class_loader, hash); in LookupClass()
3361 mirror::Class* result = LookupClassFromImage(descriptor); in LookupClass()
3377 mirror::Class* ClassLinker::LookupClassFromTableLocked(const char* descriptor, in LookupClassFromTableLocked()
3378 mirror::ClassLoader* class_loader, in LookupClassFromTableLocked()
3391 static mirror::ObjectArray<mirror::DexCache>* GetImageDexCaches() in GetImageDexCaches()
3395 mirror::Object* root = image->GetImageHeader().GetImageRoot(ImageHeader::kDexCaches); in GetImageDexCaches()
3396 return root->AsObjectArray<mirror::DexCache>(); in GetImageDexCaches()
3407 mirror::ObjectArray<mirror::DexCache>* dex_caches = GetImageDexCaches(); in MoveImageClassesToClassTable()
3410 mirror::DexCache* dex_cache = dex_caches->Get(i); in MoveImageClassesToClassTable()
3411 mirror::ObjectArray<mirror::Class>* types = dex_cache->GetResolvedTypes(); in MoveImageClassesToClassTable()
3413 mirror::Class* klass = types->Get(j); in MoveImageClassesToClassTable()
3418 mirror::Class* existing = LookupClassFromTableLocked(descriptor, nullptr, hash); in MoveImageClassesToClassTable()
3423 class_table_.Insert(GcRoot<mirror::Class>(klass)); in MoveImageClassesToClassTable()
3425 new_class_roots_.push_back(GcRoot<mirror::Class>(klass)); in MoveImageClassesToClassTable()
3442 mirror::Class* ClassLinker::LookupClassFromImage(const char* descriptor) { in LookupClassFromImage()
3446 mirror::ObjectArray<mirror::DexCache>* dex_caches = GetImageDexCaches(); in LookupClassFromImage()
3448 mirror::DexCache* dex_cache = dex_caches->Get(i); in LookupClassFromImage()
3457 mirror::Class* klass = dex_cache->GetResolvedType(type_idx); in LookupClassFromImage()
3469 void ClassLinker::LookupClasses(const char* descriptor, std::vector<mirror::Class*>& result) { in LookupClasses()
3483 for (mirror::Class* k : result) { in LookupClasses()
3484 class_table_.Insert(GcRoot<mirror::Class>(k)); in LookupClasses()
3499 pre_zygote_class_table_.Insert(GcRoot<mirror::Class>(result[i])); in LookupClasses()
3503 void ClassLinker::VerifyClass(Handle<mirror::Class> klass) { in VerifyClass()
3506 ObjectLock<mirror::Class> lock(self, klass); in VerifyClass()
3524 if (klass->GetStatus() == mirror::Class::kStatusResolved) { in VerifyClass()
3525 klass->SetStatus(mirror::Class::kStatusVerifying, self); in VerifyClass()
3527 CHECK_EQ(klass->GetStatus(), mirror::Class::kStatusRetryVerificationAtRuntime) in VerifyClass()
3530 klass->SetStatus(mirror::Class::kStatusVerifyingAtRuntime, self); in VerifyClass()
3535 klass->SetStatus(mirror::Class::kStatusVerified, self); in VerifyClass()
3542 Handle<mirror::Class> super(hs.NewHandle(klass->GetSuperClass())); in VerifyClass()
3545 ObjectLock<mirror::Class> lock(self, super); in VerifyClass()
3556 Handle<mirror::Throwable> cause(hs.NewHandle(self->GetException(nullptr))); in VerifyClass()
3568 klass->SetStatus(mirror::Class::kStatusError, self); in VerifyClass()
3575 mirror::Class::Status oat_file_class_status(mirror::Class::kStatusNotReady); in VerifyClass()
3577 if (oat_file_class_status == mirror::Class::kStatusError) { in VerifyClass()
3583 klass->SetStatus(mirror::Class::kStatusError, self); in VerifyClass()
3606 klass->SetStatus(mirror::Class::kStatusVerified, self); in VerifyClass()
3608 CHECK_EQ(super->GetStatus(), mirror::Class::kStatusRetryVerificationAtRuntime); in VerifyClass()
3609 klass->SetStatus(mirror::Class::kStatusRetryVerificationAtRuntime, self); in VerifyClass()
3619 klass->SetStatus(mirror::Class::kStatusRetryVerificationAtRuntime, self); in VerifyClass()
3621 klass->SetStatus(mirror::Class::kStatusVerified, self); in VerifyClass()
3633 klass->SetStatus(mirror::Class::kStatusError, self); in VerifyClass()
3646 void ClassLinker::EnsurePreverifiedMethods(Handle<mirror::Class> klass) { in EnsurePreverifiedMethods()
3653 bool ClassLinker::VerifyClassUsingOatFile(const DexFile& dex_file, mirror::Class* klass, in VerifyClassUsingOatFile()
3654 mirror::Class::Status& oat_file_class_status) { in VerifyClassUsingOatFile()
3688 if (oat_file_class_status == mirror::Class::kStatusVerified || in VerifyClassUsingOatFile()
3689 oat_file_class_status == mirror::Class::kStatusInitialized) { in VerifyClassUsingOatFile()
3692 if (oat_file_class_status == mirror::Class::kStatusRetryVerificationAtRuntime) { in VerifyClassUsingOatFile()
3712 if (oat_file_class_status == mirror::Class::kStatusError) { in VerifyClassUsingOatFile()
3717 if (oat_file_class_status == mirror::Class::kStatusNotReady) { in VerifyClassUsingOatFile()
3733 Handle<mirror::Class> klass) { in ResolveClassExceptionHandlerTypes()
3743 mirror::ArtMethod* method) { in ResolveMethodExceptionHandlerTypes()
3761 mirror::Class* exception_type = linker->ResolveType(iterator.GetHandlerTypeIndex(), method); in ResolveMethodExceptionHandlerTypes()
3772 static void CheckProxyConstructor(mirror::ArtMethod* constructor);
3773 static void CheckProxyMethod(Handle<mirror::ArtMethod> method,
3774 Handle<mirror::ArtMethod> prototype);
3776 mirror::Class* ClassLinker::CreateProxyClass(ScopedObjectAccessAlreadyRunnable& soa, jstring name, in CreateProxyClass()
3781 Handle<mirror::Class> klass(hs.NewHandle( in CreateProxyClass()
3782 AllocClass(self, GetClassRoot(kJavaLangClass), sizeof(mirror::Class)))); in CreateProxyClass()
3788 klass->SetObjectSize(sizeof(mirror::Proxy)); in CreateProxyClass()
3791 klass->SetClassLoader(soa.Decode<mirror::ClassLoader*>(loader)); in CreateProxyClass()
3793 klass->SetName(soa.Decode<mirror::String*>(name)); in CreateProxyClass()
3794 mirror::Class* proxy_class = GetClassRoot(kJavaLangReflectProxy); in CreateProxyClass()
3796 klass->SetStatus(mirror::Class::kStatusIdx, self); in CreateProxyClass()
3800 mirror::ObjectArray<mirror::ArtField>* sfields = AllocArtFieldArray(self, 2); in CreateProxyClass()
3809 Handle<mirror::ArtField> interfaces_sfield(hs.NewHandle(AllocArtField(self))); in CreateProxyClass()
3819 Handle<mirror::ArtField> throws_sfield(hs.NewHandle(AllocArtField(self))); in CreateProxyClass()
3831 mirror::ObjectArray<mirror::ArtMethod>* directs = AllocArtMethodArray(self, 1); in CreateProxyClass()
3837 mirror::ArtMethod* constructor = CreateProxyConstructor(self, klass, proxy_class); in CreateProxyClass()
3847 soa.Decode<mirror::ObjectArray<mirror::ArtMethod>*>(methods)->GetLength(); in CreateProxyClass()
3849 mirror::ObjectArray<mirror::ArtMethod>* virtuals = AllocArtMethodArray(self, in CreateProxyClass()
3859 mirror::ObjectArray<mirror::ArtMethod>* decoded_methods = in CreateProxyClass()
3860 soa.Decode<mirror::ObjectArray<mirror::ArtMethod>*>(methods); in CreateProxyClass()
3861 Handle<mirror::ArtMethod> prototype(hs.NewHandle(decoded_methods->Get(i))); in CreateProxyClass()
3862 mirror::ArtMethod* clone = CreateProxyMethod(self, klass, prototype); in CreateProxyClass()
3871 klass->SetStatus(mirror::Class::kStatusLoaded, self); // Now effectively in the loaded state. in CreateProxyClass()
3875 mirror::Class* new_class = nullptr; in CreateProxyClass()
3878 ObjectLock<mirror::Class> resolution_lock(self, klass); in CreateProxyClass()
3880 Handle<mirror::ObjectArray<mirror::Class> > h_interfaces( in CreateProxyClass()
3881 hs.NewHandle(soa.Decode<mirror::ObjectArray<mirror::Class>*>(interfaces))); in CreateProxyClass()
3883 klass->SetStatus(mirror::Class::kStatusError, self); in CreateProxyClass()
3894 soa.Decode<mirror::ObjectArray<mirror::Class>*>(interfaces)); in CreateProxyClass()
3897 soa.Decode<mirror::ObjectArray<mirror::ObjectArray<mirror::Class> >*>(throws)); in CreateProxyClass()
3901 ObjectLock<mirror::Class> initialization_lock(self, klass); in CreateProxyClass()
3902 klass->SetStatus(mirror::Class::kStatusInitialized, self); in CreateProxyClass()
3911 mirror::ObjectArray<mirror::ArtMethod>* decoded_methods = in CreateProxyClass()
3912 soa.Decode<mirror::ObjectArray<mirror::ArtMethod>*>(methods); in CreateProxyClass()
3913 Handle<mirror::ArtMethod> prototype(hs.NewHandle(decoded_methods->Get(i))); in CreateProxyClass()
3914 Handle<mirror::ArtMethod> virtual_method(hs.NewHandle(klass->GetVirtualMethod(i))); in CreateProxyClass()
3918 mirror::String* decoded_name = soa.Decode<mirror::String*>(name); in CreateProxyClass()
3928 soa.Decode<mirror::ObjectArray<mirror::Class>*>(interfaces)); in CreateProxyClass()
3930 soa.Decode<mirror::ObjectArray<mirror::ObjectArray<mirror::Class>>*>(throws)); in CreateProxyClass()
3932 mirror::Class* existing = InsertClass(descriptor.c_str(), klass.Get(), in CreateProxyClass()
3938 std::string ClassLinker::GetDescriptorForProxy(mirror::Class* proxy_class) { in GetDescriptorForProxy()
3940 mirror::String* name = proxy_class->GetName(); in GetDescriptorForProxy()
3945 mirror::ArtMethod* ClassLinker::FindMethodForProxy(mirror::Class* proxy_class, in FindMethodForProxy()
3946 mirror::ArtMethod* proxy_method) { in FindMethodForProxy()
3950 mirror::DexCache* dex_cache = nullptr; in FindMethodForProxy()
3954 mirror::DexCache* a_dex_cache = GetDexCache(i); in FindMethodForProxy()
3963 mirror::ArtMethod* resolved_method = dex_cache->GetResolvedMethod(method_idx); in FindMethodForProxy()
3969 mirror::ArtMethod* ClassLinker::CreateProxyConstructor(Thread* self, in CreateProxyConstructor()
3970 Handle<mirror::Class> klass, in CreateProxyConstructor()
3971 mirror::Class* proxy_class) { in CreateProxyConstructor()
3973 mirror::ObjectArray<mirror::ArtMethod>* proxy_direct_methods = in CreateProxyConstructor()
3976 mirror::ArtMethod* proxy_constructor = proxy_direct_methods->Get(2); in CreateProxyConstructor()
3983 mirror::ArtMethod* constructor = down_cast<mirror::ArtMethod*>(proxy_constructor->Clone(self)); in CreateProxyConstructor()
3994 static void CheckProxyConstructor(mirror::ArtMethod* constructor) in CheckProxyConstructor()
4003 mirror::ArtMethod* ClassLinker::CreateProxyMethod(Thread* self, in CreateProxyMethod()
4004 Handle<mirror::Class> klass, in CreateProxyMethod()
4005 Handle<mirror::ArtMethod> prototype) { in CreateProxyMethod()
4012 mirror::ArtMethod* method = down_cast<mirror::ArtMethod*>(prototype->Clone(self)); in CreateProxyMethod()
4034 static void CheckProxyMethod(Handle<mirror::ArtMethod> method, Handle<mirror::ArtMethod> prototype) in CheckProxyMethod()
4055 static bool CanWeInitializeClass(mirror::Class* klass, bool can_init_statics, in CanWeInitializeClass()
4063 mirror::ArtMethod* clinit = klass->FindClassInitializer(); in CanWeInitializeClass()
4077 mirror::Class* super_class = klass->GetSuperClass(); in CanWeInitializeClass()
4093 bool ClassLinker::InitializeClass(Handle<mirror::Class> klass, bool can_init_statics, in InitializeClass()
4112 ObjectLock<mirror::Class> lock(self, klass); in InitializeClass()
4136 CHECK_EQ(klass->GetStatus(), mirror::Class::kStatusRetryVerificationAtRuntime); in InitializeClass()
4149 if (klass->GetStatus() == mirror::Class::kStatusInitializing) { in InitializeClass()
4164 klass->SetStatus(mirror::Class::kStatusError, self); in InitializeClass()
4168 CHECK_EQ(klass->GetStatus(), mirror::Class::kStatusVerified) << PrettyClass(klass.Get()); in InitializeClass()
4173 klass->SetStatus(mirror::Class::kStatusInitializing, self); in InitializeClass()
4180 mirror::Class* super_class = klass->GetSuperClass(); in InitializeClass()
4185 Handle<mirror::Class> handle_scope_super(hs.NewHandle(super_class)); in InitializeClass()
4196 ObjectLock<mirror::Class> lock(self, klass); in InitializeClass()
4198 klass->SetStatus(mirror::Class::kStatusError, self); in InitializeClass()
4210 Handle<mirror::ClassLoader> class_loader(hs.NewHandle(klass->GetClassLoader())); in InitializeClass()
4211 Handle<mirror::DexCache> dex_cache(hs.NewHandle(klass->GetDexCache())); in InitializeClass()
4216 mirror::ArtField* field = klass->GetStaticField(i); in InitializeClass()
4218 mirror::ArtField* resolved_field = dex_cache->GetResolvedField(field_idx); in InitializeClass()
4232 SafeMap<uint32_t, mirror::ArtField*> field_map; in InitializeClass()
4244 mirror::ArtMethod* clinit = klass->FindClassInitializer(); in InitializeClass()
4255 ObjectLock<mirror::Class> lock(self, klass); in InitializeClass()
4259 klass->SetStatus(mirror::Class::kStatusError, self); in InitializeClass()
4269 klass->SetStatus(mirror::Class::kStatusInitialized, self); in InitializeClass()
4282 bool ClassLinker::WaitForInitializeClass(Handle<mirror::Class> klass, Thread* self, in WaitForInitializeClass()
4283 ObjectLock<mirror::Class>& lock) in WaitForInitializeClass()
4295 klass->SetStatus(mirror::Class::kStatusError, self); in WaitForInitializeClass()
4299 if (klass->GetStatus() == mirror::Class::kStatusInitializing) { in WaitForInitializeClass()
4302 if (klass->GetStatus() == mirror::Class::kStatusVerified && Runtime::Current()->IsCompiler()) { in WaitForInitializeClass()
4322 bool ClassLinker::ValidateSuperClassDescriptors(Handle<mirror::Class> klass) { in ValidateSuperClassDescriptors()
4328 MethodHelper mh(hs.NewHandle<mirror::ArtMethod>(nullptr)); in ValidateSuperClassDescriptors()
4329 MethodHelper super_mh(hs.NewHandle<mirror::ArtMethod>(nullptr)); in ValidateSuperClassDescriptors()
4367 bool ClassLinker::EnsureInitialized(Handle<mirror::Class> c, bool can_init_fields, in EnsureInitialized()
4387 mirror::Class* c, in ConstructFieldMap()
4388 SafeMap<uint32_t, mirror::ArtField*>& field_map) { in ConstructFieldMap()
4392 Handle<mirror::DexCache> dex_cache(hs.NewHandle(c->GetDexCache())); in ConstructFieldMap()
4393 Handle<mirror::ClassLoader> class_loader(hs.NewHandle(c->GetClassLoader())); in ConstructFieldMap()
4400 void ClassLinker::FixupTemporaryDeclaringClass(mirror::Class* temp_class, mirror::Class* new_class)… in FixupTemporaryDeclaringClass()
4401 mirror::ObjectArray<mirror::ArtField>* fields = new_class->GetIFields(); in FixupTemporaryDeclaringClass()
4419 mirror::ObjectArray<mirror::ArtMethod>* methods = new_class->GetDirectMethods(); in FixupTemporaryDeclaringClass()
4438 bool ClassLinker::LinkClass(Thread* self, const char* descriptor, Handle<mirror::Class> klass, in LinkClass()
4439 Handle<mirror::ObjectArray<mirror::Class>> interfaces, in LinkClass()
4440 mirror::Class** new_class) { in LinkClass()
4441 CHECK_EQ(mirror::Class::kStatusLoaded, klass->GetStatus()); in LinkClass()
4446 StackHandleScope<mirror::Class::kImtSize> imt_handle_scope( in LinkClass()
4460 CHECK_EQ(mirror::Class::kStatusLoaded, klass->GetStatus()); in LinkClass()
4473 klass->SetStatus(mirror::Class::kStatusResolved, self); in LinkClass()
4481 klass->SetStatus(mirror::Class::kStatusError, self); in LinkClass()
4487 auto new_class_h = hs.NewHandleWrapper<mirror::Class>(new_class); in LinkClass()
4488 ObjectLock<mirror::Class> lock(self, new_class_h); in LinkClass()
4492 mirror::Class* existing = UpdateClass(descriptor, new_class_h.Get(), in LinkClass()
4498 klass->SetStatus(mirror::Class::kStatusRetired, self); in LinkClass()
4500 CHECK_EQ(new_class_h->GetStatus(), mirror::Class::kStatusResolving); in LinkClass()
4503 new_class_h->SetStatus(mirror::Class::kStatusResolved, self); in LinkClass()
4621 static bool CheckSuperClassChange(Handle<mirror::Class> klass, in CheckSuperClassChange()
4624 mirror::Class* super_class) in CheckSuperClassChange()
4673 bool ClassLinker::LoadSuperAndInterfaces(Handle<mirror::Class> klass, const DexFile& dex_file) { in LoadSuperAndInterfaces()
4674 CHECK_EQ(mirror::Class::kStatusIdx, klass->GetStatus()); in LoadSuperAndInterfaces()
4678 mirror::Class* super_class = ResolveType(dex_file, super_class_idx, klass.Get()); in LoadSuperAndInterfaces()
4702 mirror::Class* interface = ResolveType(dex_file, idx, klass.Get()); in LoadSuperAndInterfaces()
4718 klass->SetStatus(mirror::Class::kStatusLoaded, nullptr); in LoadSuperAndInterfaces()
4722 bool ClassLinker::LinkSuperClass(Handle<mirror::Class> klass) { in LinkSuperClass()
4724 mirror::Class* super = klass->GetSuperClass(); in LinkSuperClass()
4782 bool ClassLinker::LinkMethods(Thread* self, Handle<mirror::Class> klass, in LinkMethods()
4783 Handle<mirror::ObjectArray<mirror::Class>> interfaces, in LinkMethods()
4784 StackHandleScope<mirror::Class::kImtSize>* out_imt) { in LinkMethods()
4806 explicit MethodNameAndSignatureComparator(mirror::ArtMethod* method)
4820 bool HasSameNameAndSignature(mirror::ArtMethod* other) in HasSameNameAndSignature()
4851 LinkVirtualHashTable(Handle<mirror::Class> klass, size_t hash_size, uint32_t* hash_table) in LinkVirtualHashTable()
4856 mirror::ArtMethod* local_method = klass_->GetVirtualMethodDuringLinking(virtual_method_index); in Add()
4881 mirror::ArtMethod* virtual_method = in FindAndRemove()
4902 Handle<mirror::Class> klass_;
4910 bool ClassLinker::LinkVirtualMethods(Thread* self, Handle<mirror::Class> klass) { in LinkVirtualMethods()
4916 Handle<mirror::Class> super_class(hs.NewHandle(klass->GetSuperClass())); in LinkVirtualMethods()
4917 Handle<mirror::ObjectArray<mirror::ArtMethod>> vtable; in LinkVirtualMethods()
4932 mirror::ObjectArray<mirror::ArtMethod>* super_vtable = super_class->GetVTable(); in LinkVirtualMethods()
4973 mirror::ArtMethod* super_method = vtable->GetWithoutChecks(j); in LinkVirtualMethods()
4978 mirror::ArtMethod* virtual_method = klass->GetVirtualMethodDuringLinking(hash_index); in LinkVirtualMethods()
4999 mirror::ArtMethod* local_method = klass->GetVirtualMethodDuringLinking(i); in LinkVirtualMethods()
5030 mirror::ObjectArray<mirror::ArtMethod>* vtable = AllocArtMethodArray(self, num_virtual_methods); in LinkVirtualMethods()
5036 mirror::ArtMethod* virtual_method = klass->GetVirtualMethodDuringLinking(i); in LinkVirtualMethods()
5045 bool ClassLinker::LinkInterfaceMethods(Thread* self, Handle<mirror::Class> klass, in LinkInterfaceMethods()
5046 Handle<mirror::ObjectArray<mirror::Class>> interfaces, in LinkInterfaceMethods()
5047 StackHandleScope<mirror::Class::kImtSize>* out_imt) { in LinkInterfaceMethods()
5064 mirror::IfTable* super_iftable = klass->GetSuperClass()->GetIfTable(); in LinkInterfaceMethods()
5079 mirror::Class* interface = have_interfaces ? in LinkInterfaceMethods()
5080 interfaces->GetWithoutChecks(i) : mirror::Class::GetDirectInterface(self, klass, i); in LinkInterfaceMethods()
5091 Handle<mirror::IfTable> iftable(hs.NewHandle(AllocIfTable(self, ifcount))); in LinkInterfaceMethods()
5097 mirror::IfTable* super_iftable = klass->GetSuperClass()->GetIfTable(); in LinkInterfaceMethods()
5099 mirror::Class* super_interface = super_iftable->GetInterface(i); in LinkInterfaceMethods()
5106 mirror::Class* interface = have_interfaces ? interfaces->Get(i) : in LinkInterfaceMethods()
5107 mirror::Class::GetDirectInterface(self, klass, i); in LinkInterfaceMethods()
5111 mirror::Class* existing_interface = iftable->GetInterface(j); in LinkInterfaceMethods()
5122 mirror::Class* super_interface = interface->GetIfTable()->GetInterface(j); in LinkInterfaceMethods()
5125 mirror::Class* existing_interface = iftable->GetInterface(k); in LinkInterfaceMethods()
5140 iftable.Assign(down_cast<mirror::IfTable*>(iftable->CopyOf(self, idx * mirror::IfTable::kMax))); in LinkInterfaceMethods()
5154 Handle<mirror::ObjectArray<mirror::ArtMethod>> vtable( in LinkInterfaceMethods()
5156 std::vector<mirror::ArtMethod*> miranda_list; in LinkInterfaceMethods()
5160 mirror::Class* super_class = klass->GetSuperClass(); in LinkInterfaceMethods()
5163 for (size_t i = 0; i < mirror::Class::kImtSize; ++i) { in LinkInterfaceMethods()
5168 mirror::IfTable* if_table = super_class->GetIfTable(); in LinkInterfaceMethods()
5169 mirror::ArtMethod* conflict_method = runtime->GetImtConflictMethod(); in LinkInterfaceMethods()
5172 mirror::Class* interface = iftable->GetInterface(i); in LinkInterfaceMethods()
5179 mirror::ObjectArray<mirror::ArtMethod>* method_array = if_table->GetMethodArray(i); in LinkInterfaceMethods()
5181 mirror::ArtMethod* method = method_array->GetWithoutChecks(j); in LinkInterfaceMethods()
5185 mirror::ArtMethod* interface_method = interface->GetVirtualMethod(j); in LinkInterfaceMethods()
5186 uint32_t imt_index = interface_method->GetDexMethodIndex() % mirror::Class::kImtSize; in LinkInterfaceMethods()
5187 mirror::ArtMethod* imt_ref = out_imt->GetReference(imt_index)->AsArtMethod(); in LinkInterfaceMethods()
5203 Handle<mirror::ObjectArray<mirror::ArtMethod>> method_array; in LinkInterfaceMethods()
5204 Handle<mirror::ObjectArray<mirror::ArtMethod>> input_array; in LinkInterfaceMethods()
5206 mirror::IfTable* if_table = klass->GetSuperClass()->GetIfTable(); in LinkInterfaceMethods()
5211 AsObjectArray<mirror::ArtMethod>()); in LinkInterfaceMethods()
5232 mirror::ArtMethod* interface_method = iftable->GetInterface(i)->GetVirtualMethod(j); in LinkInterfaceMethods()
5245 mirror::ArtMethod* vtable_method = input_array->GetWithoutChecks(k); in LinkInterfaceMethods()
5246 mirror::ArtMethod* vtable_method_for_name_comparison = in LinkInterfaceMethods()
5260 uint32_t imt_index = interface_method->GetDexMethodIndex() % mirror::Class::kImtSize; in LinkInterfaceMethods()
5261 mirror::ArtMethod* imt_ref = out_imt->GetReference(imt_index)->AsArtMethod(); in LinkInterfaceMethods()
5262 mirror::ArtMethod* conflict_method = runtime->GetImtConflictMethod(); in LinkInterfaceMethods()
5281 mirror::ArtMethod* miranda_method = nullptr; in LinkInterfaceMethods()
5282 for (mirror::ArtMethod* mir_method : miranda_list) { in LinkInterfaceMethods()
5291 miranda_method = down_cast<mirror::ArtMethod*>(interface_method->Clone(self)); in LinkInterfaceMethods()
5307 mirror::ObjectArray<mirror::ArtMethod>* virtuals; in LinkInterfaceMethods()
5327 mirror::ArtMethod* method = miranda_list[i]; in LinkInterfaceMethods()
5339 mirror::ObjectArray<mirror::ArtMethod>* vtable = klass->GetVTableDuringLinking(); in LinkInterfaceMethods()
5348 bool ClassLinker::LinkInstanceFields(Handle<mirror::Class> klass) { in LinkInstanceFields()
5353 bool ClassLinker::LinkStaticFields(Handle<mirror::Class> klass, size_t* class_size) { in LinkStaticFields()
5362 bool operator()(mirror::ArtField* field1, mirror::ArtField* field2) in operator ()()
5392 bool ClassLinker::LinkFields(Handle<mirror::Class> klass, bool is_static, size_t* class_size) { in LinkFields()
5396 mirror::ObjectArray<mirror::ArtField>* fields = in LinkFields()
5404 mirror::Class* super_class = klass->GetSuperClass(); in LinkFields()
5416 std::deque<mirror::ArtField*> grouped_and_sorted_fields; in LinkFields()
5418 mirror::ArtField* f = fields->Get(i); in LinkFields()
5429 mirror::ArtField* field = grouped_and_sorted_fields.front(); in LinkFields()
5439 sizeof(mirror::HeapReference<mirror::Object>)); in LinkFields()
5447 mirror::ArtField* field = grouped_and_sorted_fields[i]; in LinkFields()
5461 sizeof(mirror::HeapReference<mirror::Object>)); in LinkFields()
5469 mirror::ArtField* field = grouped_and_sorted_fields.front(); in LinkFields()
5499 klass->SetObjectSize(mirror::ArtMethod::InstanceSize(sizeof(void*))); in LinkFields()
5502 DCHECK_GE(size, sizeof(mirror::Object)) << klass->GetDescriptor(&temp); in LinkFields()
5521 sizeof(mirror::HeapReference<mirror::Object>)); in LinkFields()
5524 mirror::ArtField* field = fields->Get(i); in LinkFields()
5530 << field->GetField32(MemberOffset(mirror::ArtField::OffsetOffset())); in LinkFields()
5533 mirror::ArtField* prev_field = fields->Get(i - 1u); in LinkFields()
5549 CHECK_LT(type_size, sizeof(mirror::HeapReference<mirror::Object>)); in LinkFields()
5552 CHECK(!IsAligned<sizeof(mirror::HeapReference<mirror::Object>)>(offset.Uint32Value())); in LinkFields()
5557 sizeof(mirror::HeapReference<mirror::Object>)); in LinkFields()
5566 void ClassLinker::CreateReferenceInstanceOffsets(Handle<mirror::Class> klass) { in CreateReferenceInstanceOffsets()
5568 mirror::Class* super_class = klass->GetSuperClass(); in CreateReferenceInstanceOffsets()
5580 void ClassLinker::CreateReferenceStaticOffsets(Handle<mirror::Class> klass) { in CreateReferenceStaticOffsets()
5584 void ClassLinker::CreateReferenceOffsets(Handle<mirror::Class> klass, bool is_static, in CreateReferenceOffsets()
5598 ? mirror::Class::ComputeClassSize( in CreateReferenceOffsets()
5600 : sizeof(mirror::Class); in CreateReferenceOffsets()
5601 uint32_t start_bit = start_offset / sizeof(mirror::HeapReference<mirror::Object>); in CreateReferenceOffsets()
5617 mirror::String* ClassLinker::ResolveString(const DexFile& dex_file, uint32_t string_idx, in ResolveString()
5618 Handle<mirror::DexCache> dex_cache) { in ResolveString()
5620 mirror::String* resolved = dex_cache->GetResolvedString(string_idx); in ResolveString()
5626 mirror::String* string = intern_table_->InternStrong(utf16_length, utf8_data); in ResolveString()
5631 mirror::Class* ClassLinker::ResolveType(const DexFile& dex_file, uint16_t type_idx, in ResolveType()
5632 mirror::Class* referrer) { in ResolveType()
5634 Handle<mirror::DexCache> dex_cache(hs.NewHandle(referrer->GetDexCache())); in ResolveType()
5635 Handle<mirror::ClassLoader> class_loader(hs.NewHandle(referrer->GetClassLoader())); in ResolveType()
5639 mirror::Class* ClassLinker::ResolveType(const DexFile& dex_file, uint16_t type_idx, in ResolveType()
5640 Handle<mirror::DexCache> dex_cache, in ResolveType()
5641 Handle<mirror::ClassLoader> class_loader) { in ResolveType()
5643 mirror::Class* resolved = dex_cache->GetResolvedType(type_idx); in ResolveType()
5658 Handle<mirror::Throwable> cause(hs.NewHandle(self->GetException(nullptr))); in ResolveType()
5672 mirror::ArtMethod* ClassLinker::ResolveMethod(const DexFile& dex_file, uint32_t method_idx, in ResolveMethod()
5673 Handle<mirror::DexCache> dex_cache, in ResolveMethod()
5674 Handle<mirror::ClassLoader> class_loader, in ResolveMethod()
5675 Handle<mirror::ArtMethod> referrer, in ResolveMethod()
5679 mirror::ArtMethod* resolved = dex_cache->GetResolvedMethod(method_idx); in ResolveMethod()
5685 mirror::Class* klass = ResolveType(dex_file, method_id.class_idx_, dex_cache, class_loader); in ResolveMethod()
5757 mirror::Class* methods_class = resolved->GetDeclaringClass(); in ResolveMethod()
5758 mirror::Class* referring_class = referrer->GetDeclaringClass(); in ResolveMethod()
5825 mirror::ArtField* ClassLinker::ResolveField(const DexFile& dex_file, uint32_t field_idx, in ResolveField()
5826 Handle<mirror::DexCache> dex_cache, in ResolveField()
5827 Handle<mirror::ClassLoader> class_loader, in ResolveField()
5830 mirror::ArtField* resolved = dex_cache->GetResolvedField(field_idx); in ResolveField()
5837 Handle<mirror::Class> klass( in ResolveField()
5845 resolved = mirror::Class::FindStaticField(self, klass, dex_cache.Get(), field_idx); in ResolveField()
5854 resolved = mirror::Class::FindStaticField(self, klass, name, type); in ResolveField()
5867 mirror::ArtField* ClassLinker::ResolveFieldJLS(const DexFile& dex_file, in ResolveFieldJLS()
5869 Handle<mirror::DexCache> dex_cache, in ResolveFieldJLS()
5870 Handle<mirror::ClassLoader> class_loader) { in ResolveFieldJLS()
5872 mirror::ArtField* resolved = dex_cache->GetResolvedField(field_idx); in ResolveFieldJLS()
5879 Handle<mirror::Class> klass( in ResolveFieldJLS()
5889 resolved = mirror::Class::FindField(self, klass, name, type); in ResolveFieldJLS()
5898 const char* ClassLinker::MethodShorty(uint32_t method_idx, mirror::ArtMethod* referrer, in MethodShorty()
5900 mirror::Class* declaring_class = referrer->GetDeclaringClass(); in MethodShorty()
5901 mirror::DexCache* dex_cache = declaring_class->GetDexCache(); in MethodShorty()
5913 std::vector<mirror::Class*> all_classes; in DumpAllClasses()
5916 for (GcRoot<mirror::Class>& it : class_table_) { in DumpAllClasses()
5952 void ClassLinker::SetClassRoot(ClassRoot class_root, mirror::Class* klass) { in SetClassRoot()
5958 mirror::ObjectArray<mirror::Class>* class_roots = class_roots_.Read(); in SetClassRoot()
5964 std::size_t ClassLinker::ClassDescriptorHashEquals::operator()(const GcRoot<mirror::Class>& root) in operator ()()
5970 bool ClassLinker::ClassDescriptorHashEquals::operator()(const GcRoot<mirror::Class>& a, in operator ()()
5971 const GcRoot<mirror::Class>& b) { in operator ()()
5980 const std::pair<const char*, mirror::ClassLoader*>& element) const { in operator ()()
5985 const GcRoot<mirror::Class>& a, const std::pair<const char*, mirror::ClassLoader*>& b) { in operator ()()
5992 bool ClassLinker::ClassDescriptorHashEquals::operator()(const GcRoot<mirror::Class>& a, in operator ()()
6001 bool ClassLinker::MayBeCalledWithDirectCodePointer(mirror::ArtMethod* m) { in MayBeCalledWithDirectCodePointer()