Fix combined checksum calculation to use isa.
Bug: 28054110
(cherry-picked from commit 8bbda8e683a1933755d0b8a68fed620cd63148ee)
Change-Id: I228db6ea1003e4e70d6a5fa7345d56409e70bd87
diff --git a/runtime/oat_file_assistant.cc b/runtime/oat_file_assistant.cc
index f0768f9..78e372a 100644
--- a/runtime/oat_file_assistant.cc
+++ b/runtime/oat_file_assistant.cc
@@ -940,18 +940,27 @@
}
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;
}