v8/src
Leszek Swirski c4a062a958 Reland^2 "[serializer] Allocate during deserialization"
This is a reland of 28a30c578c
which was a reland of 5d7a29c90e

The crashes were from calling RegisterDeserializerFinished on a null
Isolate pointer, for a deserializer that was never initialised
(specifically, ReadOnlyDeserializer when ROHeap is shared).

Original change's description:
> Reland "[serializer] Allocate during deserialization"
>
> This is a reland of 5d7a29c90e
>
> This reland shuffles around the order of checks in Heap::AllocateRawWith
> to not check the new space addresses until it's known that this is a new
> space allocation. This fixes an UBSan failure during read-only space
> deserialization, which happens before the new space is initialized.
>
> It also fixes some issues discovered by --stress-snapshot, around
> serializing ThinStrings (which are now elided as part of serialization),
> handle counts (I bumped the maximum handle count in that check), and
> clearing map transitions (the map backpointer field needed a Smi
> uninitialized value check).
>
> Original change's description:
> > [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}
>
> Bug: chromium:1075999
> Change-Id: Ibc77cc48b3440b4a28b09746cfc47e50c340ce54
> Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2440828
> Commit-Queue: Leszek Swirski <leszeks@chromium.org>
> Auto-Submit: Leszek Swirski <leszeks@chromium.org>
> Reviewed-by: Ulan Degenbaev <ulan@chromium.org>
> Reviewed-by: Jakob Gruber <jgruber@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#70267}

Tbr: jgruber@chromium.org,ulan@chromium.org
Bug: chromium:1075999
Change-Id: Iaa8dc54895866ada0e34a7c9e8fff9ae1cb13f2d
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2444991
Reviewed-by: Ulan Degenbaev <ulan@chromium.org>
Commit-Queue: Leszek Swirski <leszeks@chromium.org>
Cr-Commit-Position: refs/heads/master@{#70279}
2020-10-02 10:32:46 +00:00
..
api [Turbofan] Never serialize CallHandlerInfo objects 2020-09-30 16:08:43 +00:00
asmjs [wasm][cleanup] Rename kLocal<type> constants -> k<type>Code 2020-09-29 08:48:21 +00:00
ast [parser] Fix AST func reindexing for function fields 2020-10-01 07:53:01 +00:00
base [mac] Fix arm64 simulator builds on x64 Mac HW 2020-09-22 11:28:38 +00:00
builtins [CSA] Tnodify CodeAssembler::Parameter 2020-10-01 16:07:03 +00:00
codegen [x64] Convert pinsrb family of instructions to take uint8_t immediate 2020-10-02 02:07:16 +00:00
common Reland^2 "[serializer] Allocate during deserialization" 2020-10-02 10:32:46 +00:00
compiler Reland^2 "[serializer] Allocate during deserialization" 2020-10-02 10:32:46 +00:00
compiler-dispatcher [nci] Implement tier-up (part 3, spawn task & install) 2020-09-10 12:50:05 +00:00
d8 Fix unhandled promise rejections in REPRL mode 2020-09-30 13:34:23 +00:00
date Make ToInteger always truncate -0 2020-03-02 20:40:01 +00:00
debug [debug] consider Object.keys free of side effects 2020-10-01 10:40:02 +00:00
deoptimizer Rename legacy code kinds 2020-09-30 15:39:23 +00:00
diagnostics Reland^2 "[serializer] Allocate during deserialization" 2020-10-02 10:32:46 +00:00
execution Reland^2 "[serializer] Allocate during deserialization" 2020-10-02 10:32:46 +00:00
extensions [clang-tidy] Remove unneeded casts 2020-06-10 20:47:50 +00:00
flags Reland^2 "[serializer] Allocate during deserialization" 2020-10-02 10:32:46 +00:00
handles Reland^2 "[serializer] Allocate during deserialization" 2020-10-02 10:32:46 +00:00
heap Reland^2 "[serializer] Allocate during deserialization" 2020-10-02 10:32:46 +00:00
ic [CSA] Tnodify CodeAssembler::Parameter 2020-10-01 16:07:03 +00:00
init [ptr-cmpr] Remove runtime Isolate allocation flag 2020-10-01 15:34:13 +00:00
inspector DevTools: add support for injecting bindings by context name 2020-10-01 17:20:04 +00:00
interpreter [CSA] Tnodify CodeAssembler::Parameter 2020-10-01 16:07:03 +00:00
json [globals] Change uc32 to be unsigned 2020-06-10 08:37:46 +00:00
libplatform [Jobs]: Fix task id lifetime. 2020-09-29 18:00:33 +00:00
libsampler [cpu-profiler] Ensure sampled thread has Isolate lock under Windows 2020-09-16 16:17:39 +00:00
logging [heap] New mechanism for requesting GC from background threads 2020-10-01 08:53:41 +00:00
numbers [cleanup] Remove stale TODOs related to RO_SPACE 2020-09-08 08:53:54 +00:00
objects Reland^2 "[serializer] Allocate during deserialization" 2020-10-02 10:32:46 +00:00
parsing [cleanup] Remove 'RT' suffix on Runtime ToString function 2020-09-25 21:18:32 +00:00
profiler [cpu-profiler] Refactor ProfileGenerator 2020-10-01 08:33:11 +00:00
protobuf
regexp [regexp] Refactor experimental instruction emits and labels 2020-09-30 14:14:54 +00:00
roots Reland^2 "[serializer] Allocate during deserialization" 2020-10-02 10:32:46 +00:00
runtime [cleanup] Remove 'RT' suffix on Runtime ToString function 2020-09-25 21:18:32 +00:00
sanitizer [platform] Add SharedMemory allocation and mapping 2020-07-30 18:31:21 +00:00
snapshot Reland^2 "[serializer] Allocate during deserialization" 2020-10-02 10:32:46 +00:00
strings [handles] Add a PatchValue method for Handle 2020-09-23 12:09:36 +00:00
tasks Reland2: [Atomics.waitAsync] Implement Atomics.waitAsync 2020-07-21 06:43:48 +00:00
third_party Enable full WASM function names with arguments for Intel VTune 2020-07-13 14:01:27 +00:00
torque [CSA] Tnodify CodeAssembler::Parameter 2020-10-01 16:07:03 +00:00
tracing [wasm] Introduce v8.wasm.detailed trace event category 2020-06-03 18:52:50 +00:00
trap-handler [cleanup] Consistent comments on namespace ends 2020-08-17 10:09:02 +00:00
utils Reland^2 "[serializer] Allocate during deserialization" 2020-10-02 10:32:46 +00:00
wasm [x64] Convert pinsrb family of instructions to take uint8_t immediate 2020-10-02 02:07:16 +00:00
zone [zone] Remove redundant size roundup in Zone 2020-09-29 10:10:11 +00:00
DEPS [heap] Add conservative stack scanning 2020-09-01 12:21:29 +00:00
OWNERS