1 // Copyright 2018 the V8 project authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef V8_HEAP_HEAP_WRITE_BARRIER_H_ 6 #define V8_HEAP_HEAP_WRITE_BARRIER_H_ 7 8 #include "include/v8-internal.h" 9 #include "src/common/globals.h" 10 11 namespace v8 { 12 namespace internal { 13 14 class ArrayBufferExtension; 15 class Code; 16 class FixedArray; 17 class Heap; 18 class RelocInfo; 19 class EphemeronHashTable; 20 21 // Note: In general it is preferred to use the macros defined in 22 // object-macros.h. 23 24 // Combined write barriers. 25 void WriteBarrierForCode(Code host, RelocInfo* rinfo, Object value); 26 void WriteBarrierForCode(Code host, RelocInfo* rinfo, HeapObject value); 27 void WriteBarrierForCode(Code host); 28 29 // Generational write barrier. 30 void GenerationalBarrier(HeapObject object, ObjectSlot slot, Object value); 31 void GenerationalBarrier(HeapObject object, ObjectSlot slot, HeapObject value); 32 void GenerationalBarrier(HeapObject object, MaybeObjectSlot slot, 33 MaybeObject value); 34 void GenerationalEphemeronKeyBarrier(EphemeronHashTable table, ObjectSlot slot, 35 Object value); 36 void GenerationalBarrierForCode(Code host, RelocInfo* rinfo, HeapObject object); 37 38 // Marking write barrier. 39 void MarkingBarrier(HeapObject object, ObjectSlot slot, Object value); 40 void MarkingBarrier(HeapObject object, ObjectSlot slot, HeapObject value); 41 void MarkingBarrier(HeapObject object, MaybeObjectSlot slot, MaybeObject value); 42 void MarkingBarrierForCode(Code host, RelocInfo* rinfo, HeapObject object); 43 44 void MarkingBarrierForArrayBufferExtension(HeapObject object, 45 ArrayBufferExtension* extension); 46 47 void MarkingBarrierForDescriptorArray(Heap* heap, HeapObject host, 48 HeapObject descriptor_array, 49 int number_of_own_descriptors); 50 51 inline bool IsReadOnlyHeapObject(HeapObject object); 52 53 } // namespace internal 54 } // namespace v8 55 56 #endif // V8_HEAP_HEAP_WRITE_BARRIER_H_ 57