diff options
Diffstat (limited to 'runtime/oat_file_assistant.cc')
| -rw-r--r-- | runtime/oat_file_assistant.cc | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/runtime/oat_file_assistant.cc b/runtime/oat_file_assistant.cc index a8f84a2bfa..6daade0648 100644 --- a/runtime/oat_file_assistant.cc +++ b/runtime/oat_file_assistant.cc @@ -461,6 +461,23 @@ bool OatFileAssistant::GivenOatFileIsOutOfDate(const OatFile& file) { } } + if (file.IsExtractOnly()) { + VLOG(oat) << "Oat file is extract-only. Image checksum test skipped."; + if (kIsDebugBuild) { + // Sanity check that no classes have compiled code. Does not test that + // the DEX code has not been quickened. + std::string error_msg; + for (const OatFile::OatDexFile* current : file.GetOatDexFiles()) { + const DexFile* const dex_file = current->OpenDexFile(&error_msg).release(); + DCHECK(dex_file != nullptr); + for (size_t i = 0, e = dex_file->NumClassDefs(); i < e; ++i) { + DCHECK_EQ(current->GetOatClass(i).GetType(), kOatClassNoneCompiled); + } + } + } + return false; + } + // Verify the image checksum const ImageInfo* image_info = GetImageInfo(); if (image_info == nullptr) { @@ -486,7 +503,10 @@ bool OatFileAssistant::GivenOatFileIsUpToDate(const OatFile& file) { return false; } - if (file.IsPic()) { + if (file.IsPic() || file.IsExtractOnly()) { + // Oat files compiled in PIC mode do not require relocation and extract-only + // oat files do not contain any compiled code. Skip the relocation test. + VLOG(oat) << "Oat relocation test skipped."; return true; } |