Reland "Document RootIndexMap's requirement for immovable roots."
This is a reland of bb881c8880
Original change's description:
> Document RootIndexMap's requirement for immovable roots.
>
> R=mstarzinger@chromium.org
>
> Change-Id: I27cf279c77204becc449221e1bcebeacbc275792
> Reviewed-on: https://chromium-review.googlesource.com/565281
> Commit-Queue: Yang Guo <yangguo@chromium.org>
> Reviewed-by: Michael Starzinger <mstarzinger@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#46517}
Change-Id: I6eeb68cee3bd2dff0eb6696bbe43a4d602ab960d
Reviewed-on: https://chromium-review.googlesource.com/566458
Reviewed-by: Michael Starzinger <mstarzinger@chromium.org>
Commit-Queue: Yang Guo <yangguo@chromium.org>
Cr-Commit-Position: refs/heads/master@{#46548}
This commit is contained in:
parent
bfba293c8d
commit
39bfd31588
@ -20,6 +20,8 @@ RootIndexMap::RootIndexMap(Isolate* isolate) {
|
||||
if (!root->IsHeapObject()) continue;
|
||||
// Omit root entries that can be written after initialization. They must
|
||||
// not be referenced through the root list in the snapshot.
|
||||
// Since we map the raw address of an root item to its root list index, the
|
||||
// raw address must be constant, i.e. the object must be immovable.
|
||||
if (isolate->heap()->RootCanBeTreatedAsConstant(root_index)) {
|
||||
HeapObject* heap_object = HeapObject::cast(root);
|
||||
Maybe<uint32_t> maybe_index = map_->Get(heap_object);
|
||||
|
@ -2908,6 +2908,7 @@ bool Heap::RootCanBeWrittenAfterInitialization(Heap::RootListIndex root_index) {
|
||||
case kPublicSymbolTableRootIndex:
|
||||
case kApiSymbolTableRootIndex:
|
||||
case kApiPrivateSymbolTableRootIndex:
|
||||
case kMessageListenersRootIndex:
|
||||
// Smi values
|
||||
#define SMI_ENTRY(type, name, Name) case k##Name##RootIndex:
|
||||
SMI_ROOT_LIST(SMI_ENTRY)
|
||||
@ -2922,8 +2923,10 @@ bool Heap::RootCanBeWrittenAfterInitialization(Heap::RootListIndex root_index) {
|
||||
}
|
||||
|
||||
bool Heap::RootCanBeTreatedAsConstant(RootListIndex root_index) {
|
||||
return !RootCanBeWrittenAfterInitialization(root_index) &&
|
||||
!InNewSpace(root(root_index));
|
||||
bool can_be = !RootCanBeWrittenAfterInitialization(root_index) &&
|
||||
!InNewSpace(root(root_index));
|
||||
DCHECK_IMPLIES(can_be, IsImmovable(HeapObject::cast(root(root_index))));
|
||||
return can_be;
|
||||
}
|
||||
|
||||
int Heap::FullSizeNumberStringCacheLength() {
|
||||
|
Loading…
Reference in New Issue
Block a user