Home | History | Annotate | Download | only in verifier

Lines Matching refs:dex_file

26 #include "dex/dex_file-inl.h"
38 for (const DexFile* dex_file : dex_files) {
39 DCHECK(GetDexFileDeps(*dex_file) == nullptr);
41 dex_deps_.emplace(dex_file, std::move(deps));
51 for (const DexFile* dex_file : dex_files) {
52 DexFileDeps* my_deps = GetDexFileDeps(*dex_file);
53 const DexFileDeps& other_deps = *other.GetDexFileDeps(*dex_file);
66 VerifierDeps::DexFileDeps* VerifierDeps::GetDexFileDeps(const DexFile& dex_file) {
67 auto it = dex_deps_.find(&dex_file);
71 const VerifierDeps::DexFileDeps* VerifierDeps::GetDexFileDeps(const DexFile& dex_file) const {
72 auto it = dex_deps_.find(&dex_file);
92 dex::StringIndex VerifierDeps::GetClassDescriptorStringId(const DexFile& dex_file,
99 if (dex_cache->GetDexFile() == &dex_file) {
103 const DexFile::TypeId& type_id = dex_file.GetTypeId(class_def->class_idx_);
106 CHECK_EQ(GetIdFromString(dex_file, klass->GetDescriptor(&temp)), type_id.descriptor_idx_);
112 return GetIdFromString(dex_file, klass->GetDescriptor(&temp));
116 static dex::StringIndex TryGetClassDescriptorStringId(const DexFile& dex_file,
121 const DexFile::TypeId& type_id = dex_file.GetTypeId(type_idx);
124 if (strcmp(dex_file.GetTypeDescriptor(type_id),
132 dex::StringIndex VerifierDeps::GetMethodDeclaringClassStringId(const DexFile& dex_file,
140 dex_file,
141 dex_file.GetMethodId(dex_method_index).class_idx_,
145 DCHECK_EQ(GetClassDescriptorStringId(dex_file, method->GetDeclaringClass()), string_id);
148 return GetClassDescriptorStringId(dex_file, method->GetDeclaringClass());
151 dex::StringIndex VerifierDeps::GetFieldDeclaringClassStringId(const DexFile& dex_file,
159 dex_file,
160 dex_file.GetFieldId(dex_field_idx).class_idx_,
164 DCHECK_EQ(GetClassDescriptorStringId(dex_file, field->GetDeclaringClass()), string_id);
167 return GetClassDescriptorStringId(dex_file, field->GetDeclaringClass());
202 dex::StringIndex VerifierDeps::GetIdFromString(const DexFile& dex_file, const std::string& str) {
203 const DexFile::StringId* string_id = dex_file.FindStringId(str.c_str());
206 return dex_file.GetIndexForStringId(*string_id);
215 DexFileDeps* deps = singleton->GetDexFileDeps(dex_file);
218 uint32_t num_ids_in_dex = dex_file.NumStringIds();
235 DCHECK_EQ(str, singleton->GetStringFromId(dex_file, new_id));
240 std::string VerifierDeps::GetStringFromId(const DexFile& dex_file, dex::StringIndex string_id)
242 uint32_t num_ids_in_dex = dex_file.NumStringIds();
244 return std::string(dex_file.StringDataByIdx(string_id));
246 const DexFileDeps* deps = GetDexFileDeps(dex_file);
269 const DexFile* dex_file = dex_cache->GetDexFile();
270 DCHECK(dex_file != nullptr);
272 // Test if the `dex_deps_` contains an entry for `dex_file`. If not, the dex
275 return (GetDexFileDeps(*dex_file) == nullptr);
278 void VerifierDeps::AddClassResolution(const DexFile& dex_file,
281 DexFileDeps* dex_deps = GetDexFileDeps(dex_file);
296 void VerifierDeps::AddFieldResolution(const DexFile& dex_file,
299 DexFileDeps* dex_deps = GetDexFileDeps(dex_file);
313 GetFieldDeclaringClassStringId(dex_file,
318 void VerifierDeps::AddMethodResolution(const DexFile& dex_file,
321 DexFileDeps* dex_deps = GetDexFileDeps(dex_file);
335 GetMethodDeclaringClassStringId(dex_file, method_idx, method));
393 void VerifierDeps::AddAssignability(const DexFile& dex_file,
438 AddAssignability(dex_file,
451 DexFileDeps* dex_deps = GetDexFileDeps(dex_file);
487 dex::StringIndex destination_id = GetClassDescriptorStringId(dex_file, destination);
488 dex::StringIndex source_id = GetClassDescriptorStringId(dex_file, source);
497 void VerifierDeps::MaybeRecordVerificationStatus(const DexFile& dex_file,
507 DexFileDeps* dex_deps = thread_deps->GetDexFileDeps(dex_file);
512 void VerifierDeps::MaybeRecordClassResolution(const DexFile& dex_file,
517 thread_deps->AddClassResolution(dex_file, type_idx, klass);
521 void VerifierDeps::MaybeRecordFieldResolution(const DexFile& dex_file,
526 thread_deps->AddFieldResolution(dex_file, field_idx, field);
530 void VerifierDeps::MaybeRecordMethodResolution(const DexFile& dex_file,
535 thread_deps->AddMethodResolution(dex_file, method_idx, method);
539 void VerifierDeps::MaybeRecordAssignability(const DexFile& dex_file,
546 thread_deps->AddAssignability(dex_file, destination, source, is_strict, is_assignable);
695 for (const DexFile* dex_file : dex_files) {
696 const DexFileDeps& deps = *GetDexFileDeps(*dex_file);
718 for (const DexFile* dex_file : dex_files) {
719 DexFileDeps* deps = GetDexFileDeps(*dex_file);
769 const DexFile& dex_file = *dep.first;
772 << dex_file.GetLocation()
783 << GetStringFromId(dex_file, entry.GetSource())
785 << GetStringFromId(dex_file, entry.GetDestination())
791 << GetStringFromId(dex_file, entry.GetSource())
793 << GetStringFromId(dex_file, entry.GetDestination())
799 << dex_file.StringByTypeIdx(entry.GetDexTypeIndex())
806 const DexFile::FieldId& field_id = dex_file.GetFieldId(entry.GetDexFieldIndex());
808 << dex_file.GetFieldDeclaringClassDescriptor(field_id) << "->"
809 << dex_file.GetFieldName(field_id) << ":"
810 << dex_file.GetFieldTypeDescriptor(field_id)
817 << GetStringFromId(dex_file, entry.GetDeclaringClassIndex())
824 const DexFile::MethodId& method_id = dex_file.GetMethodId(method.GetDexMethodIndex());
826 << dex_file.GetMethodDeclaringClassDescriptor(method_id) << "->"
827 << dex_file.GetMethodName(method_id)
828 << dex_file.GetMethodSignature(method_id).ToString()
835 << GetStringFromId(dex_file, method.GetDeclaringClassIndex())
843 << dex_file.StringByTypeIdx(type_index)
875 const DexFile& dex_file,
885 const std::string& destination_desc = GetStringFromId(dex_file, entry.GetDestination());
888 const std::string& source_desc = GetStringFromId(dex_file, entry.GetSource());
916 const DexFile& dex_file,
923 const char* descriptor = dex_file.StringByTypeIdx(entry.GetDexTypeIndex());
949 static std::string GetFieldDescription(const DexFile& dex_file, uint32_t index) {
950 const DexFile::FieldId& field_id = dex_file.GetFieldId(index);
951 return std::string(dex_file.GetFieldDeclaringClassDescriptor(field_id))
953 + dex_file.GetFieldName(field_id)
955 + dex_file.GetFieldTypeDescriptor(field_id);
959 const DexFile& dex_file,
966 const DexFile::FieldId& field_id = dex_file.GetFieldId(entry.GetDexFieldIndex());
967 StringPiece name(dex_file.StringDataByIdx(field_id.name_idx_));
968 StringPiece type(dex_file.StringDataByIdx(dex_file.GetTypeId(field_id.type_idx_).descriptor_idx_));
972 ? GetStringFromId(dex_file, entry.GetDeclaringClassIndex())
973 : dex_file.StringByTypeIdx(field_id.class_idx_);
987 << GetFieldDescription(dex_file, entry.GetDexFieldIndex());
991 << GetFieldDescription(dex_file, entry.GetDexFieldIndex())
997 << GetFieldDescription(dex_file, entry.GetDexFieldIndex())
1004 << GetFieldDescription(dex_file, entry.GetDexFieldIndex());
1011 static std::string GetMethodDescription(const DexFile& dex_file, uint32_t index) {
1012 const DexFile::MethodId& method_id = dex_file.GetMethodId(index);
1013 return std::string(dex_file.GetMethodDeclaringClassDescriptor(method_id))
1015 + dex_file.GetMethodName(method_id)
1016 + dex_file.GetMethodSignature(method_id).ToString();
1020 const DexFile& dex_file,
1027 const DexFile::MethodId& method_id = dex_file.GetMethodId(entry.GetDexMethodIndex());
1029 const char* name = dex_file.GetMethodName(method_id);
1030 const Signature signature = dex_file.GetMethodSignature(method_id);
1034 ? GetStringFromId(dex_file, entry.GetDeclaringClassIndex())
1035 : dex_file.StringByTypeIdx(method_id.class_idx_);
1055 << GetMethodDescription(dex_file, entry.GetDexMethodIndex());
1059 << GetMethodDescription(dex_file, entry.GetDexMethodIndex())
1068 << GetMethodDescription(dex_file, entry.GetDexMethodIndex())
1079 << GetMethodDescription(dex_file, entry.GetDexMethodIndex());
1087 const DexFile& dex_file,
1091 class_loader, dex_file, deps.assignable_types_, /* expected_assignability */ true, self);
1093 class_loader, dex_file, deps.unassignable_types_, /* expected_assignability */ false, self);
1095 result = result && VerifyClasses(class_loader, dex_file, deps.classes_, self);
1096 result = result && VerifyFields(class_loader, dex_file, deps.fields_, self);
1098 result = result && VerifyMethods(class_loader, dex_file, deps.methods_, self);