v8/test
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
..
benchmarks [test] Skip some slow benchmarks 2020-09-14 08:43:44 +00:00
cctest Reland^2 "[serializer] Allocate during deserialization" 2020-10-02 10:32:46 +00:00
common [wasm] Rename {ValidateFlag} constants 2020-09-30 13:19:03 +00:00
debugger [debug] consider Object.keys free of side effects 2020-10-01 10:40:02 +00:00
debugging [Py3] Fix flake8 warnings 2020-07-10 16:57:15 +00:00
fuzzer Rename legacy code kinds 2020-09-30 15:39:23 +00:00
fuzzilli Fix unhandled promise rejections in REPRL mode 2020-09-30 13:34:23 +00:00
inspector DevTools: add support for injecting bindings by context name 2020-10-01 17:20:04 +00:00
intl Reland "[intl] Impl ECMA402 PR 471 rounding behavior" 2020-10-02 00:14:46 +00:00
js-perf-test [super property speed] Invert benchmark graphs 2020-08-31 09:24:46 +00:00
memory Reland^2 "[serializer] Allocate during deserialization" 2020-10-02 10:32:46 +00:00
message Reland "[d8] Avoid recursive unhandled rejected Promise processing" 2020-09-23 08:12:59 +00:00
mjsunit [parser] Fix AST func reindexing for function fields 2020-10-01 07:53:01 +00:00
mkgrokdump [heap] Move BaseSpace into base-space.h 2020-06-19 09:38:24 +00:00
mozilla [Respect] Prefer inclusive terms 2020-06-22 18:11:23 +00:00
test262 Reland "[intl] Impl ECMA402 PR 471 rounding behavior" 2020-10-02 00:14:46 +00:00
torque Reland "[torque] typed context slot access" 2020-08-06 11:32:38 +00:00
unittests Disable GCStackTest.IteratePointersFindsParameterNesting8 for MSVC 2020-10-02 09:08:46 +00:00
wasm-api-tests [ukm][wasm] Add event WasmModuleDecoded 2020-08-17 12:44:33 +00:00
wasm-js Revert "[wasm] Update spec tests" 2020-10-01 07:35:51 +00:00
wasm-spec-tests [wasm-simd][scalar-lowering] Fix lowering of narrowing 2020-10-01 21:01:56 +00:00
webkit Disallow \8 and \9 in strict mode and template literals 2020-08-03 18:05:14 +00:00
BUILD.gn Add google_benchmark depdendency 2020-07-02 20:11:29 +00:00
OWNERS Use relative paths to OWNERS files 2019-08-12 13:52:52 +00:00