| Index: src/heap/scavenger.cc | 
| diff --git a/src/heap/scavenger.cc b/src/heap/scavenger.cc | 
| index ab0848a4c0c82f6cfa245dcb3e3ecf916ab5b317..7fba1da3bb9e60b11b0c9c7d61143b6130f482b9 100644 | 
| --- a/src/heap/scavenger.cc | 
| +++ b/src/heap/scavenger.cc | 
| @@ -36,8 +36,7 @@ | 
| table_.Register(kVisitFixedDoubleArray, &EvacuateFixedDoubleArray); | 
| table_.Register(kVisitFixedTypedArray, &EvacuateFixedTypedArray); | 
| table_.Register(kVisitFixedFloat64Array, &EvacuateFixedFloat64Array); | 
| -    table_.Register(kVisitJSArrayBuffer, | 
| -                    &ObjectEvacuationStrategy<POINTER_OBJECT>::Visit); | 
| +    table_.Register(kVisitJSArrayBuffer, &EvacuateJSArrayBuffer); | 
|  | 
| table_.Register( | 
| kVisitNativeContext, | 
| @@ -282,6 +281,19 @@ | 
| object_size); | 
| } | 
|  | 
| +  static inline void EvacuateJSArrayBuffer(Map* map, HeapObject** slot, | 
| +                                           HeapObject* object) { | 
| +    ObjectEvacuationStrategy<POINTER_OBJECT>::Visit(map, slot, object); | 
| + | 
| +    Heap* heap = map->GetHeap(); | 
| +    MapWord map_word = object->map_word(); | 
| +    DCHECK(map_word.IsForwardingAddress()); | 
| +    HeapObject* target = map_word.ToForwardingAddress(); | 
| +    if (!heap->InNewSpace(target)) { | 
| +      heap->array_buffer_tracker()->Promote(JSArrayBuffer::cast(target)); | 
| +    } | 
| +  } | 
| + | 
| static inline void EvacuateByteArray(Map* map, HeapObject** slot, | 
| HeapObject* object) { | 
| int object_size = reinterpret_cast<ByteArray*>(object)->ByteArraySize(); | 
|  |