Index: src/serialize.cc |
diff --git a/src/serialize.cc b/src/serialize.cc |
index e2ff9f42f3d79a52c0301f43c164f4bbd91fa1a4..b8bf4205acdec8a6757d7c6a37d3232222d53648 100644 |
--- a/src/serialize.cc |
+++ b/src/serialize.cc |
@@ -2556,7 +2556,9 @@ SerializedCodeData::SerializedCodeData(const List<byte>& payload, |
int reservation_size = reservations.length() * kInt32Size; |
int num_stub_keys = stub_keys->length(); |
int stub_keys_size = stub_keys->length() * kInt32Size; |
- int size = kHeaderSize + reservation_size + stub_keys_size + payload.length(); |
+ int payload_offset = kHeaderSize + reservation_size + stub_keys_size; |
+ int padded_payload_offset = POINTER_SIZE_ALIGN(payload_offset); |
+ int size = kHeaderSize + padded_payload_offset + payload.length(); |
// Allocate backing store and create result data. |
AllocateData(size); |
@@ -2584,9 +2586,11 @@ SerializedCodeData::SerializedCodeData(const List<byte>& payload, |
CopyBytes(data_ + kHeaderSize + reservation_size, |
reinterpret_cast<byte*>(stub_keys->begin()), stub_keys_size); |
+ memset(data_ + payload_offset, 0, padded_payload_offset - payload_offset); |
+ |
// Copy serialized data. |
- CopyBytes(data_ + kHeaderSize + reservation_size + stub_keys_size, |
- payload.begin(), static_cast<size_t>(payload.length())); |
+ CopyBytes(data_ + padded_payload_offset, payload.begin(), |
+ static_cast<size_t>(payload.length())); |
} |
@@ -2623,8 +2627,10 @@ Vector<const SerializedData::Reservation> SerializedCodeData::Reservations() |
Vector<const byte> SerializedCodeData::Payload() const { |
int reservations_size = GetHeaderValue(kReservationsOffset) * kInt32Size; |
int code_stubs_size = GetHeaderValue(kNumCodeStubKeysOffset) * kInt32Size; |
- const byte* payload = |
- data_ + kHeaderSize + reservations_size + code_stubs_size; |
+ int payload_offset = kHeaderSize + reservations_size + code_stubs_size; |
+ int padded_payload_offset = POINTER_SIZE_ALIGN(payload_offset); |
+ const byte* payload = data_ + padded_payload_offset; |
+ DCHECK(IsAligned(reinterpret_cast<intptr_t>(payload), kPointerAlignment)); |
int length = GetHeaderValue(kPayloadLengthOffset); |
DCHECK_EQ(data_ + size_, payload + length); |
return Vector<const byte>(payload, length); |