[heap] Retire SkipList and use CodeObjectRegistry instead.

Bug: v8:9093
Change-Id: If899e36d4fbef711118ff8d7730ff9acd118d8b3
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1599600
Reviewed-by: Yang Guo <yangguo@chromium.org>
Reviewed-by: Ulan Degenbaev <ulan@chromium.org>
Commit-Queue: Hannes Payer <hpayer@chromium.org>
Cr-Commit-Position: refs/heads/master@{#61354}
This commit is contained in:
Hannes Payer 2019-05-08 19:21:55 +02:00 committed by Commit Bot
parent b901591015
commit 6e40260381
8 changed files with 264 additions and 372 deletions

View File

@ -1638,9 +1638,8 @@ bool Heap::ReserveSpace(Reservation* reservations, std::vector<Address>* maps) {
DCHECK_EQ(0, reserved_size % Map::kSize);
int num_maps = reserved_size / Map::kSize;
for (int i = 0; i < num_maps; i++) {
// The deserializer will update the skip list.
AllocationResult allocation = map_space()->AllocateRawUnaligned(
Map::kSize, PagedSpace::IGNORE_SKIP_LIST);
AllocationResult allocation =
map_space()->AllocateRawUnaligned(Map::kSize);
HeapObject free_space;
if (allocation.To(&free_space)) {
// Mark with a free list node, in case we have a GC before
@ -1671,8 +1670,7 @@ bool Heap::ReserveSpace(Reservation* reservations, std::vector<Address>* maps) {
allocation = new_space()->AllocateRawUnaligned(size);
} else {
// The deserializer will update the skip list.
allocation = paged_space(space)->AllocateRawUnaligned(
size, PagedSpace::IGNORE_SKIP_LIST);
allocation = paged_space(space)->AllocateRawUnaligned(size);
}
HeapObject free_space;
if (allocation.To(&free_space)) {
@ -5772,10 +5770,6 @@ Map GcSafeMapOfCodeSpaceObject(HeapObject object) {
: map_word.ToMap();
}
int GcSafeSizeOfCodeSpaceObject(HeapObject object) {
return object->SizeFromMap(GcSafeMapOfCodeSpaceObject(object));
}
Code GcSafeCastToCode(Heap* heap, HeapObject object, Address inner_pointer) {
Code code = Code::unchecked_cast(object);
DCHECK(!code.is_null());
@ -5809,27 +5803,9 @@ Code Heap::GcSafeFindCodeForInnerPointer(Address inner_pointer) {
// Iterate through the page until we reach the end or find an object starting
// after the inner pointer.
Page* page = Page::FromAddress(inner_pointer);
DCHECK_EQ(page->owner(), code_space());
mark_compact_collector()->sweeper()->EnsurePageIsIterable(page);
Address addr = page->skip_list()->StartFor(inner_pointer);
Address top = code_space()->top();
Address limit = code_space()->limit();
while (true) {
if (addr == top && addr != limit) {
addr = limit;
continue;
}
HeapObject obj = HeapObject::FromAddress(addr);
int obj_size = GcSafeSizeOfCodeSpaceObject(obj);
Address next_addr = addr + obj_size;
if (next_addr > inner_pointer) {
return GcSafeCastToCode(this, obj, inner_pointer);
}
addr = next_addr;
}
HeapObject object = page->GetCodeObjectFromInnerAddress(inner_pointer);
return GcSafeCastToCode(this, object, inner_pointer);
}
void Heap::WriteBarrierForCodeSlow(Code code) {

View File

@ -1277,6 +1277,9 @@ class EvacuateVisitorBase : public HeapObjectVisitor {
local_allocator_->Allocate(target_space, size, alignment);
if (allocation.To(target_object)) {
MigrateObject(*target_object, object, size, target_space);
if (target_space == CODE_SPACE)
MemoryChunk::FromHeapObject(*target_object)
->RegisterCodeObject(*target_object);
return true;
}
return false;
@ -3188,11 +3191,6 @@ void MarkCompactCollector::Evacuate() {
new_space_evacuation_pages_.clear();
for (Page* p : old_space_evacuation_pages_) {
// Important: skip list should be cleared only after roots were updated
// because root iteration traverses the stack and might have to find
// code objects from non-updated pc pointing into evacuation candidate.
SkipList* list = p->skip_list();
if (list != nullptr) list->Clear();
if (p->IsFlagSet(Page::COMPACTION_WAS_ABORTED)) {
sweeper()->AddPage(p->owner()->identity(), p, Sweeper::REGULAR);
p->ClearFlag(Page::COMPACTION_WAS_ABORTED);

View File

@ -375,22 +375,17 @@ HeapObject PagedSpace::TryAllocateLinearlyAligned(
return HeapObject::FromAddress(current_top);
}
AllocationResult PagedSpace::AllocateRawUnaligned(
int size_in_bytes, UpdateSkipList update_skip_list) {
AllocationResult PagedSpace::AllocateRawUnaligned(int size_in_bytes) {
DCHECK_IMPLIES(identity() == RO_SPACE, heap()->CanAllocateInReadOnlySpace());
if (!EnsureLinearAllocationArea(size_in_bytes)) {
return AllocationResult::Retry(identity());
}
HeapObject object = AllocateLinearly(size_in_bytes);
DCHECK(!object.is_null());
if (update_skip_list == UPDATE_SKIP_LIST && identity() == CODE_SPACE) {
SkipList::Update(object->address(), size_in_bytes);
}
MSAN_ALLOCATED_UNINITIALIZED_MEMORY(object->address(), size_in_bytes);
return object;
}
AllocationResult PagedSpace::AllocateRawAligned(int size_in_bytes,
AllocationAlignment alignment) {
DCHECK(identity() == OLD_SPACE || identity() == RO_SPACE);

View File

@ -615,6 +615,7 @@ void MemoryChunk::SetReadAndWritable() {
}
void MemoryChunk::RegisterCodeObject(HeapObject code) {
DCHECK(Contains(code->address()));
DCHECK(MemoryChunk::FromHeapObject(code)->owner()->identity() == CODE_SPACE);
code_object_registry_->insert(code->address());
}
@ -643,6 +644,14 @@ bool MemoryChunk::CodeObjectRegistryContains(HeapObject object) {
code_object_registry_->end();
}
HeapObject MemoryChunk::GetCodeObjectFromInnerAddress(Address address) {
DCHECK(Contains(address));
DCHECK(!code_object_registry_->empty());
auto it = code_object_registry_->upper_bound(address);
HeapObject obj = HeapObject::FromAddress(*(--it));
return obj;
}
namespace {
PageAllocator::Permission DefaultWritableCodePermissions() {
@ -676,7 +685,6 @@ MemoryChunk* MemoryChunk::Initialize(Heap* heap, Address base, size_t size,
base::AsAtomicPointer::Release_Store(&chunk->typed_slot_set_[OLD_TO_OLD],
nullptr);
chunk->invalidated_slots_ = nullptr;
chunk->skip_list_ = nullptr;
chunk->progress_bar_ = 0;
chunk->high_water_mark_ = static_cast<intptr_t>(area_start - base);
chunk->set_concurrent_sweeping_state(kSweepingDone);
@ -1340,10 +1348,6 @@ bool MemoryAllocator::CommitExecutableMemory(VirtualMemory* vm, Address start,
// MemoryChunk implementation
void MemoryChunk::ReleaseAllocatedMemory() {
if (skip_list_ != nullptr) {
delete skip_list_;
skip_list_ = nullptr;
}
if (mutex_ != nullptr) {
delete mutex_;
mutex_ = nullptr;

View File

@ -52,7 +52,6 @@ class MemoryChunkLayout;
class Page;
class PagedSpace;
class SemiSpace;
class SkipList;
class SlotsBuffer;
class SlotSet;
class TypedSlotSet;
@ -387,7 +386,6 @@ class MemoryChunk {
+ kSystemPointerSize *
NUMBER_OF_REMEMBERED_SET_TYPES // TypedSlotSet* array
+ kSystemPointerSize // InvalidatedSlots* invalidated_slots_
+ kSystemPointerSize // SkipList* skip_list_
+ kSystemPointerSize // std::atomic<intptr_t> high_water_mark_
+ kSystemPointerSize // base::Mutex* mutex_
+ kSystemPointerSize // std::atomic<ConcurrentSweepingState>
@ -486,10 +484,6 @@ class MemoryChunk {
Heap* synchronized_heap();
inline SkipList* skip_list() { return skip_list_; }
inline void set_skip_list(SkipList* skip_list) { skip_list_ = skip_list; }
template <RememberedSetType type>
bool ContainsSlots() {
return slot_set<type>() != nullptr || typed_slot_set<type>() != nullptr ||
@ -685,6 +679,7 @@ class MemoryChunk {
V8_EXPORT_PRIVATE void CreateSwapCodeObjectRegistry();
V8_EXPORT_PRIVATE void SwapCodeRegistries();
V8_EXPORT_PRIVATE bool CodeObjectRegistryContains(HeapObject code);
V8_EXPORT_PRIVATE HeapObject GetCodeObjectFromInnerAddress(Address address);
protected:
static MemoryChunk* Initialize(Heap* heap, Address base, size_t size,
@ -749,8 +744,6 @@ class MemoryChunk {
TypedSlotSet* typed_slot_set_[NUMBER_OF_REMEMBERED_SET_TYPES];
InvalidatedSlots* invalidated_slots_;
SkipList* skip_list_;
// Assuming the initial allocation on a page is sequential,
// count highest number of bytes ever allocated on the page.
std::atomic<intptr_t> high_water_mark_;
@ -1163,59 +1156,6 @@ class CodeRangeAddressHint {
std::unordered_map<size_t, std::vector<Address>> recently_freed_;
};
class SkipList {
public:
SkipList() { Clear(); }
void Clear() {
for (int idx = 0; idx < kSize; idx++) {
starts_[idx] = static_cast<Address>(-1);
}
}
Address StartFor(Address addr) { return starts_[RegionNumber(addr)]; }
void AddObject(Address addr, int size) {
int start_region = RegionNumber(addr);
int end_region = RegionNumber(addr + size - kTaggedSize);
for (int idx = start_region; idx <= end_region; idx++) {
if (starts_[idx] > addr) {
starts_[idx] = addr;
} else {
// In the first region, there may already be an object closer to the
// start of the region. Do not change the start in that case. If this
// is not the first region, you probably added overlapping objects.
DCHECK_EQ(start_region, idx);
}
}
}
static inline int RegionNumber(Address addr) {
return (addr & kPageAlignmentMask) >> kRegionSizeLog2;
}
static void Update(Address addr, int size) {
Page* page = Page::FromAddress(addr);
SkipList* list = page->skip_list();
if (list == nullptr) {
list = new SkipList();
page->set_skip_list(list);
}
list->AddObject(addr, size);
}
private:
static const int kRegionSizeLog2 = 13;
static const int kRegionSize = 1 << kRegionSizeLog2;
static const int kSize = Page::kPageSize / kRegionSize;
STATIC_ASSERT(Page::kPageSize % kRegionSize == 0);
Address starts_[kSize];
};
// ----------------------------------------------------------------------------
// A space acquires chunks of memory from the operating system. The memory
// allocator allocates and deallocates pages for the paged heap spaces and large
@ -2194,13 +2134,10 @@ class V8_EXPORT_PRIVATE PagedSpace
// due to being too small to use for allocation.
virtual size_t Waste() { return free_list_.wasted_bytes(); }
enum UpdateSkipList { UPDATE_SKIP_LIST, IGNORE_SKIP_LIST };
// Allocate the requested number of bytes in the space if possible, return a
// failure object if not. Only use IGNORE_SKIP_LIST if the skip list is going
// to be manually updated later.
// failure object if not.
V8_WARN_UNUSED_RESULT inline AllocationResult AllocateRawUnaligned(
int size_in_bytes, UpdateSkipList update_skip_list = UPDATE_SKIP_LIST);
int size_in_bytes);
// Allocate the requested number of bytes in the space double aligned if
// possible, return a failure object if not.

View File

@ -266,22 +266,11 @@ int Sweeper::RawSweep(Page* p, FreeListRebuildingMode free_list_mode,
Address free_start = p->area_start();
// If we use the skip list for code space pages, we have to lock the skip
// list because it could be accessed concurrently by the runtime or the
// deoptimizer.
const bool rebuild_skip_list =
space->identity() == CODE_SPACE && p->skip_list() != nullptr;
SkipList* skip_list = p->skip_list();
if (rebuild_skip_list) {
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;
int curr_region = -1;
// Set the allocated_bytes_ counter to area_size and clear the wasted_memory_
// counter. The free operations below will decrease allocated_bytes_ to actual
@ -323,15 +312,6 @@ int Sweeper::RawSweep(Page* p, FreeListRebuildingMode free_list_mode,
Map map = object->synchronized_map();
int size = object->SizeFromMap(map);
live_bytes += size;
if (rebuild_skip_list) {
int new_region_start = SkipList::RegionNumber(free_end);
int new_region_end =
SkipList::RegionNumber(free_end + size - kTaggedSize);
if (new_region_start != curr_region || new_region_end != curr_region) {
skip_list->AddObject(free_end, size);
curr_region = new_region_end;
}
}
free_start = free_end + size;
}

View File

@ -44,7 +44,9 @@ Address DeserializerAllocator::AllocateRaw(AllocationSpace space, int size) {
int chunk_index = current_chunk_[space];
DCHECK_LE(high_water_[space], reservation[chunk_index].end);
#endif
if (space == CODE_SPACE) SkipList::Update(address, size);
if (space == CODE_SPACE)
MemoryChunk::FromAddress(address)->RegisterCodeObject(
HeapObject::FromAddress(address));
return address;
}
}

View File

@ -195,250 +195,250 @@ INSTANCE_TYPES = {
# List of known V8 maps.
KNOWN_MAPS = {
("read_only_space", 0x00149): (74, "FreeSpaceMap"),
("read_only_space", 0x00199): (68, "MetaMap"),
("read_only_space", 0x00219): (67, "NullMap"),
("read_only_space", 0x00281): (158, "DescriptorArrayMap"),
("read_only_space", 0x002e1): (153, "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): (128, "FixedArrayMap"),
("read_only_space", 0x00811): (128, "FixedCOWArrayMap"),
("read_only_space", 0x00861): (131, "HashTableMap"),
("read_only_space", 0x008b1): (64, "SymbolMap"),
("read_only_space", 0x00901): (40, "OneByteStringMap"),
("read_only_space", 0x00951): (141, "ScopeInfoMap"),
("read_only_space", 0x009a1): (165, "SharedFunctionInfoMap"),
("read_only_space", 0x009f1): (69, "CodeMap"),
("read_only_space", 0x00a41): (148, "FunctionContextMap"),
("read_only_space", 0x00a91): (156, "CellMap"),
("read_only_space", 0x00ae1): (164, "GlobalPropertyCellMap"),
("read_only_space", 0x00b31): (71, "ForeignMap"),
("read_only_space", 0x00b81): (154, "TransitionArrayMap"),
("read_only_space", 0x00bd1): (160, "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): (150, "NativeContextMap"),
("read_only_space", 0x00fb9): (149, "ModuleContextMap"),
("read_only_space", 0x01009): (147, "EvalContextMap"),
("read_only_space", 0x01059): (151, "ScriptContextMap"),
("read_only_space", 0x010a9): (143, "AwaitContextMap"),
("read_only_space", 0x010f9): (144, "BlockContextMap"),
("read_only_space", 0x01149): (145, "CatchContextMap"),
("read_only_space", 0x01199): (152, "WithContextMap"),
("read_only_space", 0x011e9): (146, "DebugEvaluateContextMap"),
("read_only_space", 0x01239): (142, "ScriptContextTableMap"),
("read_only_space", 0x01289): (130, "ClosureFeedbackCellArrayMap"),
("read_only_space", 0x012d9): (87, "FeedbackMetadataArrayMap"),
("read_only_space", 0x01329): (128, "ArrayListMap"),
("read_only_space", 0x01379): (66, "BigIntMap"),
("read_only_space", 0x013c9): (129, "ObjectBoilerplateDescriptionMap"),
("read_only_space", 0x01419): (73, "BytecodeArrayMap"),
("read_only_space", 0x01469): (157, "CodeDataContainerMap"),
("read_only_space", 0x014b9): (86, "FixedDoubleArrayMap"),
("read_only_space", 0x01509): (136, "GlobalDictionaryMap"),
("read_only_space", 0x01559): (159, "ManyClosuresCellMap"),
("read_only_space", 0x015a9): (128, "ModuleInfoMap"),
("read_only_space", 0x015f9): (70, "MutableHeapNumberMap"),
("read_only_space", 0x01649): (135, "NameDictionaryMap"),
("read_only_space", 0x01699): (159, "NoClosuresCellMap"),
("read_only_space", 0x016e9): (137, "NumberDictionaryMap"),
("read_only_space", 0x01739): (159, "OneClosureCellMap"),
("read_only_space", 0x01789): (132, "OrderedHashMapMap"),
("read_only_space", 0x017d9): (133, "OrderedHashSetMap"),
("read_only_space", 0x01829): (134, "OrderedNameDictionaryMap"),
("read_only_space", 0x01879): (162, "PreparseDataMap"),
("read_only_space", 0x018c9): (163, "PropertyArrayMap"),
("read_only_space", 0x01919): (155, "SideEffectCallHandlerInfoMap"),
("read_only_space", 0x01969): (155, "SideEffectFreeCallHandlerInfoMap"),
("read_only_space", 0x019b9): (155, "NextCallSideEffectFreeCallHandlerInfoMap"),
("read_only_space", 0x01a09): (138, "SimpleNumberDictionaryMap"),
("read_only_space", 0x01a59): (128, "SloppyArgumentsElementsMap"),
("read_only_space", 0x01aa9): (166, "SmallOrderedHashMapMap"),
("read_only_space", 0x01af9): (167, "SmallOrderedHashSetMap"),
("read_only_space", 0x01b49): (168, "SmallOrderedNameDictionaryMap"),
("read_only_space", 0x01b99): (139, "StringTableMap"),
("read_only_space", 0x01be9): (170, "UncompiledDataWithoutPreparseDataMap"),
("read_only_space", 0x01c39): (171, "UncompiledDataWithPreparseDataMap"),
("read_only_space", 0x01c89): (172, "WeakArrayListMap"),
("read_only_space", 0x01cd9): (140, "EphemeronHashTableMap"),
("read_only_space", 0x01d29): (127, "EmbedderDataArrayMap"),
("read_only_space", 0x01d79): (173, "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, "WasmCapiFunctionDataMap"),
("read_only_space", 0x058e9): (117, "WasmDebugInfoMap"),
("read_only_space", 0x05939): (118, "WasmExceptionTagMap"),
("read_only_space", 0x05989): (119, "WasmExportedFunctionDataMap"),
("read_only_space", 0x059d9): (120, "CallableTaskMap"),
("read_only_space", 0x05a29): (121, "CallbackTaskMap"),
("read_only_space", 0x05a79): (122, "PromiseFulfillReactionJobTaskMap"),
("read_only_space", 0x05ac9): (123, "PromiseRejectReactionJobTaskMap"),
("read_only_space", 0x05b19): (124, "PromiseResolveThenableJobTaskMap"),
("read_only_space", 0x05b69): (125, "FinalizationGroupCleanupJobTaskMap"),
("read_only_space", 0x05bb9): (126, "AllocationSiteWithWeakNextMap"),
("read_only_space", 0x05c09): (126, "AllocationSiteWithoutWeakNextMap"),
("read_only_space", 0x05c59): (161, "LoadHandler1Map"),
("read_only_space", 0x05ca9): (161, "LoadHandler2Map"),
("read_only_space", 0x05cf9): (161, "LoadHandler3Map"),
("read_only_space", 0x05d49): (169, "StoreHandler0Map"),
("read_only_space", 0x05d99): (169, "StoreHandler1Map"),
("read_only_space", 0x05de9): (169, "StoreHandler2Map"),
("read_only_space", 0x05e39): (169, "StoreHandler3Map"),
("map_space", 0x00149): (1057, "ExternalMap"),
("map_space", 0x00199): (1073, "JSMessageObjectMap"),
("read_only_space", 0x00141): (74, "FreeSpaceMap"),
("read_only_space", 0x00191): (68, "MetaMap"),
("read_only_space", 0x00211): (67, "NullMap"),
("read_only_space", 0x00279): (158, "DescriptorArrayMap"),
("read_only_space", 0x002d9): (153, "WeakFixedArrayMap"),
("read_only_space", 0x00329): (88, "OnePointerFillerMap"),
("read_only_space", 0x00379): (88, "TwoPointerFillerMap"),
("read_only_space", 0x003f9): (67, "UninitializedMap"),
("read_only_space", 0x00469): (8, "OneByteInternalizedStringMap"),
("read_only_space", 0x00509): (67, "UndefinedMap"),
("read_only_space", 0x00569): (65, "HeapNumberMap"),
("read_only_space", 0x005e9): (67, "TheHoleMap"),
("read_only_space", 0x00691): (67, "BooleanMap"),
("read_only_space", 0x00769): (72, "ByteArrayMap"),
("read_only_space", 0x007b9): (128, "FixedArrayMap"),
("read_only_space", 0x00809): (128, "FixedCOWArrayMap"),
("read_only_space", 0x00859): (131, "HashTableMap"),
("read_only_space", 0x008a9): (64, "SymbolMap"),
("read_only_space", 0x008f9): (40, "OneByteStringMap"),
("read_only_space", 0x00949): (141, "ScopeInfoMap"),
("read_only_space", 0x00999): (165, "SharedFunctionInfoMap"),
("read_only_space", 0x009e9): (69, "CodeMap"),
("read_only_space", 0x00a39): (148, "FunctionContextMap"),
("read_only_space", 0x00a89): (156, "CellMap"),
("read_only_space", 0x00ad9): (164, "GlobalPropertyCellMap"),
("read_only_space", 0x00b29): (71, "ForeignMap"),
("read_only_space", 0x00b79): (154, "TransitionArrayMap"),
("read_only_space", 0x00bc9): (160, "FeedbackVectorMap"),
("read_only_space", 0x00c69): (67, "ArgumentsMarkerMap"),
("read_only_space", 0x00d09): (67, "ExceptionMap"),
("read_only_space", 0x00da9): (67, "TerminationExceptionMap"),
("read_only_space", 0x00e51): (67, "OptimizedOutMap"),
("read_only_space", 0x00ef1): (67, "StaleRegisterMap"),
("read_only_space", 0x00f61): (150, "NativeContextMap"),
("read_only_space", 0x00fb1): (149, "ModuleContextMap"),
("read_only_space", 0x01001): (147, "EvalContextMap"),
("read_only_space", 0x01051): (151, "ScriptContextMap"),
("read_only_space", 0x010a1): (143, "AwaitContextMap"),
("read_only_space", 0x010f1): (144, "BlockContextMap"),
("read_only_space", 0x01141): (145, "CatchContextMap"),
("read_only_space", 0x01191): (152, "WithContextMap"),
("read_only_space", 0x011e1): (146, "DebugEvaluateContextMap"),
("read_only_space", 0x01231): (142, "ScriptContextTableMap"),
("read_only_space", 0x01281): (130, "ClosureFeedbackCellArrayMap"),
("read_only_space", 0x012d1): (87, "FeedbackMetadataArrayMap"),
("read_only_space", 0x01321): (128, "ArrayListMap"),
("read_only_space", 0x01371): (66, "BigIntMap"),
("read_only_space", 0x013c1): (129, "ObjectBoilerplateDescriptionMap"),
("read_only_space", 0x01411): (73, "BytecodeArrayMap"),
("read_only_space", 0x01461): (157, "CodeDataContainerMap"),
("read_only_space", 0x014b1): (86, "FixedDoubleArrayMap"),
("read_only_space", 0x01501): (136, "GlobalDictionaryMap"),
("read_only_space", 0x01551): (159, "ManyClosuresCellMap"),
("read_only_space", 0x015a1): (128, "ModuleInfoMap"),
("read_only_space", 0x015f1): (70, "MutableHeapNumberMap"),
("read_only_space", 0x01641): (135, "NameDictionaryMap"),
("read_only_space", 0x01691): (159, "NoClosuresCellMap"),
("read_only_space", 0x016e1): (137, "NumberDictionaryMap"),
("read_only_space", 0x01731): (159, "OneClosureCellMap"),
("read_only_space", 0x01781): (132, "OrderedHashMapMap"),
("read_only_space", 0x017d1): (133, "OrderedHashSetMap"),
("read_only_space", 0x01821): (134, "OrderedNameDictionaryMap"),
("read_only_space", 0x01871): (162, "PreparseDataMap"),
("read_only_space", 0x018c1): (163, "PropertyArrayMap"),
("read_only_space", 0x01911): (155, "SideEffectCallHandlerInfoMap"),
("read_only_space", 0x01961): (155, "SideEffectFreeCallHandlerInfoMap"),
("read_only_space", 0x019b1): (155, "NextCallSideEffectFreeCallHandlerInfoMap"),
("read_only_space", 0x01a01): (138, "SimpleNumberDictionaryMap"),
("read_only_space", 0x01a51): (128, "SloppyArgumentsElementsMap"),
("read_only_space", 0x01aa1): (166, "SmallOrderedHashMapMap"),
("read_only_space", 0x01af1): (167, "SmallOrderedHashSetMap"),
("read_only_space", 0x01b41): (168, "SmallOrderedNameDictionaryMap"),
("read_only_space", 0x01b91): (139, "StringTableMap"),
("read_only_space", 0x01be1): (170, "UncompiledDataWithoutPreparseDataMap"),
("read_only_space", 0x01c31): (171, "UncompiledDataWithPreparseDataMap"),
("read_only_space", 0x01c81): (172, "WeakArrayListMap"),
("read_only_space", 0x01cd1): (140, "EphemeronHashTableMap"),
("read_only_space", 0x01d21): (127, "EmbedderDataArrayMap"),
("read_only_space", 0x01d71): (173, "WeakCellMap"),
("read_only_space", 0x01dc1): (58, "NativeSourceStringMap"),
("read_only_space", 0x01e11): (32, "StringMap"),
("read_only_space", 0x01e61): (41, "ConsOneByteStringMap"),
("read_only_space", 0x01eb1): (33, "ConsStringMap"),
("read_only_space", 0x01f01): (45, "ThinOneByteStringMap"),
("read_only_space", 0x01f51): (37, "ThinStringMap"),
("read_only_space", 0x01fa1): (35, "SlicedStringMap"),
("read_only_space", 0x01ff1): (43, "SlicedOneByteStringMap"),
("read_only_space", 0x02041): (34, "ExternalStringMap"),
("read_only_space", 0x02091): (42, "ExternalOneByteStringMap"),
("read_only_space", 0x020e1): (50, "UncachedExternalStringMap"),
("read_only_space", 0x02131): (0, "InternalizedStringMap"),
("read_only_space", 0x02181): (2, "ExternalInternalizedStringMap"),
("read_only_space", 0x021d1): (10, "ExternalOneByteInternalizedStringMap"),
("read_only_space", 0x02221): (18, "UncachedExternalInternalizedStringMap"),
("read_only_space", 0x02271): (26, "UncachedExternalOneByteInternalizedStringMap"),
("read_only_space", 0x022c1): (58, "UncachedExternalOneByteStringMap"),
("read_only_space", 0x02311): (76, "FixedUint8ArrayMap"),
("read_only_space", 0x02361): (75, "FixedInt8ArrayMap"),
("read_only_space", 0x023b1): (78, "FixedUint16ArrayMap"),
("read_only_space", 0x02401): (77, "FixedInt16ArrayMap"),
("read_only_space", 0x02451): (80, "FixedUint32ArrayMap"),
("read_only_space", 0x024a1): (79, "FixedInt32ArrayMap"),
("read_only_space", 0x024f1): (81, "FixedFloat32ArrayMap"),
("read_only_space", 0x02541): (82, "FixedFloat64ArrayMap"),
("read_only_space", 0x02591): (83, "FixedUint8ClampedArrayMap"),
("read_only_space", 0x025e1): (85, "FixedBigUint64ArrayMap"),
("read_only_space", 0x02631): (84, "FixedBigInt64ArrayMap"),
("read_only_space", 0x02681): (67, "SelfReferenceMarkerMap"),
("read_only_space", 0x026e9): (98, "EnumCacheMap"),
("read_only_space", 0x02789): (115, "ArrayBoilerplateDescriptionMap"),
("read_only_space", 0x02ad9): (101, "InterceptorInfoMap"),
("read_only_space", 0x05111): (89, "AccessCheckInfoMap"),
("read_only_space", 0x05161): (90, "AccessorInfoMap"),
("read_only_space", 0x051b1): (91, "AccessorPairMap"),
("read_only_space", 0x05201): (92, "AliasedArgumentsEntryMap"),
("read_only_space", 0x05251): (93, "AllocationMementoMap"),
("read_only_space", 0x052a1): (94, "AsmWasmDataMap"),
("read_only_space", 0x052f1): (95, "AsyncGeneratorRequestMap"),
("read_only_space", 0x05341): (96, "ClassPositionsMap"),
("read_only_space", 0x05391): (97, "DebugInfoMap"),
("read_only_space", 0x053e1): (99, "FunctionTemplateInfoMap"),
("read_only_space", 0x05431): (100, "FunctionTemplateRareDataMap"),
("read_only_space", 0x05481): (102, "InterpreterDataMap"),
("read_only_space", 0x054d1): (103, "ModuleInfoEntryMap"),
("read_only_space", 0x05521): (104, "ModuleMap"),
("read_only_space", 0x05571): (105, "ObjectTemplateInfoMap"),
("read_only_space", 0x055c1): (106, "PromiseCapabilityMap"),
("read_only_space", 0x05611): (107, "PromiseReactionMap"),
("read_only_space", 0x05661): (108, "PrototypeInfoMap"),
("read_only_space", 0x056b1): (109, "ScriptMap"),
("read_only_space", 0x05701): (110, "SourcePositionTableWithFrameCacheMap"),
("read_only_space", 0x05751): (111, "StackFrameInfoMap"),
("read_only_space", 0x057a1): (112, "StackTraceFrameMap"),
("read_only_space", 0x057f1): (113, "Tuple2Map"),
("read_only_space", 0x05841): (114, "Tuple3Map"),
("read_only_space", 0x05891): (116, "WasmCapiFunctionDataMap"),
("read_only_space", 0x058e1): (117, "WasmDebugInfoMap"),
("read_only_space", 0x05931): (118, "WasmExceptionTagMap"),
("read_only_space", 0x05981): (119, "WasmExportedFunctionDataMap"),
("read_only_space", 0x059d1): (120, "CallableTaskMap"),
("read_only_space", 0x05a21): (121, "CallbackTaskMap"),
("read_only_space", 0x05a71): (122, "PromiseFulfillReactionJobTaskMap"),
("read_only_space", 0x05ac1): (123, "PromiseRejectReactionJobTaskMap"),
("read_only_space", 0x05b11): (124, "PromiseResolveThenableJobTaskMap"),
("read_only_space", 0x05b61): (125, "FinalizationGroupCleanupJobTaskMap"),
("read_only_space", 0x05bb1): (126, "AllocationSiteWithWeakNextMap"),
("read_only_space", 0x05c01): (126, "AllocationSiteWithoutWeakNextMap"),
("read_only_space", 0x05c51): (161, "LoadHandler1Map"),
("read_only_space", 0x05ca1): (161, "LoadHandler2Map"),
("read_only_space", 0x05cf1): (161, "LoadHandler3Map"),
("read_only_space", 0x05d41): (169, "StoreHandler0Map"),
("read_only_space", 0x05d91): (169, "StoreHandler1Map"),
("read_only_space", 0x05de1): (169, "StoreHandler2Map"),
("read_only_space", 0x05e31): (169, "StoreHandler3Map"),
("map_space", 0x00141): (1057, "ExternalMap"),
("map_space", 0x00191): (1073, "JSMessageObjectMap"),
}
# List of known V8 objects.
KNOWN_OBJECTS = {
("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",
("read_only_space", 0x001e1): "NullValue",
("read_only_space", 0x00261): "EmptyDescriptorArray",
("read_only_space", 0x002c9): "EmptyWeakFixedArray",
("read_only_space", 0x003c9): "UninitializedValue",
("read_only_space", 0x004d9): "UndefinedValue",
("read_only_space", 0x00559): "NanValue",
("read_only_space", 0x005b9): "TheHoleValue",
("read_only_space", 0x00651): "HoleNanValue",
("read_only_space", 0x00661): "TrueValue",
("read_only_space", 0x00711): "FalseValue",
("read_only_space", 0x00759): "empty_string",
("read_only_space", 0x00c19): "EmptyScopeInfo",
("read_only_space", 0x00c29): "EmptyFixedArray",
("read_only_space", 0x00c39): "ArgumentsMarker",
("read_only_space", 0x00cd9): "Exception",
("read_only_space", 0x00d79): "TerminationException",
("read_only_space", 0x00e21): "OptimizedOut",
("read_only_space", 0x00ec1): "StaleRegister",
("read_only_space", 0x026d1): "EmptyEnumCache",
("read_only_space", 0x02739): "EmptyPropertyArray",
("read_only_space", 0x02749): "EmptyByteArray",
("read_only_space", 0x02759): "EmptyObjectBoilerplateDescription",
("read_only_space", 0x02771): "EmptyArrayBoilerplateDescription",
("read_only_space", 0x027d9): "EmptyClosureFeedbackCellArray",
("read_only_space", 0x027e9): "EmptyFixedUint8Array",
("read_only_space", 0x02809): "EmptyFixedInt8Array",
("read_only_space", 0x02829): "EmptyFixedUint16Array",
("read_only_space", 0x02849): "EmptyFixedInt16Array",
("read_only_space", 0x02869): "EmptyFixedUint32Array",
("read_only_space", 0x02889): "EmptyFixedInt32Array",
("read_only_space", 0x028a9): "EmptyFixedFloat32Array",
("read_only_space", 0x028c9): "EmptyFixedFloat64Array",
("read_only_space", 0x028e9): "EmptyFixedUint8ClampedArray",
("read_only_space", 0x02909): "EmptyFixedBigUint64Array",
("read_only_space", 0x02929): "EmptyFixedBigInt64Array",
("read_only_space", 0x02949): "EmptySloppyArgumentsElements",
("read_only_space", 0x02969): "EmptySlowElementDictionary",
("read_only_space", 0x029b1): "EmptyOrderedHashMap",
("read_only_space", 0x029d9): "EmptyOrderedHashSet",
("read_only_space", 0x02a01): "EmptyFeedbackMetadata",
("read_only_space", 0x02a11): "EmptyPropertyCell",
("read_only_space", 0x02a39): "EmptyPropertyDictionary",
("read_only_space", 0x02a89): "NoOpInterceptorInfo",
("read_only_space", 0x02b29): "EmptyWeakArrayList",
("read_only_space", 0x02b41): "InfinityValue",
("read_only_space", 0x02b51): "MinusZeroValue",
("read_only_space", 0x02b61): "MinusInfinityValue",
("read_only_space", 0x02b71): "SelfReferenceMarker",
("read_only_space", 0x02bc9): "OffHeapTrampolineRelocationInfo",
("read_only_space", 0x02be1): "HashSeed",
("old_space", 0x00141): "ArgumentsIteratorAccessor",
("old_space", 0x001b1): "ArrayLengthAccessor",
("old_space", 0x00221): "BoundFunctionLengthAccessor",
("old_space", 0x00291): "BoundFunctionNameAccessor",
("old_space", 0x00301): "ErrorStackAccessor",
("old_space", 0x00371): "FunctionArgumentsAccessor",
("old_space", 0x003e1): "FunctionCallerAccessor",
("old_space", 0x00451): "FunctionNameAccessor",
("old_space", 0x004c1): "FunctionLengthAccessor",
("old_space", 0x00531): "FunctionPrototypeAccessor",
("old_space", 0x005a1): "StringLengthAccessor",
("old_space", 0x00611): "InvalidPrototypeValidityCell",
("old_space", 0x00621): "EmptyScript",
("old_space", 0x006a1): "ManyClosuresCell",
("old_space", 0x006b9): "ArrayConstructorProtector",
("old_space", 0x006c9): "NoElementsProtector",
("old_space", 0x006f1): "IsConcatSpreadableProtector",
("old_space", 0x00701): "ArraySpeciesProtector",
("old_space", 0x00729): "TypedArraySpeciesProtector",
("old_space", 0x00751): "RegExpSpeciesProtector",
("old_space", 0x00779): "PromiseSpeciesProtector",
("old_space", 0x007a1): "StringLengthProtector",
("old_space", 0x007b1): "ArrayIteratorProtector",
("old_space", 0x007d9): "ArrayBufferDetachingProtector",
("old_space", 0x00801): "PromiseHookProtector",
("old_space", 0x00829): "PromiseResolveProtector",
("old_space", 0x00839): "MapIteratorProtector",
("old_space", 0x00861): "PromiseThenProtector",
("old_space", 0x00889): "SetIteratorProtector",
("old_space", 0x008b1): "StringIteratorProtector",
("old_space", 0x008d9): "SingleCharacterStringCache",
("old_space", 0x010e9): "StringSplitCache",
("old_space", 0x018f9): "RegExpMultipleCache",
("old_space", 0x02109): "BuiltinsConstantsTable",
}
# List of known V8 Frame Markers.