Home | History | Annotate | Download | only in runtime

Lines Matching full:dex_file

36 #include "dex_file-inl.h"
328 const DexFile* dex_file = boot_class_path[i];
329 CHECK(dex_file != NULL);
330 AppendToBootClassPath(*dex_file);
672 const OatFile* ClassLinker::FindOpenedOatFileForDexFile(const DexFile& dex_file) {
674 return FindOpenedOatFileFromDexLocation(dex_file.GetLocation(), dex_file.GetLocationChecksum());
813 const DexFile* dex_file = FindDexFileInOatLocation(dex_location,
816 if (dex_file != NULL) {
817 return dex_file;
931 const DexFile* dex_file = VerifyAndOpenDexFileFromOatFile(oat_file.release(),
934 if (dex_file != NULL) {
935 return dex_file;
948 const DexFile* dex_file = VerifyAndOpenDexFileFromOatFile(oat_file.release(),
951 if (dex_file != NULL) {
952 return dex_file;
1046 const DexFile* dex_file = oat_dex_file->OpenDexFile();
1047 if (dex_file == NULL) {
1052 CHECK_EQ(dex_file->GetLocationChecksum(), oat_dex_file->GetDexFileLocationChecksum());
1054 AppendToBootClassPath(*dex_file, dex_cache);
1177 mirror::DexCache* ClassLinker::AllocDexCache(Thread* self, const DexFile& dex_file) {
1187 location(self, intern_table_->InternStrong(dex_file.GetLocation().c_str()));
1192 strings(self, AllocStringArray(self, dex_file.NumStringIds()));
1197 types(self, AllocClassArray(self, dex_file.NumTypeIds()));
1202 methods(self, AllocArtMethodArray(self, dex_file.NumMethodIds()));
1207 fields(self, AllocArtFieldArray(self, dex_file.NumFieldIds()));
1213 AllocObjectArray<mirror::StaticStorageBase>(self, dex_file.NumTypeIds()));
1218 dex_cache->Init(&dex_file,
1384 const DexFile& dex_file,
1404 klass.reset(AllocClass(self, SizeOfClass(dex_file, dex_class_def)));
1407 klass.reset(AllocClass(self, SizeOfClass(dex_file, dex_class_def)));
1413 klass->SetDexCache(FindDexCache(dex_file));
1414 LoadClass(dex_file, dex_class_def, klass, class_loader);
1433 if (!LoadSuperAndInterfaces(klass, dex_file)) {
1465 size_t ClassLinker::SizeOfClass(const DexFile& dex_file,
1467 const byte* class_data = dex_file.GetClassData(dex_class_def);
1472 for (ClassDataItemIterator it(dex_file, class_data); it.HasNextStaticField(); it.Next()) {
1473 const DexFile::FieldId& field_id = dex_file.GetFieldId(it.GetMemberIndex());
1474 const char* descriptor = dex_file.GetFieldTypeDescriptor(field_id);
1505 const OatFile::OatClass* ClassLinker::GetOatClass(const DexFile& dex_file, uint16_t class_def_idx) {
1507 const OatFile* oat_file = FindOpenedOatFileForDexFile(dex_file);
1508 CHECK(oat_file != NULL) << dex_file.GetLocation();
1509 uint dex_location_checksum = dex_file.GetLocationChecksum();
1510 const OatFile::OatDexFile* oat_dex_file = oat_file->GetOatDexFile(dex_file.GetLocation(),
1512 CHECK(oat_dex_file != NULL) << dex_file.GetLocation();
1514 CHECK(oat_class != NULL) << dex_file.GetLocation() << " " << class_def_idx;
1518 static uint32_t GetOatMethodIndexFromMethodIndex(const DexFile& dex_file, uint16_t class_def_idx,
1520 const DexFile::ClassDef& class_def = dex_file.GetClassDef(class_def_idx);
1521 const byte* class_data = dex_file.GetClassData(class_def);
1523 ClassDataItemIterator it(dex_file, class_data);
1548 LOG(FATAL) << "Failed to find method index " << method_idx << " in " << dex_file.GetLocation();
1605 const void* ClassLinker::GetOatCodeFor(const DexFile& dex_file, uint16_t class_def_idx,
1607 UniquePtr<const OatFile::OatClass> oat_class(GetOatClass(dex_file, class_def_idx));
1609 uint32_t oat_method_idx = GetOatMethodIndexFromMethodIndex(dex_file, class_def_idx, method_idx);
1636 const DexFile& dex_file = kh.GetDexFile();
1637 const byte* class_data = dex_file.GetClassData(*dex_class_def);
1646 UniquePtr<const OatFile::OatClass> oat_class(GetOatClass(dex_file, klass->GetDexClassDefIndex()));
1648 ClassDataItemIterator it(dex_file, class_data);
1718 void ClassLinker::LoadClass(const DexFile& dex_file,
1725 const char* descriptor = dex_file.GetClassDescriptor(dex_class_def);
1737 klass->SetDexClassDefIndex(dex_file.GetIndexForClassDef(dex_class_def));
1741 const byte* class_data = dex_file.GetClassData(dex_class_def);
1745 ClassDataItemIterator it(dex_file, class_data);
1771 LoadField(dex_file, it, klass, sfield);
1780 LoadField(dex_file, it, klass, ifield);
1785 oat_class.reset(GetOatClass(dex_file, klass->GetDexClassDefIndex()));
1811 SirtRef<mirror::ArtMethod> method(self, LoadMethod(self, dex_file, it, klass));
1824 SirtRef<mirror::ArtMethod> method(self, LoadMethod(self, dex_file, it, klass));
1839 void ClassLinker::LoadField(const DexFile& /*dex_file*/, const ClassDataItemIterator& it,
1847 mirror::ArtMethod* ClassLinker::LoadMethod(Thread* self, const DexFile& dex_file,
1851 const DexFile::MethodId& method_id = dex_file.GetMethodId(dex_method_idx);
1852 StringPiece method_name(dex_file.GetMethodName(method_id));
1867 const DexFile::StringId* void_string_id = dex_file.FindStringId("V");
1870 dex_file.FindTypeId(dex_file.GetIndexForStringId(*void_string_id));
1874 dex_file.FindProtoId(dex_file.GetIndexForTypeId(*void_type_id), no_args);
1910 void ClassLinker::AppendToBootClassPath(const DexFile& dex_file) {
1912 SirtRef<mirror::DexCache> dex_cache(self, AllocDexCache(self, dex_file));
1913 CHECK(dex_cache.get() != NULL) << "Failed to allocate dex cache for " << dex_file.GetLocation();
1914 AppendToBootClassPath(dex_file, dex_cache);
1917 void ClassLinker::AppendToBootClassPath(const DexFile& dex_file, SirtRef<mirror::DexCache>& dex_cache) {
1918 CHECK(dex_cache.get() != NULL) << dex_file.GetLocation();
1919 boot_class_path_.push_back(&dex_file);
1920 RegisterDexFile(dex_file, dex_cache);
1923 bool ClassLinker::IsDexFileRegisteredLocked(const DexFile& dex_file) const {
1926 if (dex_caches_[i]->GetDexFile() == &dex_file) {
1933 bool ClassLinker::IsDexFileRegistered(const DexFile& dex_file) const {
1935 return IsDexFileRegisteredLocked(dex_file);
1938 void ClassLinker::RegisterDexFileLocked(const DexFile& dex_file, SirtRef<mirror::DexCache>& dex_cache) {
1940 CHECK(dex_cache.get() != NULL) << dex_file.GetLocation();
1941 CHECK(dex_cache->GetLocation()->Equals(dex_file.GetLocation()))
1942 << dex_cache->GetLocation()->ToModifiedUtf8() << " " << dex_file.GetLocation();
1944 dex_cache->SetDexFile(&dex_file);
1948 void ClassLinker::RegisterDexFile(const DexFile& dex_file) {
1952 if (IsDexFileRegisteredLocked(dex_file)) {
1959 SirtRef<mirror::DexCache> dex_cache(self, AllocDexCache(self, dex_file));
1960 CHECK(dex_cache.get() != NULL) << "Failed to allocate dex cache for " << dex_file.GetLocation();
1963 if (IsDexFileRegisteredLocked(dex_file)) {
1966 RegisterDexFileLocked(dex_file, dex_cache);
1970 void ClassLinker::RegisterDexFile(const DexFile& dex_file, SirtRef<mirror::DexCache>& dex_cache) {
1972 RegisterDexFileLocked(dex_file, dex_cache);
1975 mirror::DexCache* ClassLinker::FindDexCache(const DexFile& dex_file) const {
1980 if (dex_cache->GetDexFile() == &dex_file) {
1985 std::string location(dex_file.GetLocation());
2345 const DexFile* dex_file = dex_cache->GetDexFile();
2348 const DexFile::StringId* descriptor_string_id = dex_file->FindStringId(descriptor);
2351 dex_file->FindTypeId(dex_file->GetIndexForStringId(*descriptor_string_id));
2353 mirror::Class* klass = dex_cache->GetResolvedType(dex_file->GetIndexForTypeId(*type_id));
2362 const DexFile::StringId* string_id = dex_file->FindStringId(descriptor);
2365 dex_file->FindTypeId(dex_file->GetIndexForStringId(*string_id));
2367 uint16_t type_idx = dex_file->GetIndexForTypeId(*type_id);
2453 const DexFile& dex_file = *klass->GetDexCache()->GetDexFile();
2455 bool preverified = VerifyClassUsingOatFile(dex_file, klass, oat_file_class_status);
2480 ResolveClassExceptionHandlerTypes(dex_file, klass);
2522 bool ClassLinker::VerifyClassUsingOatFile(const DexFile& dex_file, mirror::Class* klass,
2541 const OatFile* oat_file = FindOpenedOatFileForDexFile(dex_file);
2548 CHECK(oat_file != NULL) << dex_file.GetLocation() << " " << PrettyClass(klass);
2549 uint dex_location_checksum = dex_file.GetLocationChecksum();
2550 const OatFile::OatDexFile* oat_dex_file = oat_file->GetOatDexFile(dex_file.GetLocation(),
2552 CHECK(oat_dex_file != NULL) << dex_file.GetLocation() << " " << PrettyClass(klass);
2557 << dex_file.GetLocation() << " " << PrettyClass(klass) << " " << descriptor;
2596 << " " << dex_file.GetLocation() << " " << PrettyClass(klass) << " " << descriptor;
2601 void ClassLinker::ResolveClassExceptionHandlerTypes(const DexFile& dex_file, mirror::Class* klass) {
2603 ResolveMethodExceptionHandlerTypes(dex_file, klass->GetDirectMethod(i));
2606 ResolveMethodExceptionHandlerTypes(dex_file, klass->GetVirtualMethod(i));
2610 void ClassLinker::ResolveMethodExceptionHandlerTypes(const DexFile& dex_file,
2613 const DexFile::CodeItem* code_item = dex_file.GetCodeItem(method->GetCodeItemOffset());
3040 const DexFile& dex_file = kh.GetDexFile();
3041 EncodedStaticFieldValueIterator it(dex_file, kh.GetDexCache(), klass->GetClassLoader(),
3047 ConstructFieldMap(dex_file, *dex_class_def, klass, field_map);
3181 const DexFile& dex_file = *method->GetDeclaringClass()->GetDexCache()->GetDexFile();
3183 dex_file.GetMethodPrototype(dex_file.GetMethodId(method->GetDexMethodIndex()));
3184 for (DexFileParameterIterator it(dex_file, proto_id); it.HasNext(); it.Next()) {
3197 const char* descriptor = dex_file.GetReturnTypeDescriptor(proto_id);
3241 void ClassLinker::ConstructFieldMap(const DexFile& dex_file, const DexFile::ClassDef& dex_class_def,
3244 const byte* class_data = dex_file.GetClassData(dex_class_def);
3245 ClassDataItemIterator it(dex_file, class_data);
3247 field_map.Put(i, ResolveField(dex_file, it.GetMemberIndex(), c->GetDexCache(), cl, true));
3273 bool ClassLinker::LoadSuperAndInterfaces(SirtRef<mirror::Class>& klass, const DexFile& dex_file) {
3275 const DexFile::ClassDef& class_def = dex_file.GetClassDef(klass->GetDexClassDefIndex());
3278 mirror::Class* super_class = ResolveType(dex_file, super_class_idx, klass.get());
3292 const DexFile::TypeList* interfaces = dex_file.GetInterfacesList(class_def);
3296 mirror::Class* interface = ResolveType(dex_file, idx, klass.get());
3957 mirror::String* ClassLinker::ResolveString(const DexFile& dex_file,
3964 const DexFile::StringId& string_id = dex_file.GetStringId(string_idx);
3965 int32_t utf16_length = dex_file.GetStringLength(string_id);
3966 const char* utf8_data = dex_file.GetStringData(string_id);
3972 mirror::Class* ClassLinker::ResolveType(const DexFile& dex_file,
3979 const char* descriptor = dex_file.StringByTypeIdx(type_idx);
4004 mirror::ArtMethod* ClassLinker::ResolveMethod(const DexFile& dex_file,
4017 const DexFile::MethodId& method_id = dex_file.GetMethodId(method_idx);
4018 mirror::Class* klass = ResolveType(dex_file, method_id.class_idx_, dex_cache, class_loader);
4043 const char* name = dex_file.StringDataByIdx(method_id.name_idx_);
4044 std::string signature(dex_file.CreateMethodSignature(method_id.proto_idx_, NULL));
4073 const char* name = dex_file.StringDataByIdx(method_id.name_idx_);
4074 std::string signature(dex_file.CreateMethodSignature(method_id.proto_idx_, NULL));
4151 mirror::ArtField* ClassLinker::ResolveField(const DexFile& dex_file,
4161 const DexFile::FieldId& field_id = dex_file.GetFieldId(field_idx);
4162 mirror::Class* klass = ResolveType(dex_file, field_id.class_idx_, dex_cache, class_loader);
4175 const char* name = dex_file.GetFieldName(field_id);
4176 const char* type = dex_file.GetFieldTypeDescriptor(field_id);
4191 mirror::ArtField* ClassLinker::ResolveFieldJLS(const DexFile& dex_file,
4200 const DexFile::FieldId& field_id = dex_file.GetFieldId(field_idx);
4201 mirror::Class* klass = ResolveType(dex_file, field_id.class_idx_, dex_cache, class_loader);
4207 const char* name = dex_file.GetFieldName(field_id);
4208 const char* type = dex_file.GetFieldTypeDescriptor(field_id);
4222 const DexFile& dex_file = *dex_cache->GetDexFile();
4223 const DexFile::MethodId& method_id = dex_file.GetMethodId(method_idx);
4224 return dex_file.GetMethodShorty(method_id, length);