Index: runtime/bin/main.cc |
diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc |
index 21fde137d62be90016eece862e7baf3ff78f0e70..13737c156018230ec1d2e28d6ef2522aeb9c953c 100644 |
--- a/runtime/bin/main.cc |
+++ b/runtime/bin/main.cc |
@@ -1240,14 +1240,23 @@ static bool ReadAppSnapshotBlobs(const char* script_name, |
return false; |
} |
+ int64_t vmisolate_size = header[1]; |
int64_t vmisolate_position = |
Utils::RoundUp(file->Position(), kAppSnapshotPageSize); |
+ int64_t isolate_size = header[2]; |
int64_t isolate_position = |
- Utils::RoundUp(vmisolate_position + header[1], kAppSnapshotPageSize); |
- int64_t rodata_position = |
- Utils::RoundUp(isolate_position + header[2], kAppSnapshotPageSize); |
- int64_t instructions_position = |
- Utils::RoundUp(rodata_position + header[3], kAppSnapshotPageSize); |
+ Utils::RoundUp(vmisolate_position + vmisolate_size, kAppSnapshotPageSize); |
+ int64_t rodata_size = header[3]; |
+ int64_t rodata_position = isolate_position + isolate_size; |
+ if (rodata_size != 0) { |
+ rodata_position = Utils::RoundUp(rodata_position, kAppSnapshotPageSize); |
+ } |
+ int64_t instructions_size = header[4]; |
+ int64_t instructions_position = rodata_position + rodata_size; |
+ if (instructions_size != 0) { |
+ instructions_position = |
+ Utils::RoundUp(instructions_position, kAppSnapshotPageSize); |
+ } |
void* read_only_buffer = |
file->Map(File::kReadOnly, vmisolate_position, |
@@ -1261,14 +1270,14 @@ static bool ReadAppSnapshotBlobs(const char* script_name, |
(vmisolate_position - vmisolate_position); |
*isolate_buffer = reinterpret_cast<const uint8_t*>(read_only_buffer) + |
(isolate_position - vmisolate_position); |
- if (header[3] == 0) { |
+ if (rodata_size == 0) { |
*rodata_buffer = NULL; |
} else { |
*rodata_buffer = reinterpret_cast<const uint8_t*>(read_only_buffer) + |
(rodata_position - vmisolate_position); |
} |
- if (header[4] == 0) { |
+ if (instructions_size == 0) { |
*instructions_buffer = NULL; |
} else { |
*instructions_buffer = reinterpret_cast<const uint8_t*>( |