| Index: src/snapshot/serialize.cc
|
| diff --git a/src/snapshot/serialize.cc b/src/snapshot/serialize.cc
|
| index 096576f0a0e913b7aff318a6bb576bf6e7397779..cbd66ef79b1c7b8a09d819dabeeed989aa45ec0d 100644
|
| --- a/src/snapshot/serialize.cc
|
| +++ b/src/snapshot/serialize.cc
|
| @@ -54,8 +54,6 @@ ExternalReferenceTable::ExternalReferenceTable(Isolate* isolate) {
|
| "StackGuard::address_of_real_jslimit()");
|
| Add(ExternalReference::new_space_start(isolate).address(),
|
| "Heap::NewSpaceStart()");
|
| - Add(ExternalReference::new_space_mask(isolate).address(),
|
| - "Heap::NewSpaceMask()");
|
| Add(ExternalReference::new_space_allocation_limit_address(isolate).address(),
|
| "Heap::NewSpaceAllocationLimitAddress()");
|
| Add(ExternalReference::new_space_allocation_top_address(isolate).address(),
|
| @@ -941,11 +939,11 @@ bool Deserializer::ReadData(Object** current, Object** limit, int source_space,
|
| int space_number = space_number_if_any == kAnyOldSpace \
|
| ? (data & kSpaceMask) \
|
| : space_number_if_any; \
|
| + Object* new_object = NULL; /* May not be a real Object pointer. */ \
|
| if (where == kNewObject && how == kPlain && within == kStartOfObject) { \
|
| ReadObject(space_number, current); \
|
| emit_write_barrier = (space_number == NEW_SPACE); \
|
| } else { \
|
| - Object* new_object = NULL; /* May not be a real Object pointer. */ \
|
| if (where == kNewObject) { \
|
| ReadObject(space_number, &new_object); \
|
| } else if (where == kBackref) { \
|
| @@ -1014,9 +1012,11 @@ bool Deserializer::ReadData(Object** current, Object** limit, int source_space,
|
| } \
|
| if (emit_write_barrier && write_barrier_needed) { \
|
| Address current_address = reinterpret_cast<Address>(current); \
|
| + /* Builtins have been filtered above, so we are on-heap. */ \
|
| isolate->heap()->RecordWrite( \
|
| - current_object_address, \
|
| - static_cast<int>(current_address - current_object_address)); \
|
| + reinterpret_cast<Object*>(current_object_address + 1), \
|
| + static_cast<int>(current_address - current_object_address), \
|
| + new_object); \
|
| } \
|
| if (!current_was_incremented) { \
|
| current++; \
|
| @@ -1248,11 +1248,12 @@ bool Deserializer::ReadData(Object** current, Object** limit, int source_space,
|
| int index = data & kHotObjectMask;
|
| Object* hot_object = hot_objects_.Get(index);
|
| UnalignedCopy(current, &hot_object);
|
| - if (write_barrier_needed && isolate->heap()->InNewSpace(hot_object)) {
|
| + if (write_barrier_needed) {
|
| Address current_address = reinterpret_cast<Address>(current);
|
| isolate->heap()->RecordWrite(
|
| - current_object_address,
|
| - static_cast<int>(current_address - current_object_address));
|
| + reinterpret_cast<Object*>(current_object_address + 1),
|
| + static_cast<int>(current_address - current_object_address),
|
| + hot_object);
|
| }
|
| current++;
|
| break;
|
|
|