[heap] Add a page-based code object registry.

The registry right now has no users. In a follow-up CL I will
remove the skip list for code pages and make users of the skip
list use the registry.

Bug: v8:9093
Change-Id: I23a2b9e0d4158e2ffa89626e71f58d3bb5a41201
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1593074
Reviewed-by: Ulan Degenbaev <ulan@chromium.org>
Commit-Queue: Hannes Payer <hpayer@chromium.org>
Cr-Commit-Position: refs/heads/master@{#61184}
This commit is contained in:
Hannes Payer 2019-05-02 15:51:10 +02:00 committed by Commit Bot
parent a87a971b7e
commit e09fbbd1b8
6 changed files with 329 additions and 240 deletions

View File

@ -224,6 +224,9 @@ AllocationResult Heap::AllocateRaw(int size_in_bytes, AllocationType type,
// already.
UnprotectAndRegisterMemoryChunk(object);
ZapCodeObject(object->address(), size_in_bytes);
if (!large_object) {
MemoryChunk::FromHeapObject(object)->RegisterCodeObject(object);
}
}
OnAllocationEvent(object, size_in_bytes);
}

View File

@ -602,6 +602,35 @@ void MemoryChunk::SetReadAndWritable() {
}
}
void MemoryChunk::RegisterCodeObject(HeapObject code) {
DCHECK(MemoryChunk::FromHeapObject(code)->owner()->identity() == CODE_SPACE);
code_object_registry_->insert(code->address());
}
void MemoryChunk::RegisterCodeObjectInSwapRegistry(HeapObject code) {
DCHECK(MemoryChunk::FromHeapObject(code)->owner()->identity() == CODE_SPACE);
code_object_registry_swap_->insert(code->address());
}
void MemoryChunk::CreateSwapCodeObjectRegistry() {
DCHECK(!code_object_registry_swap_);
DCHECK(code_object_registry_);
code_object_registry_swap_ = new std::set<Address>();
}
void MemoryChunk::SwapCodeRegistries() {
DCHECK(code_object_registry_swap_);
DCHECK(code_object_registry_);
std::swap(code_object_registry_swap_, code_object_registry_);
delete code_object_registry_swap_;
code_object_registry_swap_ = nullptr;
}
bool MemoryChunk::CodeObjectRegistryContains(HeapObject object) {
return code_object_registry_->find(object->address()) !=
code_object_registry_->end();
}
namespace {
PageAllocator::Permission DefaultWritableCodePermissions() {
@ -688,6 +717,13 @@ MemoryChunk* MemoryChunk::Initialize(Heap* heap, Address base, size_t size,
chunk->reservation_ = std::move(reservation);
if (owner->identity() == CODE_SPACE) {
chunk->code_object_registry_ = new std::set<Address>();
} else {
chunk->code_object_registry_ = nullptr;
}
chunk->code_object_registry_swap_ = nullptr;
return chunk;
}
@ -1309,6 +1345,8 @@ void MemoryChunk::ReleaseAllocatedMemory() {
if (local_tracker_ != nullptr) ReleaseLocalTracker();
if (young_generation_bitmap_ != nullptr) ReleaseYoungGenerationBitmap();
if (marking_bitmap_ != nullptr) ReleaseMarkingBitmap();
if (code_object_registry_ != nullptr) delete code_object_registry_;
DCHECK(!code_object_registry_swap_);
if (!IsLargePage()) {
Page* page = static_cast<Page*>(this);
@ -1565,6 +1603,7 @@ void PagedSpace::RefillFreeList() {
added += RelinkFreeListCategories(p);
}
added += p->wasted_memory();
if (identity() == CODE_SPACE) p->SwapCodeRegistries();
if (is_local() && (added > kCompactionMemoryWanted)) break;
}
}

View File

@ -399,7 +399,9 @@ class MemoryChunk {
// FreeListCategory categories_[kNumberOfCategories]
+ kSystemPointerSize // LocalArrayBufferTracker* local_tracker_
+ kIntptrSize // std::atomic<intptr_t> young_generation_live_byte_count_
+ kSystemPointerSize; // Bitmap* young_generation_bitmap_
+ kSystemPointerSize // Bitmap* young_generation_bitmap_
+ kSystemPointerSize // std:set code_object_registry_
+ kSystemPointerSize; // std:set code_object_registry_swap_
// Page size in bytes. This must be a multiple of the OS page size.
static const int kPageSize = 1 << kPageSizeBits;
@ -671,6 +673,12 @@ class MemoryChunk {
base::ListNode<MemoryChunk>& list_node() { return list_node_; }
V8_EXPORT_PRIVATE void RegisterCodeObject(HeapObject code);
V8_EXPORT_PRIVATE void RegisterCodeObjectInSwapRegistry(HeapObject code);
V8_EXPORT_PRIVATE void CreateSwapCodeObjectRegistry();
V8_EXPORT_PRIVATE void SwapCodeRegistries();
V8_EXPORT_PRIVATE bool CodeObjectRegistryContains(HeapObject code);
protected:
static MemoryChunk* Initialize(Heap* heap, Address base, size_t size,
Address area_start, Address area_end,
@ -779,6 +787,9 @@ class MemoryChunk {
std::atomic<intptr_t> young_generation_live_byte_count_;
Bitmap* young_generation_bitmap_;
std::set<Address>* code_object_registry_;
std::set<Address>* code_object_registry_swap_;
private:
void InitializeReservedMemory() { reservation_.Reset(); }

View File

@ -249,6 +249,8 @@ int Sweeper::RawSweep(Page* p, FreeListRebuildingMode free_list_mode,
space->identity() == CODE_SPACE || space->identity() == MAP_SPACE);
DCHECK(!p->IsEvacuationCandidate() && !p->SweepingDone());
bool is_code_page = space->identity() == CODE_SPACE;
// TODO(ulan): we don't have to clear type old-to-old slots in code space
// because the concurrent marker doesn't mark code objects. This requires
// the write barrier for code objects to check the color of the code object.
@ -274,6 +276,8 @@ int Sweeper::RawSweep(Page* p, FreeListRebuildingMode free_list_mode,
skip_list->Clear();
}
if (is_code_page) p->CreateSwapCodeObjectRegistry();
intptr_t live_bytes = 0;
intptr_t freed_bytes = 0;
intptr_t max_freed_bytes = 0;
@ -287,6 +291,7 @@ int Sweeper::RawSweep(Page* p, FreeListRebuildingMode free_list_mode,
for (auto object_and_size :
LiveObjectRange<kBlackObjects>(p, marking_state_->bitmap(p))) {
HeapObject const object = object_and_size.first;
if (is_code_page) p->RegisterCodeObjectInSwapRegistry(object);
DCHECK(marking_state_->IsBlack(object));
Address free_end = object->address();
if (free_end != free_start) {

View File

@ -6619,6 +6619,37 @@ HEAP_TEST(MemoryReducerActivationForSmallHeaps) {
CHECK_EQ(heap->memory_reducer()->state_.action, MemoryReducer::Action::kWait);
}
TEST(CodeObjectRegistry) {
// We turn off compaction to ensure that code is not moving.
FLAG_never_compact = true;
Isolate* isolate = CcTest::i_isolate();
Heap* heap = isolate->heap();
Handle<Code> code1;
HandleScope outer_scope(heap->isolate());
Address code2_address;
{
code1 = DummyOptimizedCode(isolate);
Handle<Code> code2 = DummyOptimizedCode(isolate);
code2_address = code2->address();
// If this check breaks, change the allocation to ensure that both code
// objects are on the same page.
CHECK_EQ(MemoryChunk::FromHeapObject(*code1),
MemoryChunk::FromHeapObject(*code2));
CHECK(MemoryChunk::FromHeapObject(*code1)->CodeObjectRegistryContains(
*code1));
CHECK(MemoryChunk::FromHeapObject(*code2)->CodeObjectRegistryContains(
*code2));
}
CcTest::CollectAllAvailableGarbage();
CHECK(
MemoryChunk::FromHeapObject(*code1)->CodeObjectRegistryContains(*code1));
CHECK(
MemoryChunk::FromAddress(code2_address)
->CodeObjectRegistryContains(HeapObject::FromAddress(code2_address)));
}
} // namespace heap
} // namespace internal
} // namespace v8

View File

@ -194,249 +194,249 @@ INSTANCE_TYPES = {
# List of known V8 maps.
KNOWN_MAPS = {
("read_only_space", 0x00139): (74, "FreeSpaceMap"),
("read_only_space", 0x00189): (68, "MetaMap"),
("read_only_space", 0x00209): (67, "NullMap"),
("read_only_space", 0x00271): (157, "DescriptorArrayMap"),
("read_only_space", 0x002d1): (152, "WeakFixedArrayMap"),
("read_only_space", 0x00321): (88, "OnePointerFillerMap"),
("read_only_space", 0x00371): (88, "TwoPointerFillerMap"),
("read_only_space", 0x003f1): (67, "UninitializedMap"),
("read_only_space", 0x00461): (8, "OneByteInternalizedStringMap"),
("read_only_space", 0x00501): (67, "UndefinedMap"),
("read_only_space", 0x00561): (65, "HeapNumberMap"),
("read_only_space", 0x005e1): (67, "TheHoleMap"),
("read_only_space", 0x00689): (67, "BooleanMap"),
("read_only_space", 0x00761): (72, "ByteArrayMap"),
("read_only_space", 0x007b1): (127, "FixedArrayMap"),
("read_only_space", 0x00801): (127, "FixedCOWArrayMap"),
("read_only_space", 0x00851): (130, "HashTableMap"),
("read_only_space", 0x008a1): (64, "SymbolMap"),
("read_only_space", 0x008f1): (40, "OneByteStringMap"),
("read_only_space", 0x00941): (140, "ScopeInfoMap"),
("read_only_space", 0x00991): (164, "SharedFunctionInfoMap"),
("read_only_space", 0x009e1): (69, "CodeMap"),
("read_only_space", 0x00a31): (147, "FunctionContextMap"),
("read_only_space", 0x00a81): (155, "CellMap"),
("read_only_space", 0x00ad1): (163, "GlobalPropertyCellMap"),
("read_only_space", 0x00b21): (71, "ForeignMap"),
("read_only_space", 0x00b71): (153, "TransitionArrayMap"),
("read_only_space", 0x00bc1): (159, "FeedbackVectorMap"),
("read_only_space", 0x00c61): (67, "ArgumentsMarkerMap"),
("read_only_space", 0x00d01): (67, "ExceptionMap"),
("read_only_space", 0x00da1): (67, "TerminationExceptionMap"),
("read_only_space", 0x00e49): (67, "OptimizedOutMap"),
("read_only_space", 0x00ee9): (67, "StaleRegisterMap"),
("read_only_space", 0x00f59): (149, "NativeContextMap"),
("read_only_space", 0x00fa9): (148, "ModuleContextMap"),
("read_only_space", 0x00ff9): (146, "EvalContextMap"),
("read_only_space", 0x01049): (150, "ScriptContextMap"),
("read_only_space", 0x01099): (142, "AwaitContextMap"),
("read_only_space", 0x010e9): (143, "BlockContextMap"),
("read_only_space", 0x01139): (144, "CatchContextMap"),
("read_only_space", 0x01189): (151, "WithContextMap"),
("read_only_space", 0x011d9): (145, "DebugEvaluateContextMap"),
("read_only_space", 0x01229): (141, "ScriptContextTableMap"),
("read_only_space", 0x01279): (129, "ClosureFeedbackCellArrayMap"),
("read_only_space", 0x012c9): (87, "FeedbackMetadataArrayMap"),
("read_only_space", 0x01319): (127, "ArrayListMap"),
("read_only_space", 0x01369): (66, "BigIntMap"),
("read_only_space", 0x013b9): (128, "ObjectBoilerplateDescriptionMap"),
("read_only_space", 0x01409): (73, "BytecodeArrayMap"),
("read_only_space", 0x01459): (156, "CodeDataContainerMap"),
("read_only_space", 0x014a9): (86, "FixedDoubleArrayMap"),
("read_only_space", 0x014f9): (135, "GlobalDictionaryMap"),
("read_only_space", 0x01549): (158, "ManyClosuresCellMap"),
("read_only_space", 0x01599): (127, "ModuleInfoMap"),
("read_only_space", 0x015e9): (70, "MutableHeapNumberMap"),
("read_only_space", 0x01639): (134, "NameDictionaryMap"),
("read_only_space", 0x01689): (158, "NoClosuresCellMap"),
("read_only_space", 0x016d9): (136, "NumberDictionaryMap"),
("read_only_space", 0x01729): (158, "OneClosureCellMap"),
("read_only_space", 0x01779): (131, "OrderedHashMapMap"),
("read_only_space", 0x017c9): (132, "OrderedHashSetMap"),
("read_only_space", 0x01819): (133, "OrderedNameDictionaryMap"),
("read_only_space", 0x01869): (161, "PreparseDataMap"),
("read_only_space", 0x018b9): (162, "PropertyArrayMap"),
("read_only_space", 0x01909): (154, "SideEffectCallHandlerInfoMap"),
("read_only_space", 0x01959): (154, "SideEffectFreeCallHandlerInfoMap"),
("read_only_space", 0x019a9): (154, "NextCallSideEffectFreeCallHandlerInfoMap"),
("read_only_space", 0x019f9): (137, "SimpleNumberDictionaryMap"),
("read_only_space", 0x01a49): (127, "SloppyArgumentsElementsMap"),
("read_only_space", 0x01a99): (165, "SmallOrderedHashMapMap"),
("read_only_space", 0x01ae9): (166, "SmallOrderedHashSetMap"),
("read_only_space", 0x01b39): (167, "SmallOrderedNameDictionaryMap"),
("read_only_space", 0x01b89): (138, "StringTableMap"),
("read_only_space", 0x01bd9): (169, "UncompiledDataWithoutPreparseDataMap"),
("read_only_space", 0x01c29): (170, "UncompiledDataWithPreparseDataMap"),
("read_only_space", 0x01c79): (171, "WeakArrayListMap"),
("read_only_space", 0x01cc9): (139, "EphemeronHashTableMap"),
("read_only_space", 0x01d19): (126, "EmbedderDataArrayMap"),
("read_only_space", 0x01d69): (172, "WeakCellMap"),
("read_only_space", 0x01db9): (58, "NativeSourceStringMap"),
("read_only_space", 0x01e09): (32, "StringMap"),
("read_only_space", 0x01e59): (41, "ConsOneByteStringMap"),
("read_only_space", 0x01ea9): (33, "ConsStringMap"),
("read_only_space", 0x01ef9): (45, "ThinOneByteStringMap"),
("read_only_space", 0x01f49): (37, "ThinStringMap"),
("read_only_space", 0x01f99): (35, "SlicedStringMap"),
("read_only_space", 0x01fe9): (43, "SlicedOneByteStringMap"),
("read_only_space", 0x02039): (34, "ExternalStringMap"),
("read_only_space", 0x02089): (42, "ExternalOneByteStringMap"),
("read_only_space", 0x020d9): (50, "UncachedExternalStringMap"),
("read_only_space", 0x02129): (0, "InternalizedStringMap"),
("read_only_space", 0x02179): (2, "ExternalInternalizedStringMap"),
("read_only_space", 0x021c9): (10, "ExternalOneByteInternalizedStringMap"),
("read_only_space", 0x02219): (18, "UncachedExternalInternalizedStringMap"),
("read_only_space", 0x02269): (26, "UncachedExternalOneByteInternalizedStringMap"),
("read_only_space", 0x022b9): (58, "UncachedExternalOneByteStringMap"),
("read_only_space", 0x02309): (76, "FixedUint8ArrayMap"),
("read_only_space", 0x02359): (75, "FixedInt8ArrayMap"),
("read_only_space", 0x023a9): (78, "FixedUint16ArrayMap"),
("read_only_space", 0x023f9): (77, "FixedInt16ArrayMap"),
("read_only_space", 0x02449): (80, "FixedUint32ArrayMap"),
("read_only_space", 0x02499): (79, "FixedInt32ArrayMap"),
("read_only_space", 0x024e9): (81, "FixedFloat32ArrayMap"),
("read_only_space", 0x02539): (82, "FixedFloat64ArrayMap"),
("read_only_space", 0x02589): (83, "FixedUint8ClampedArrayMap"),
("read_only_space", 0x025d9): (85, "FixedBigUint64ArrayMap"),
("read_only_space", 0x02629): (84, "FixedBigInt64ArrayMap"),
("read_only_space", 0x02679): (67, "SelfReferenceMarkerMap"),
("read_only_space", 0x026e1): (98, "EnumCacheMap"),
("read_only_space", 0x02781): (115, "ArrayBoilerplateDescriptionMap"),
("read_only_space", 0x02ad1): (101, "InterceptorInfoMap"),
("read_only_space", 0x05109): (89, "AccessCheckInfoMap"),
("read_only_space", 0x05159): (90, "AccessorInfoMap"),
("read_only_space", 0x051a9): (91, "AccessorPairMap"),
("read_only_space", 0x051f9): (92, "AliasedArgumentsEntryMap"),
("read_only_space", 0x05249): (93, "AllocationMementoMap"),
("read_only_space", 0x05299): (94, "AsmWasmDataMap"),
("read_only_space", 0x052e9): (95, "AsyncGeneratorRequestMap"),
("read_only_space", 0x05339): (96, "ClassPositionsMap"),
("read_only_space", 0x05389): (97, "DebugInfoMap"),
("read_only_space", 0x053d9): (99, "FunctionTemplateInfoMap"),
("read_only_space", 0x05429): (100, "FunctionTemplateRareDataMap"),
("read_only_space", 0x05479): (102, "InterpreterDataMap"),
("read_only_space", 0x054c9): (103, "ModuleInfoEntryMap"),
("read_only_space", 0x05519): (104, "ModuleMap"),
("read_only_space", 0x05569): (105, "ObjectTemplateInfoMap"),
("read_only_space", 0x055b9): (106, "PromiseCapabilityMap"),
("read_only_space", 0x05609): (107, "PromiseReactionMap"),
("read_only_space", 0x05659): (108, "PrototypeInfoMap"),
("read_only_space", 0x056a9): (109, "ScriptMap"),
("read_only_space", 0x056f9): (110, "SourcePositionTableWithFrameCacheMap"),
("read_only_space", 0x05749): (111, "StackFrameInfoMap"),
("read_only_space", 0x05799): (112, "StackTraceFrameMap"),
("read_only_space", 0x057e9): (113, "Tuple2Map"),
("read_only_space", 0x05839): (114, "Tuple3Map"),
("read_only_space", 0x05889): (116, "WasmDebugInfoMap"),
("read_only_space", 0x058d9): (117, "WasmExceptionTagMap"),
("read_only_space", 0x05929): (118, "WasmExportedFunctionDataMap"),
("read_only_space", 0x05979): (119, "CallableTaskMap"),
("read_only_space", 0x059c9): (120, "CallbackTaskMap"),
("read_only_space", 0x05a19): (121, "PromiseFulfillReactionJobTaskMap"),
("read_only_space", 0x05a69): (122, "PromiseRejectReactionJobTaskMap"),
("read_only_space", 0x05ab9): (123, "PromiseResolveThenableJobTaskMap"),
("read_only_space", 0x05b09): (124, "FinalizationGroupCleanupJobTaskMap"),
("read_only_space", 0x05b59): (125, "AllocationSiteWithWeakNextMap"),
("read_only_space", 0x05ba9): (125, "AllocationSiteWithoutWeakNextMap"),
("read_only_space", 0x05bf9): (160, "LoadHandler1Map"),
("read_only_space", 0x05c49): (160, "LoadHandler2Map"),
("read_only_space", 0x05c99): (160, "LoadHandler3Map"),
("read_only_space", 0x05ce9): (168, "StoreHandler0Map"),
("read_only_space", 0x05d39): (168, "StoreHandler1Map"),
("read_only_space", 0x05d89): (168, "StoreHandler2Map"),
("read_only_space", 0x05dd9): (168, "StoreHandler3Map"),
("map_space", 0x00139): (1057, "ExternalMap"),
("map_space", 0x00189): (1073, "JSMessageObjectMap"),
("read_only_space", 0x00149): (74, "FreeSpaceMap"),
("read_only_space", 0x00199): (68, "MetaMap"),
("read_only_space", 0x00219): (67, "NullMap"),
("read_only_space", 0x00281): (157, "DescriptorArrayMap"),
("read_only_space", 0x002e1): (152, "WeakFixedArrayMap"),
("read_only_space", 0x00331): (88, "OnePointerFillerMap"),
("read_only_space", 0x00381): (88, "TwoPointerFillerMap"),
("read_only_space", 0x00401): (67, "UninitializedMap"),
("read_only_space", 0x00471): (8, "OneByteInternalizedStringMap"),
("read_only_space", 0x00511): (67, "UndefinedMap"),
("read_only_space", 0x00571): (65, "HeapNumberMap"),
("read_only_space", 0x005f1): (67, "TheHoleMap"),
("read_only_space", 0x00699): (67, "BooleanMap"),
("read_only_space", 0x00771): (72, "ByteArrayMap"),
("read_only_space", 0x007c1): (127, "FixedArrayMap"),
("read_only_space", 0x00811): (127, "FixedCOWArrayMap"),
("read_only_space", 0x00861): (130, "HashTableMap"),
("read_only_space", 0x008b1): (64, "SymbolMap"),
("read_only_space", 0x00901): (40, "OneByteStringMap"),
("read_only_space", 0x00951): (140, "ScopeInfoMap"),
("read_only_space", 0x009a1): (164, "SharedFunctionInfoMap"),
("read_only_space", 0x009f1): (69, "CodeMap"),
("read_only_space", 0x00a41): (147, "FunctionContextMap"),
("read_only_space", 0x00a91): (155, "CellMap"),
("read_only_space", 0x00ae1): (163, "GlobalPropertyCellMap"),
("read_only_space", 0x00b31): (71, "ForeignMap"),
("read_only_space", 0x00b81): (153, "TransitionArrayMap"),
("read_only_space", 0x00bd1): (159, "FeedbackVectorMap"),
("read_only_space", 0x00c71): (67, "ArgumentsMarkerMap"),
("read_only_space", 0x00d11): (67, "ExceptionMap"),
("read_only_space", 0x00db1): (67, "TerminationExceptionMap"),
("read_only_space", 0x00e59): (67, "OptimizedOutMap"),
("read_only_space", 0x00ef9): (67, "StaleRegisterMap"),
("read_only_space", 0x00f69): (149, "NativeContextMap"),
("read_only_space", 0x00fb9): (148, "ModuleContextMap"),
("read_only_space", 0x01009): (146, "EvalContextMap"),
("read_only_space", 0x01059): (150, "ScriptContextMap"),
("read_only_space", 0x010a9): (142, "AwaitContextMap"),
("read_only_space", 0x010f9): (143, "BlockContextMap"),
("read_only_space", 0x01149): (144, "CatchContextMap"),
("read_only_space", 0x01199): (151, "WithContextMap"),
("read_only_space", 0x011e9): (145, "DebugEvaluateContextMap"),
("read_only_space", 0x01239): (141, "ScriptContextTableMap"),
("read_only_space", 0x01289): (129, "ClosureFeedbackCellArrayMap"),
("read_only_space", 0x012d9): (87, "FeedbackMetadataArrayMap"),
("read_only_space", 0x01329): (127, "ArrayListMap"),
("read_only_space", 0x01379): (66, "BigIntMap"),
("read_only_space", 0x013c9): (128, "ObjectBoilerplateDescriptionMap"),
("read_only_space", 0x01419): (73, "BytecodeArrayMap"),
("read_only_space", 0x01469): (156, "CodeDataContainerMap"),
("read_only_space", 0x014b9): (86, "FixedDoubleArrayMap"),
("read_only_space", 0x01509): (135, "GlobalDictionaryMap"),
("read_only_space", 0x01559): (158, "ManyClosuresCellMap"),
("read_only_space", 0x015a9): (127, "ModuleInfoMap"),
("read_only_space", 0x015f9): (70, "MutableHeapNumberMap"),
("read_only_space", 0x01649): (134, "NameDictionaryMap"),
("read_only_space", 0x01699): (158, "NoClosuresCellMap"),
("read_only_space", 0x016e9): (136, "NumberDictionaryMap"),
("read_only_space", 0x01739): (158, "OneClosureCellMap"),
("read_only_space", 0x01789): (131, "OrderedHashMapMap"),
("read_only_space", 0x017d9): (132, "OrderedHashSetMap"),
("read_only_space", 0x01829): (133, "OrderedNameDictionaryMap"),
("read_only_space", 0x01879): (161, "PreparseDataMap"),
("read_only_space", 0x018c9): (162, "PropertyArrayMap"),
("read_only_space", 0x01919): (154, "SideEffectCallHandlerInfoMap"),
("read_only_space", 0x01969): (154, "SideEffectFreeCallHandlerInfoMap"),
("read_only_space", 0x019b9): (154, "NextCallSideEffectFreeCallHandlerInfoMap"),
("read_only_space", 0x01a09): (137, "SimpleNumberDictionaryMap"),
("read_only_space", 0x01a59): (127, "SloppyArgumentsElementsMap"),
("read_only_space", 0x01aa9): (165, "SmallOrderedHashMapMap"),
("read_only_space", 0x01af9): (166, "SmallOrderedHashSetMap"),
("read_only_space", 0x01b49): (167, "SmallOrderedNameDictionaryMap"),
("read_only_space", 0x01b99): (138, "StringTableMap"),
("read_only_space", 0x01be9): (169, "UncompiledDataWithoutPreparseDataMap"),
("read_only_space", 0x01c39): (170, "UncompiledDataWithPreparseDataMap"),
("read_only_space", 0x01c89): (171, "WeakArrayListMap"),
("read_only_space", 0x01cd9): (139, "EphemeronHashTableMap"),
("read_only_space", 0x01d29): (126, "EmbedderDataArrayMap"),
("read_only_space", 0x01d79): (172, "WeakCellMap"),
("read_only_space", 0x01dc9): (58, "NativeSourceStringMap"),
("read_only_space", 0x01e19): (32, "StringMap"),
("read_only_space", 0x01e69): (41, "ConsOneByteStringMap"),
("read_only_space", 0x01eb9): (33, "ConsStringMap"),
("read_only_space", 0x01f09): (45, "ThinOneByteStringMap"),
("read_only_space", 0x01f59): (37, "ThinStringMap"),
("read_only_space", 0x01fa9): (35, "SlicedStringMap"),
("read_only_space", 0x01ff9): (43, "SlicedOneByteStringMap"),
("read_only_space", 0x02049): (34, "ExternalStringMap"),
("read_only_space", 0x02099): (42, "ExternalOneByteStringMap"),
("read_only_space", 0x020e9): (50, "UncachedExternalStringMap"),
("read_only_space", 0x02139): (0, "InternalizedStringMap"),
("read_only_space", 0x02189): (2, "ExternalInternalizedStringMap"),
("read_only_space", 0x021d9): (10, "ExternalOneByteInternalizedStringMap"),
("read_only_space", 0x02229): (18, "UncachedExternalInternalizedStringMap"),
("read_only_space", 0x02279): (26, "UncachedExternalOneByteInternalizedStringMap"),
("read_only_space", 0x022c9): (58, "UncachedExternalOneByteStringMap"),
("read_only_space", 0x02319): (76, "FixedUint8ArrayMap"),
("read_only_space", 0x02369): (75, "FixedInt8ArrayMap"),
("read_only_space", 0x023b9): (78, "FixedUint16ArrayMap"),
("read_only_space", 0x02409): (77, "FixedInt16ArrayMap"),
("read_only_space", 0x02459): (80, "FixedUint32ArrayMap"),
("read_only_space", 0x024a9): (79, "FixedInt32ArrayMap"),
("read_only_space", 0x024f9): (81, "FixedFloat32ArrayMap"),
("read_only_space", 0x02549): (82, "FixedFloat64ArrayMap"),
("read_only_space", 0x02599): (83, "FixedUint8ClampedArrayMap"),
("read_only_space", 0x025e9): (85, "FixedBigUint64ArrayMap"),
("read_only_space", 0x02639): (84, "FixedBigInt64ArrayMap"),
("read_only_space", 0x02689): (67, "SelfReferenceMarkerMap"),
("read_only_space", 0x026f1): (98, "EnumCacheMap"),
("read_only_space", 0x02791): (115, "ArrayBoilerplateDescriptionMap"),
("read_only_space", 0x02ae1): (101, "InterceptorInfoMap"),
("read_only_space", 0x05119): (89, "AccessCheckInfoMap"),
("read_only_space", 0x05169): (90, "AccessorInfoMap"),
("read_only_space", 0x051b9): (91, "AccessorPairMap"),
("read_only_space", 0x05209): (92, "AliasedArgumentsEntryMap"),
("read_only_space", 0x05259): (93, "AllocationMementoMap"),
("read_only_space", 0x052a9): (94, "AsmWasmDataMap"),
("read_only_space", 0x052f9): (95, "AsyncGeneratorRequestMap"),
("read_only_space", 0x05349): (96, "ClassPositionsMap"),
("read_only_space", 0x05399): (97, "DebugInfoMap"),
("read_only_space", 0x053e9): (99, "FunctionTemplateInfoMap"),
("read_only_space", 0x05439): (100, "FunctionTemplateRareDataMap"),
("read_only_space", 0x05489): (102, "InterpreterDataMap"),
("read_only_space", 0x054d9): (103, "ModuleInfoEntryMap"),
("read_only_space", 0x05529): (104, "ModuleMap"),
("read_only_space", 0x05579): (105, "ObjectTemplateInfoMap"),
("read_only_space", 0x055c9): (106, "PromiseCapabilityMap"),
("read_only_space", 0x05619): (107, "PromiseReactionMap"),
("read_only_space", 0x05669): (108, "PrototypeInfoMap"),
("read_only_space", 0x056b9): (109, "ScriptMap"),
("read_only_space", 0x05709): (110, "SourcePositionTableWithFrameCacheMap"),
("read_only_space", 0x05759): (111, "StackFrameInfoMap"),
("read_only_space", 0x057a9): (112, "StackTraceFrameMap"),
("read_only_space", 0x057f9): (113, "Tuple2Map"),
("read_only_space", 0x05849): (114, "Tuple3Map"),
("read_only_space", 0x05899): (116, "WasmDebugInfoMap"),
("read_only_space", 0x058e9): (117, "WasmExceptionTagMap"),
("read_only_space", 0x05939): (118, "WasmExportedFunctionDataMap"),
("read_only_space", 0x05989): (119, "CallableTaskMap"),
("read_only_space", 0x059d9): (120, "CallbackTaskMap"),
("read_only_space", 0x05a29): (121, "PromiseFulfillReactionJobTaskMap"),
("read_only_space", 0x05a79): (122, "PromiseRejectReactionJobTaskMap"),
("read_only_space", 0x05ac9): (123, "PromiseResolveThenableJobTaskMap"),
("read_only_space", 0x05b19): (124, "FinalizationGroupCleanupJobTaskMap"),
("read_only_space", 0x05b69): (125, "AllocationSiteWithWeakNextMap"),
("read_only_space", 0x05bb9): (125, "AllocationSiteWithoutWeakNextMap"),
("read_only_space", 0x05c09): (160, "LoadHandler1Map"),
("read_only_space", 0x05c59): (160, "LoadHandler2Map"),
("read_only_space", 0x05ca9): (160, "LoadHandler3Map"),
("read_only_space", 0x05cf9): (168, "StoreHandler0Map"),
("read_only_space", 0x05d49): (168, "StoreHandler1Map"),
("read_only_space", 0x05d99): (168, "StoreHandler2Map"),
("read_only_space", 0x05de9): (168, "StoreHandler3Map"),
("map_space", 0x00149): (1057, "ExternalMap"),
("map_space", 0x00199): (1073, "JSMessageObjectMap"),
}
# List of known V8 objects.
KNOWN_OBJECTS = {
("read_only_space", 0x001d9): "NullValue",
("read_only_space", 0x00259): "EmptyDescriptorArray",
("read_only_space", 0x002c1): "EmptyWeakFixedArray",
("read_only_space", 0x003c1): "UninitializedValue",
("read_only_space", 0x004d1): "UndefinedValue",
("read_only_space", 0x00551): "NanValue",
("read_only_space", 0x005b1): "TheHoleValue",
("read_only_space", 0x00649): "HoleNanValue",
("read_only_space", 0x00659): "TrueValue",
("read_only_space", 0x00709): "FalseValue",
("read_only_space", 0x00751): "empty_string",
("read_only_space", 0x00c11): "EmptyScopeInfo",
("read_only_space", 0x00c21): "EmptyFixedArray",
("read_only_space", 0x00c31): "ArgumentsMarker",
("read_only_space", 0x00cd1): "Exception",
("read_only_space", 0x00d71): "TerminationException",
("read_only_space", 0x00e19): "OptimizedOut",
("read_only_space", 0x00eb9): "StaleRegister",
("read_only_space", 0x026c9): "EmptyEnumCache",
("read_only_space", 0x02731): "EmptyPropertyArray",
("read_only_space", 0x02741): "EmptyByteArray",
("read_only_space", 0x02751): "EmptyObjectBoilerplateDescription",
("read_only_space", 0x02769): "EmptyArrayBoilerplateDescription",
("read_only_space", 0x027d1): "EmptyClosureFeedbackCellArray",
("read_only_space", 0x027e1): "EmptyFixedUint8Array",
("read_only_space", 0x02801): "EmptyFixedInt8Array",
("read_only_space", 0x02821): "EmptyFixedUint16Array",
("read_only_space", 0x02841): "EmptyFixedInt16Array",
("read_only_space", 0x02861): "EmptyFixedUint32Array",
("read_only_space", 0x02881): "EmptyFixedInt32Array",
("read_only_space", 0x028a1): "EmptyFixedFloat32Array",
("read_only_space", 0x028c1): "EmptyFixedFloat64Array",
("read_only_space", 0x028e1): "EmptyFixedUint8ClampedArray",
("read_only_space", 0x02901): "EmptyFixedBigUint64Array",
("read_only_space", 0x02921): "EmptyFixedBigInt64Array",
("read_only_space", 0x02941): "EmptySloppyArgumentsElements",
("read_only_space", 0x02961): "EmptySlowElementDictionary",
("read_only_space", 0x029a9): "EmptyOrderedHashMap",
("read_only_space", 0x029d1): "EmptyOrderedHashSet",
("read_only_space", 0x029f9): "EmptyFeedbackMetadata",
("read_only_space", 0x02a09): "EmptyPropertyCell",
("read_only_space", 0x02a31): "EmptyPropertyDictionary",
("read_only_space", 0x02a81): "NoOpInterceptorInfo",
("read_only_space", 0x02b21): "EmptyWeakArrayList",
("read_only_space", 0x02b39): "InfinityValue",
("read_only_space", 0x02b49): "MinusZeroValue",
("read_only_space", 0x02b59): "MinusInfinityValue",
("read_only_space", 0x02b69): "SelfReferenceMarker",
("read_only_space", 0x02bc1): "OffHeapTrampolineRelocationInfo",
("read_only_space", 0x02bd9): "HashSeed",
("old_space", 0x00139): "ArgumentsIteratorAccessor",
("old_space", 0x001a9): "ArrayLengthAccessor",
("old_space", 0x00219): "BoundFunctionLengthAccessor",
("old_space", 0x00289): "BoundFunctionNameAccessor",
("old_space", 0x002f9): "ErrorStackAccessor",
("old_space", 0x00369): "FunctionArgumentsAccessor",
("old_space", 0x003d9): "FunctionCallerAccessor",
("old_space", 0x00449): "FunctionNameAccessor",
("old_space", 0x004b9): "FunctionLengthAccessor",
("old_space", 0x00529): "FunctionPrototypeAccessor",
("old_space", 0x00599): "StringLengthAccessor",
("old_space", 0x00609): "InvalidPrototypeValidityCell",
("old_space", 0x00619): "EmptyScript",
("old_space", 0x00699): "ManyClosuresCell",
("old_space", 0x006b1): "ArrayConstructorProtector",
("old_space", 0x006c1): "NoElementsProtector",
("old_space", 0x006e9): "IsConcatSpreadableProtector",
("old_space", 0x006f9): "ArraySpeciesProtector",
("old_space", 0x00721): "TypedArraySpeciesProtector",
("old_space", 0x00749): "RegExpSpeciesProtector",
("old_space", 0x00771): "PromiseSpeciesProtector",
("old_space", 0x00799): "StringLengthProtector",
("old_space", 0x007a9): "ArrayIteratorProtector",
("old_space", 0x007d1): "ArrayBufferDetachingProtector",
("old_space", 0x007f9): "PromiseHookProtector",
("old_space", 0x00821): "PromiseResolveProtector",
("old_space", 0x00831): "MapIteratorProtector",
("old_space", 0x00859): "PromiseThenProtector",
("old_space", 0x00881): "SetIteratorProtector",
("old_space", 0x008a9): "StringIteratorProtector",
("old_space", 0x008d1): "SingleCharacterStringCache",
("old_space", 0x010e1): "StringSplitCache",
("old_space", 0x018f1): "RegExpMultipleCache",
("old_space", 0x02101): "BuiltinsConstantsTable",
("read_only_space", 0x001e9): "NullValue",
("read_only_space", 0x00269): "EmptyDescriptorArray",
("read_only_space", 0x002d1): "EmptyWeakFixedArray",
("read_only_space", 0x003d1): "UninitializedValue",
("read_only_space", 0x004e1): "UndefinedValue",
("read_only_space", 0x00561): "NanValue",
("read_only_space", 0x005c1): "TheHoleValue",
("read_only_space", 0x00659): "HoleNanValue",
("read_only_space", 0x00669): "TrueValue",
("read_only_space", 0x00719): "FalseValue",
("read_only_space", 0x00761): "empty_string",
("read_only_space", 0x00c21): "EmptyScopeInfo",
("read_only_space", 0x00c31): "EmptyFixedArray",
("read_only_space", 0x00c41): "ArgumentsMarker",
("read_only_space", 0x00ce1): "Exception",
("read_only_space", 0x00d81): "TerminationException",
("read_only_space", 0x00e29): "OptimizedOut",
("read_only_space", 0x00ec9): "StaleRegister",
("read_only_space", 0x026d9): "EmptyEnumCache",
("read_only_space", 0x02741): "EmptyPropertyArray",
("read_only_space", 0x02751): "EmptyByteArray",
("read_only_space", 0x02761): "EmptyObjectBoilerplateDescription",
("read_only_space", 0x02779): "EmptyArrayBoilerplateDescription",
("read_only_space", 0x027e1): "EmptyClosureFeedbackCellArray",
("read_only_space", 0x027f1): "EmptyFixedUint8Array",
("read_only_space", 0x02811): "EmptyFixedInt8Array",
("read_only_space", 0x02831): "EmptyFixedUint16Array",
("read_only_space", 0x02851): "EmptyFixedInt16Array",
("read_only_space", 0x02871): "EmptyFixedUint32Array",
("read_only_space", 0x02891): "EmptyFixedInt32Array",
("read_only_space", 0x028b1): "EmptyFixedFloat32Array",
("read_only_space", 0x028d1): "EmptyFixedFloat64Array",
("read_only_space", 0x028f1): "EmptyFixedUint8ClampedArray",
("read_only_space", 0x02911): "EmptyFixedBigUint64Array",
("read_only_space", 0x02931): "EmptyFixedBigInt64Array",
("read_only_space", 0x02951): "EmptySloppyArgumentsElements",
("read_only_space", 0x02971): "EmptySlowElementDictionary",
("read_only_space", 0x029b9): "EmptyOrderedHashMap",
("read_only_space", 0x029e1): "EmptyOrderedHashSet",
("read_only_space", 0x02a09): "EmptyFeedbackMetadata",
("read_only_space", 0x02a19): "EmptyPropertyCell",
("read_only_space", 0x02a41): "EmptyPropertyDictionary",
("read_only_space", 0x02a91): "NoOpInterceptorInfo",
("read_only_space", 0x02b31): "EmptyWeakArrayList",
("read_only_space", 0x02b49): "InfinityValue",
("read_only_space", 0x02b59): "MinusZeroValue",
("read_only_space", 0x02b69): "MinusInfinityValue",
("read_only_space", 0x02b79): "SelfReferenceMarker",
("read_only_space", 0x02bd1): "OffHeapTrampolineRelocationInfo",
("read_only_space", 0x02be9): "HashSeed",
("old_space", 0x00149): "ArgumentsIteratorAccessor",
("old_space", 0x001b9): "ArrayLengthAccessor",
("old_space", 0x00229): "BoundFunctionLengthAccessor",
("old_space", 0x00299): "BoundFunctionNameAccessor",
("old_space", 0x00309): "ErrorStackAccessor",
("old_space", 0x00379): "FunctionArgumentsAccessor",
("old_space", 0x003e9): "FunctionCallerAccessor",
("old_space", 0x00459): "FunctionNameAccessor",
("old_space", 0x004c9): "FunctionLengthAccessor",
("old_space", 0x00539): "FunctionPrototypeAccessor",
("old_space", 0x005a9): "StringLengthAccessor",
("old_space", 0x00619): "InvalidPrototypeValidityCell",
("old_space", 0x00629): "EmptyScript",
("old_space", 0x006a9): "ManyClosuresCell",
("old_space", 0x006c1): "ArrayConstructorProtector",
("old_space", 0x006d1): "NoElementsProtector",
("old_space", 0x006f9): "IsConcatSpreadableProtector",
("old_space", 0x00709): "ArraySpeciesProtector",
("old_space", 0x00731): "TypedArraySpeciesProtector",
("old_space", 0x00759): "RegExpSpeciesProtector",
("old_space", 0x00781): "PromiseSpeciesProtector",
("old_space", 0x007a9): "StringLengthProtector",
("old_space", 0x007b9): "ArrayIteratorProtector",
("old_space", 0x007e1): "ArrayBufferDetachingProtector",
("old_space", 0x00809): "PromiseHookProtector",
("old_space", 0x00831): "PromiseResolveProtector",
("old_space", 0x00841): "MapIteratorProtector",
("old_space", 0x00869): "PromiseThenProtector",
("old_space", 0x00891): "SetIteratorProtector",
("old_space", 0x008b9): "StringIteratorProtector",
("old_space", 0x008e1): "SingleCharacterStringCache",
("old_space", 0x010f1): "StringSplitCache",
("old_space", 0x01901): "RegExpMultipleCache",
("old_space", 0x02111): "BuiltinsConstantsTable",
}
# List of known V8 Frame Markers.