From b0bf37528fb43c799f381717b9f84720ec8dcacd Mon Sep 17 00:00:00 2001 From: Dan Elphick Date: Wed, 24 Oct 2018 16:31:41 +0100 Subject: [PATCH] [heap] Move hash_seed into RO_SPACE Creates the hash_seed byte array in RO_SPACE and moves the root from STRONG_MUTABLE_IMMOVABLE_ROOT_LIST to STRONG_READ_ONLY_ROOT_LIST. Bug: v8:8191 Change-Id: I3b044fbb3e51eb5d21ac2e68a54076623865b9d2 Reviewed-on: https://chromium-review.googlesource.com/c/1297959 Commit-Queue: Dan Elphick Reviewed-by: Ulan Degenbaev Cr-Commit-Position: refs/heads/master@{#56960} --- src/heap/heap-inl.h | 3 +- src/heap/heap.cc | 4 +- src/heap/setup-heap-internal.cc | 2 +- src/roots.h | 6 +-- tools/v8heapconst.py | 72 ++++++++++++++++----------------- 5 files changed, 45 insertions(+), 42 deletions(-) diff --git a/src/heap/heap-inl.h b/src/heap/heap-inl.h index 5551ccf5d6..19e4be499b 100644 --- a/src/heap/heap-inl.h +++ b/src/heap/heap-inl.h @@ -555,7 +555,8 @@ Oddball* Heap::ToBoolean(bool condition) { uint64_t Heap::HashSeed() { uint64_t seed; - hash_seed()->copy_out(0, reinterpret_cast(&seed), kInt64Size); + ReadOnlyRoots(this).hash_seed()->copy_out(0, reinterpret_cast(&seed), + kInt64Size); DCHECK(FLAG_randomize_hashes || seed == 0); return seed; } diff --git a/src/heap/heap.cc b/src/heap/heap.cc index 3985f55de7..424843c2e8 100644 --- a/src/heap/heap.cc +++ b/src/heap/heap.cc @@ -4413,6 +4413,7 @@ void Heap::SetUp() { } void Heap::InitializeHashSeed() { + DCHECK(!deserialization_complete_); uint64_t new_hash_seed; if (FLAG_hash_seed == 0) { int64_t rnd = isolate()->random_number_generator()->NextInt64(); @@ -4420,7 +4421,8 @@ void Heap::InitializeHashSeed() { } else { new_hash_seed = static_cast(FLAG_hash_seed); } - hash_seed()->copy_in(0, reinterpret_cast(&new_hash_seed), kInt64Size); + ReadOnlyRoots(this).hash_seed()->copy_in( + 0, reinterpret_cast(&new_hash_seed), kInt64Size); } void Heap::SetStackLimits() { diff --git a/src/heap/setup-heap-internal.cc b/src/heap/setup-heap-internal.cc index 3e127a0106..da2c3db152 100644 --- a/src/heap/setup-heap-internal.cc +++ b/src/heap/setup-heap-internal.cc @@ -623,7 +623,7 @@ void Heap::CreateInitialObjects() { set_minus_infinity_value( *factory->NewHeapNumber(-V8_INFINITY, TENURED_READ_ONLY)); - set_hash_seed(*factory->NewByteArray(kInt64Size, TENURED)); + set_hash_seed(*factory->NewByteArray(kInt64Size, TENURED_READ_ONLY)); InitializeHashSeed(); // There's no "current microtask" in the beginning. diff --git a/src/roots.h b/src/roots.h index f9d811f63d..37abd12850 100644 --- a/src/roots.h +++ b/src/roots.h @@ -215,7 +215,9 @@ class RootVisitor; V(HeapObject*, self_reference_marker, SelfReferenceMarker) \ /* Canonical trampoline RelocInfo */ \ V(ByteArray*, off_heap_trampoline_relocation_info, \ - OffHeapTrampolineRelocationInfo) + OffHeapTrampolineRelocationInfo) \ + /* Hash seed */ \ + V(ByteArray*, hash_seed, HashSeed) // Mutable roots that are known to be immortal immovable, for which we can // safely skip write barriers. @@ -253,8 +255,6 @@ class RootVisitor; V(MicrotaskQueue*, default_microtask_queue, DefaultMicrotaskQueue) \ /* Indirection lists for isolate-independent builtins */ \ V(FixedArray*, builtins_constants_table, BuiltinsConstantsTable) \ - /* Hash seed */ \ - V(ByteArray*, hash_seed, HashSeed) \ /* JS Entries */ \ V(Code*, js_entry_code, JsEntryCode) \ V(Code*, js_construct_entry_code, JsConstructEntryCode) \ diff --git a/tools/v8heapconst.py b/tools/v8heapconst.py index 1d2eafefb9..82f52f10b4 100644 --- a/tools/v8heapconst.py +++ b/tools/v8heapconst.py @@ -296,41 +296,41 @@ KNOWN_MAPS = { ("RO_SPACE", 0x02699): (171, "Tuple2Map"), ("RO_SPACE", 0x02739): (173, "ArrayBoilerplateDescriptionMap"), ("RO_SPACE", 0x02a79): (161, "InterceptorInfoMap"), - ("RO_SPACE", 0x050c1): (153, "AccessCheckInfoMap"), - ("RO_SPACE", 0x05111): (154, "AccessorInfoMap"), - ("RO_SPACE", 0x05161): (155, "AccessorPairMap"), - ("RO_SPACE", 0x051b1): (156, "AliasedArgumentsEntryMap"), - ("RO_SPACE", 0x05201): (157, "AllocationMementoMap"), - ("RO_SPACE", 0x05251): (158, "AsyncGeneratorRequestMap"), - ("RO_SPACE", 0x052a1): (159, "DebugInfoMap"), - ("RO_SPACE", 0x052f1): (160, "FunctionTemplateInfoMap"), - ("RO_SPACE", 0x05341): (162, "InterpreterDataMap"), - ("RO_SPACE", 0x05391): (163, "ModuleInfoEntryMap"), - ("RO_SPACE", 0x053e1): (164, "ModuleMap"), - ("RO_SPACE", 0x05431): (165, "ObjectTemplateInfoMap"), - ("RO_SPACE", 0x05481): (166, "PromiseCapabilityMap"), - ("RO_SPACE", 0x054d1): (167, "PromiseReactionMap"), - ("RO_SPACE", 0x05521): (168, "PrototypeInfoMap"), - ("RO_SPACE", 0x05571): (169, "ScriptMap"), - ("RO_SPACE", 0x055c1): (170, "StackFrameInfoMap"), - ("RO_SPACE", 0x05611): (172, "Tuple3Map"), - ("RO_SPACE", 0x05661): (174, "WasmDebugInfoMap"), - ("RO_SPACE", 0x056b1): (175, "WasmExportedFunctionDataMap"), - ("RO_SPACE", 0x05701): (176, "CallableTaskMap"), - ("RO_SPACE", 0x05751): (177, "CallbackTaskMap"), - ("RO_SPACE", 0x057a1): (178, "PromiseFulfillReactionJobTaskMap"), - ("RO_SPACE", 0x057f1): (179, "PromiseRejectReactionJobTaskMap"), - ("RO_SPACE", 0x05841): (180, "PromiseResolveThenableJobTaskMap"), - ("RO_SPACE", 0x05891): (181, "MicrotaskQueueMap"), - ("RO_SPACE", 0x058e1): (182, "AllocationSiteWithWeakNextMap"), - ("RO_SPACE", 0x05931): (182, "AllocationSiteWithoutWeakNextMap"), - ("RO_SPACE", 0x05981): (214, "LoadHandler1Map"), - ("RO_SPACE", 0x059d1): (214, "LoadHandler2Map"), - ("RO_SPACE", 0x05a21): (214, "LoadHandler3Map"), - ("RO_SPACE", 0x05a71): (221, "StoreHandler0Map"), - ("RO_SPACE", 0x05ac1): (221, "StoreHandler1Map"), - ("RO_SPACE", 0x05b11): (221, "StoreHandler2Map"), - ("RO_SPACE", 0x05b61): (221, "StoreHandler3Map"), + ("RO_SPACE", 0x050d9): (153, "AccessCheckInfoMap"), + ("RO_SPACE", 0x05129): (154, "AccessorInfoMap"), + ("RO_SPACE", 0x05179): (155, "AccessorPairMap"), + ("RO_SPACE", 0x051c9): (156, "AliasedArgumentsEntryMap"), + ("RO_SPACE", 0x05219): (157, "AllocationMementoMap"), + ("RO_SPACE", 0x05269): (158, "AsyncGeneratorRequestMap"), + ("RO_SPACE", 0x052b9): (159, "DebugInfoMap"), + ("RO_SPACE", 0x05309): (160, "FunctionTemplateInfoMap"), + ("RO_SPACE", 0x05359): (162, "InterpreterDataMap"), + ("RO_SPACE", 0x053a9): (163, "ModuleInfoEntryMap"), + ("RO_SPACE", 0x053f9): (164, "ModuleMap"), + ("RO_SPACE", 0x05449): (165, "ObjectTemplateInfoMap"), + ("RO_SPACE", 0x05499): (166, "PromiseCapabilityMap"), + ("RO_SPACE", 0x054e9): (167, "PromiseReactionMap"), + ("RO_SPACE", 0x05539): (168, "PrototypeInfoMap"), + ("RO_SPACE", 0x05589): (169, "ScriptMap"), + ("RO_SPACE", 0x055d9): (170, "StackFrameInfoMap"), + ("RO_SPACE", 0x05629): (172, "Tuple3Map"), + ("RO_SPACE", 0x05679): (174, "WasmDebugInfoMap"), + ("RO_SPACE", 0x056c9): (175, "WasmExportedFunctionDataMap"), + ("RO_SPACE", 0x05719): (176, "CallableTaskMap"), + ("RO_SPACE", 0x05769): (177, "CallbackTaskMap"), + ("RO_SPACE", 0x057b9): (178, "PromiseFulfillReactionJobTaskMap"), + ("RO_SPACE", 0x05809): (179, "PromiseRejectReactionJobTaskMap"), + ("RO_SPACE", 0x05859): (180, "PromiseResolveThenableJobTaskMap"), + ("RO_SPACE", 0x058a9): (181, "MicrotaskQueueMap"), + ("RO_SPACE", 0x058f9): (182, "AllocationSiteWithWeakNextMap"), + ("RO_SPACE", 0x05949): (182, "AllocationSiteWithoutWeakNextMap"), + ("RO_SPACE", 0x05999): (214, "LoadHandler1Map"), + ("RO_SPACE", 0x059e9): (214, "LoadHandler2Map"), + ("RO_SPACE", 0x05a39): (214, "LoadHandler3Map"), + ("RO_SPACE", 0x05a89): (221, "StoreHandler0Map"), + ("RO_SPACE", 0x05ad9): (221, "StoreHandler1Map"), + ("RO_SPACE", 0x05b29): (221, "StoreHandler2Map"), + ("RO_SPACE", 0x05b79): (221, "StoreHandler3Map"), ("MAP_SPACE", 0x00139): (1057, "ExternalMap"), ("MAP_SPACE", 0x00189): (1073, "JSMessageObjectMap"), } @@ -385,6 +385,7 @@ KNOWN_OBJECTS = { ("RO_SPACE", 0x02b01): "MinusInfinityValue", ("RO_SPACE", 0x02b11): "SelfReferenceMarker", ("RO_SPACE", 0x02b69): "OffHeapTrampolineRelocationInfo", + ("RO_SPACE", 0x02b81): "HashSeed", ("OLD_SPACE", 0x00139): "ArgumentsIteratorAccessor", ("OLD_SPACE", 0x001a9): "ArrayLengthAccessor", ("OLD_SPACE", 0x00219): "BoundFunctionLengthAccessor", @@ -419,7 +420,6 @@ KNOWN_OBJECTS = { ("OLD_SPACE", 0x018c1): "RegExpMultipleCache", ("OLD_SPACE", 0x020d1): "DefaultMicrotaskQueue", ("OLD_SPACE", 0x020e9): "BuiltinsConstantsTable", - ("OLD_SPACE", 0x02a11): "HashSeed", } # List of known V8 Frame Markers.