Fix combined checksum calculation to use isa.
Bug: 28054110
Change-Id: Ifcd1b0c4549a22bf4181f8acad222da05ac9f1ce
diff --git a/runtime/oat_file_assistant.cc b/runtime/oat_file_assistant.cc
index de30dc8..d389dd1 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;
}
diff --git a/runtime/oat_file_assistant.h b/runtime/oat_file_assistant.h
index 63b1573..d3228de 100644
--- a/runtime/oat_file_assistant.h
+++ b/runtime/oat_file_assistant.h
@@ -279,7 +279,7 @@
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 {