diff options
| -rw-r--r-- | runtime/oat_file_assistant.cc | 17 | ||||
| -rw-r--r-- | runtime/oat_file_assistant.h | 2 |
2 files changed, 14 insertions, 5 deletions
diff --git a/runtime/oat_file_assistant.cc b/runtime/oat_file_assistant.cc index f0768f9ff1..78e372ad02 100644 --- a/runtime/oat_file_assistant.cc +++ b/runtime/oat_file_assistant.cc @@ -940,18 +940,27 @@ const OatFileAssistant::ImageInfo* OatFileAssistant::GetImageInfo() { } image_info_load_succeeded_ = (!image_spaces.empty()); - combined_image_checksum_ = CalculateCombinedImageChecksum(); + combined_image_checksum_ = CalculateCombinedImageChecksum(isa_); } return image_info_load_succeeded_ ? &cached_image_info_ : nullptr; } // TODO: Use something better than xor. -uint32_t OatFileAssistant::CalculateCombinedImageChecksum() { +uint32_t OatFileAssistant::CalculateCombinedImageChecksum(InstructionSet isa) { uint32_t checksum = 0; std::vector<gc::space::ImageSpace*> image_spaces = Runtime::Current()->GetHeap()->GetBootImageSpaces(); - for (gc::space::ImageSpace* image_space : image_spaces) { - checksum ^= image_space->GetImageHeader().GetOatChecksum(); + if (isa == kRuntimeISA) { + for (gc::space::ImageSpace* image_space : image_spaces) { + checksum ^= image_space->GetImageHeader().GetOatChecksum(); + } + } else { + for (gc::space::ImageSpace* image_space : image_spaces) { + std::string location = image_space->GetImageLocation(); + std::unique_ptr<ImageHeader> image_header( + gc::space::ImageSpace::ReadImageHeaderOrDie(location.c_str(), isa)); + checksum ^= image_header->GetOatChecksum(); + } } return checksum; } diff --git a/runtime/oat_file_assistant.h b/runtime/oat_file_assistant.h index 63b1573faa..d3228deac7 100644 --- a/runtime/oat_file_assistant.h +++ b/runtime/oat_file_assistant.h @@ -279,7 +279,7 @@ class OatFileAssistant { static bool DexFilenameToOdexFilename(const std::string& location, InstructionSet isa, std::string* odex_filename, std::string* error_msg); - static uint32_t CalculateCombinedImageChecksum(); + static uint32_t CalculateCombinedImageChecksum(InstructionSet isa = kRuntimeISA); private: struct ImageInfo { |