| 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);
|
|
|