5#ifndef V8_SNAPSHOT_DESERIALIZER_H_
6#define V8_SNAPSHOT_DESERIALIZER_H_
34#if defined(V8_TARGET_ARCH_MIPS64) || defined(V8_TARGET_ARCH_S390X) || \
35 defined(V8_TARGET_ARCH_PPC64) || defined(V8_TARGET_ARCH_RISCV32) || \
36 defined(V8_TARGET_ARCH_RISCV64) || V8_EMBEDDED_CONSTANT_POOL_BOOL
37#define V8_CODE_EMBEDS_OBJECT_POINTER 1
39#define V8_CODE_EMBEDS_OBJECT_POINTER 0
43template <
typename IsolateT>
162 template <
typename SlotAccessor>
167 template <
typename SlotAccessor>
191 template <
typename SlotAccessor>
194 template <
typename SlotAccessor>
196 template <
typename SlotAccessor>
197 int ReadBackref(uint8_t data, SlotAccessor slot_accessor);
198 template <
typename SlotAccessor>
200 template <
typename SlotAccessor>
202 template <
typename SlotAccessor>
204 template <
typename SlotAccessor>
206 template <
typename SlotAccessor>
208 template <
typename SlotAccessor>
210 template <
typename SlotAccessor>
212 template <
typename SlotAccessor>
214 template <
typename SlotAccessor>
216 template <
typename SlotAccessor>
218 template <
typename SlotAccessor>
220 template <
typename SlotAccessor>
222 template <
typename SlotAccessor>
224 template <
typename SlotAccessor>
226 template <
typename SlotAccessor>
228 template <
typename SlotAccessor>
230 template <
typename SlotAccessor>
232 template <
typename SlotAccessor>
234 SlotAccessor slot_accessor);
235 template <
typename SlotAccessor>
237 template <
typename SlotAccessor>
239 template <
typename SlotAccessor>
241 template <
typename SlotAccessor>
243 template <
typename SlotAccessor>
245 template <
typename SlotAccessor>
247 template <
typename SlotAccessor>
261 template <
typename SlotGetter>
335 original_gc_stats_ = TracingFlags::gc_stats;
336 TracingFlags::gc_stats = 0;
348 uint32_t num_api_references_;
352 int previous_allocation_size_ = 0;
371 template <
typename IsolateT>
377 DCHECK(isolate->OwnsStringTables() ||
378 deserializing_user_code_ ==
#define DISALLOW_GARBAGE_COLLECTION(name)
unsigned int original_gc_stats_
HotObjectsList(const HotObjectsList &)=delete
HotObjectsList & operator=(const HotObjectsList &)=delete
static const int kSizeMask
DirectHandle< HeapObject > circular_queue_[kSize]
void Add(DirectHandle< HeapObject > object)
DirectHandle< HeapObject > Get(int index)
DisableGCStats no_gc_stats_
int ReadRootArray(uint8_t data, SlotAccessor slot_accessor)
void LogNewObjectEvents()
int ReadApiReference(uint8_t data, SlotAccessor slot_accessor)
SnapshotByteSource source_
DirectHandleVector< HeapObject > to_rehash_
base::Vector< const DirectHandle< InstructionStream > > new_code_objects() const
int ReadReadOnlyHeapRef(uint8_t data, SlotAccessor slot_accessor)
base::Vector< const DirectHandle< AccessorInfo > > accessor_infos() const
int ReadSharedHeapObjectCache(uint8_t data, SlotAccessor slot_accessor)
DirectHandle< HeapObject > ReadObject()
Isolate * main_thread_isolate() const
Address ReadExternalReferenceCase()
void PostProcessNewObject(DirectHandle< Map > map, Handle< HeapObject > obj, SnapshotSpace space)
void LogScriptEvents(Tagged< Script > script)
SnapshotByteSource * source()
base::Vector< const DirectHandle< FunctionTemplateInfo > > function_template_infos() const
int ReadExternalReference(uint8_t data, SlotAccessor slot_accessor)
bool next_reference_is_weak_
DirectHandleVector< AllocationSite > new_allocation_sites_
void Synchronize(VisitorSynchronization::SyncTag tag) override
base::Vector< const DirectHandle< AllocationSite > > new_allocation_sites() const
int ReadSingleBytecodeData(uint8_t data, SlotAccessor slot_accessor)
void PostProcessNewJSReceiver(Tagged< Map > map, DirectHandle< JSReceiver > obj, InstanceType instance_type, SnapshotSpace space)
int ReadRegisterPendingForwardRef(uint8_t data, SlotAccessor slot_accessor)
int ReadWeakPrefix(uint8_t data, SlotAccessor slot_accessor)
void VisitRootPointers(Root root, const char *description, FullObjectSlot start, FullObjectSlot end) override
int ReadResolvePendingForwardRef(uint8_t data, SlotAccessor slot_accessor)
int num_unresolved_forward_refs_
int ReadClearedWeakReference(uint8_t data, SlotAccessor slot_accessor)
const bool deserializing_user_code_
int ReadBackref(uint8_t data, SlotAccessor slot_accessor)
bool next_reference_is_protected_pointer
bool should_rehash() const
bool next_reference_is_indirect_pointer_
int WriteIndirectPointer(IndirectPointerSlot dest, Tagged< HeapObject > value)
int ReadAllocateJSDispatchEntry(uint8_t data, SlotAccessor slot_accessor)
int ReadRepeatedRoot(SlotGetter slot_getter, int repeat_count)
std::vector< std::shared_ptr< BackingStore > > backing_stores_
DirectHandleVector< Map > new_maps_
void PushObjectToRehash(DirectHandle< HeapObject > object)
int ReadOffHeapBackingStore(uint8_t data, SlotAccessor slot_accessor)
int ReadInitializeSelfIndirectPointer(uint8_t data, SlotAccessor slot_accessor)
int ReadStartupObjectCache(uint8_t data, SlotAccessor slot_accessor)
std::shared_ptr< BackingStore > backing_store(size_t i)
int ReadFixedRepeatRoot(uint8_t data, SlotAccessor slot_accessor)
Handle< HeapObject > ReadMetaMap(SnapshotSpace space)
DirectHandleVector< Script > new_scripts_
int ReadProtectedPointerPrefix(uint8_t data, SlotAccessor slot_accessor)
Deserializer & operator=(const Deserializer &)=delete
DirectHandleVector< HeapObject > attached_objects_
bool deserializing_user_code() const
int ReadFixedRawData(uint8_t data, SlotAccessor slot_accessor)
int ReadNewObject(uint8_t data, SlotAccessor slot_accessor)
HotObjectsList hot_objects_
int ReadJSDispatchEntry(uint8_t data, SlotAccessor slot_accessor)
DirectHandleVector< InstructionStream > new_code_objects_
ExternalPointerTag ReadExternalPointerTag()
int WriteExternalPointer(Tagged< HeapObject > host, ExternalPointerSlot dest, Address value, ExternalPointerTag tag)
std::vector< UnresolvedForwardRef > unresolved_forward_refs_
base::Vector< const DirectHandle< Map > > new_maps() const
std::vector< JSDispatchHandle > js_dispatch_entries_
IsolateT * isolate() const
int ReadVariableRawData(uint8_t data, SlotAccessor slot_accessor)
int ReadNewMetaMap(uint8_t data, SlotAccessor slot_accessor)
DirectHandleVector< AccessorInfo > accessor_infos_
void WeakenDescriptorArrays()
int ReadHotObject(uint8_t data, SlotAccessor slot_accessor)
int ReadAttachedReference(uint8_t data, SlotAccessor slot_accessor)
std::vector< IndirectHandle< HeapObject > > back_refs_
int ReadVariableRepeatRoot(uint8_t data, SlotAccessor slot_accessor)
Tagged< HeapObject > Allocate(AllocationType allocation, int size, AllocationAlignment alignment)
void AddAttachedObject(DirectHandle< HeapObject > attached_object)
int WriteHeapPointer(SlotAccessor slot_accessor, Tagged< HeapObject > heap_object, ReferenceDescriptor descr, WriteBarrierMode mode=UPDATE_WRITE_BARRIER)
base::Vector< const DirectHandle< Script > > new_scripts() const
GlobalHandleVector< DescriptorArray > new_descriptor_arrays_
const bool should_rehash_
Deserializer(const Deserializer &)=delete
int ReadRawExternalReference(uint8_t data, SlotAccessor slot_accessor)
ReferenceDescriptor GetAndResetNextReferenceDescriptor()
int ReadIndirectPointerPrefix(uint8_t data, SlotAccessor slot_accessor)
void DeserializeDeferredObjects()
void ReadData(Handle< HeapObject > object, int start_slot_index, int end_slot_index)
int ReadRootArrayConstants(uint8_t data, SlotAccessor slot_accessor)
Handle< HeapObject > GetBackReferencedObject()
DirectHandleVector< FunctionTemplateInfo > function_template_infos_
static const int kHotObjectCount
bool IsMatch(IsolateT *isolate, Tagged< String > string)
StringTableInsertionKey(Isolate *isolate, DirectHandle< String > string, DeserializingUserCodeOption deserializing_user_code)
void PrepareForInsertion(LocalIsolate *isolate)
void PrepareForInsertion(Isolate *isolate)
DirectHandle< String > string_
V8_WARN_UNUSED_RESULT DirectHandle< String > GetHandleForInsertion(Isolate *isolate)
constexpr bool IsPowerOfTwo(T value)
DeserializingUserCodeOption
@ kNotDeserializingUserCode
@ kIsDeserializingUserCode
#define DCHECK(condition)
#define DCHECK_LT(v1, v2)
HeapObjectReferenceType type
bool is_protected_pointer
UnresolvedForwardRef(Handle< HeapObject > object, int offset, ReferenceDescriptor descr)
IndirectHandle< HeapObject > object
ReferenceDescriptor descr
#define V8_WARN_UNUSED_RESULT