Index: src/snapshot/serialize.h |
diff --git a/src/snapshot/serialize.h b/src/snapshot/serialize.h |
index 089c323b7de7db8588fc666e43e27a1528cdf4d9..2a426a94f587de9e239fc87950afaec447e12f86 100644 |
--- a/src/snapshot/serialize.h |
+++ b/src/snapshot/serialize.h |
@@ -324,12 +324,14 @@ class SerializerDeserializer: public ObjectVisitor { |
// 0x07 Unused (including 0x27, 0x47, 0x67). |
// 0x08..0x0c Reference to previous object from space. |
kBackref = 0x08, |
+ // 0x0d Unused (including 0x2d, 0x4d, 0x6d). |
// 0x0e Unused (including 0x2e, 0x4e, 0x6e). |
// 0x0f Unused (including 0x2f, 0x4f, 0x6f). |
// 0x10..0x14 Reference to previous object from space after skip. |
kBackrefWithSkip = 0x10, |
+ // 0x15 Unused (including 0x35, 0x55, 0x75). |
// 0x16 Unused (including 0x36, 0x56, 0x76). |
- // 0x17 Unused (including 0x37, 0x57, 0x77). |
+ // 0x17 Misc (including 0x37, 0x57, 0x77). |
// 0x18 Root array item. |
kRootArray = 0x18, |
// 0x19 Object in the partial snapshot cache. |
@@ -384,14 +386,18 @@ class SerializerDeserializer: public ObjectVisitor { |
// is an indication that the snapshot and the VM do not fit together. |
// Examine the build process for architecture, version or configuration |
// mismatches. |
- static const int kSynchronize = 0x5d; |
+ static const int kSynchronize = 0x17; |
// Used for the source code of the natives, which is in the executable, but |
// is referred to from external strings in the snapshot. |
- static const int kNativesStringResource = 0x5e; |
+ static const int kNativesStringResource = 0x37; |
// Raw data of variable length. |
- static const int kVariableRawData = 0x7d; |
+ static const int kVariableRawData = 0x57; |
// Repeats of variable length. |
- static const int kVariableRepeat = 0x7e; |
+ static const int kVariableRepeat = 0x77; |
+ // Alignment prefixes 0x7d..0x7f |
+ static const int kAlignmentPrefix = 0x7d; |
+ |
+ // 0x5d..0x5f unused |
// ---------- byte code range 0x80..0xff ---------- |
// First 32 root array items. |
@@ -515,7 +521,8 @@ class Deserializer: public SerializerDeserializer { |
magic_number_(data->GetMagicNumber()), |
external_reference_table_(NULL), |
deserialized_large_objects_(0), |
- deserializing_user_code_(false) { |
+ deserializing_user_code_(false), |
+ next_alignment_(kWordAligned) { |
DecodeReservation(data->Reservations()); |
} |
@@ -602,6 +609,8 @@ class Deserializer: public SerializerDeserializer { |
bool deserializing_user_code_; |
+ AllocationAlignment next_alignment_; |
+ |
DISALLOW_COPY_AND_ASSIGN(Deserializer); |
}; |
@@ -706,6 +715,9 @@ class Serializer : public SerializerDeserializer { |
void PutBackReference(HeapObject* object, BackReference reference); |
+ // Emit alignment prefix if necessary, return required padding space in bytes. |
+ int PutAlignmentPrefix(HeapObject* object); |
+ |
// Returns true if the object was successfully serialized. |
bool SerializeKnownObject(HeapObject* obj, HowToCode how_to_code, |
WhereToPoint where_to_point, int skip); |