v8/test/cctest/heap
Leszek Swirski 5d7a29c90e [serializer] Allocate during deserialization
This patch removes the concept of reservations and a specialized
deserializer allocator, and instead makes the deserializer allocate
directly with the Heap's Allocate method.

The major consequence of this is that the GC can now run during
deserialization, which means that:

  a) Deserialized objects are visible to the GC, and
  b) Objects that the deserializer/deserialized objects point to can
     move.

Point a) is mostly not a problem due to previous work in making
deserialized objects "GC valid", i.e. making sure that they have a valid
size before any subsequent allocation/safepoint. We now additionally
have to initialize the allocated space with a valid tagged value -- this
is a magic Smi value to keep "uninitialized" checks simple.

Point b) is solved by Handlifying the deserializer. This involves
changing any vectors of objects into vectors of Handles, and any object
keyed map into an IdentityMap (we can't use Handles as keys because
the object's address is no longer a stable hash).

Back-references can no longer be direct chunk offsets, so instead the
deserializer stores a Handle to each deserialized object, and the
backreference is an index into this handle array. This encoding could
be optimized in the future with e.g. a second pass over the serialized
array which emits a different bytecode for objects that are and aren't
back-referenced.

Additionally, the slot-walk over objects to initialize them can no
longer use absolute slot offsets, as again an object may move and its
slot address would become invalid. Now, slots are walked as relative
offsets to a Handle to the object, or as absolute slots for the case of
root pointers. A concept of "slot accessor" is introduced to share the
code between these two modes, and writing the slot (including write
barriers) is abstracted into this accessor.

Finally, the Code body walk is modified to deserialize all objects
referred to by RelocInfos before doing the RelocInfo walk itself. This
is because RelocInfoIterator uses raw pointers, so we cannot allocate
during a RelocInfo walk.

As a drive-by, the VariableRawData bytecode is tweaked to use tagged
size rather than byte size -- the size is expected to be tagged-aligned
anyway, so now we get an extra few bits in the size encoding.

Bug: chromium:1075999
Change-Id: I672c42f553f2669888cc5e35d692c1b8ece1845e
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2404451
Commit-Queue: Leszek Swirski <leszeks@chromium.org>
Reviewed-by: Jakob Gruber <jgruber@chromium.org>
Reviewed-by: Ulan Degenbaev <ulan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#70229}
2020-09-30 14:04:03 +00:00
..
heap-tester.h [heap] Add large_object_threshold to AllocateRaw 2020-09-14 12:12:40 +00:00
heap-utils.cc [test] Tests should only invoke NewSpace::Grow in safepoint 2020-09-24 16:14:10 +00:00
heap-utils.h [test] Tests should only invoke NewSpace::Grow in safepoint 2020-09-24 16:14:10 +00:00
test-alloc.cc [serializer] Allocate during deserialization 2020-09-30 14:04:03 +00:00
test-array-buffer-tracker.cc [heap] Remove ArrayBufferTracker 2020-08-12 09:00:07 +00:00
test-compaction.cc [ptr-compr][ppc] Implement pointer compression 2020-05-06 19:06:32 +00:00
test-concurrent-allocation.cc [heap] Fix regressions in the configuration without concurrent marking 2020-09-22 07:41:43 +00:00
test-concurrent-marking.cc Revert "[Heap]: Marking use Jobs." 2020-09-22 12:32:01 +00:00
test-embedder-tracing.cc Reland "[heap] Add concurrent typed slot recording" 2020-09-03 11:16:44 +00:00
test-external-string-tracker.cc Reland^2 "[heap] Move start of incremental marking in allocation" 2020-07-14 12:07:34 +00:00
test-heap.cc [serializer] Allocate during deserialization 2020-09-30 14:04:03 +00:00
test-incremental-marking.cc Disable --stress-concurrent-allocation for tests that change free lists 2020-09-03 11:15:39 +00:00
test-invalidated-slots.cc Disable --stress-concurrent-allocation for tests that change free lists 2020-09-03 11:15:39 +00:00
test-iterators.cc Reland "[heap] Make ReadOnlySpace use bump pointer allocation" 2020-06-18 11:48:38 +00:00
test-lab.cc [torque] Use generated instance types, part 1 2019-10-28 18:30:31 +00:00
test-mark-compact.cc Disable --stress-concurrent-allocation for tests that change free lists 2020-09-03 11:15:39 +00:00
test-memory-measurement.cc [test] Fix UAF in cctest/test-memory-measurement/RandomizedTimeout 2020-07-10 08:52:00 +00:00
test-page-promotion.cc [test] Tests should only invoke NewSpace::Grow in safepoint 2020-09-24 16:14:10 +00:00
test-spaces.cc [test] Tests should only invoke NewSpace::Grow in safepoint 2020-09-24 16:14:10 +00:00
test-unmapper.cc Disable --stress-concurrent-allocation for tests that change free lists 2020-09-03 11:15:39 +00:00
test-weak-references.cc [nci] Replace CompilationTarget with a new Code::Kind value 2020-08-05 12:27:22 +00:00
test-write-barrier.cc [heap] Consolidate marking write barrier logic in MarkingBarrier 2020-07-07 10:34:37 +00:00