• Dominik Inführ's avatar
    [heap] Support transitioning of code objects · d1f2a83b
    Dominik Inführ authored
    This CL adds support for updating code objects. So far code objects
    were immutable. Sparkplug makes compilation a very frequent operation
    and thus wants to avoid copying the instruction stream from the
    AssemblerBuffer into the code object (with more overhead that entails).
    The idea is to allocate an "empty" Code object initially, which is
    likely large enough to hold the full instruction stream. Then Sparkplug
    will compile the given function and write the instruction stream
    directly into the code object. After compilation is done Sparkplug trims
    the Code to the right size and finishes its initialization.
    
    We use relocation_info to determine whether a Code object is fully
    initialized: undefined means that this object is filled by SparkPlug
    at the moment. If it's a proper ByteArray, this code object is assumed
    to be initialized. Turbofan still fully initializes the Code object
    immediately.
    
    Before changing the size of the code object, EnsureSweepingCompleted()
    makes sure that the code object's page is swept already. This prevents
    that the concurrent sweeper loads the new and smaller object size and
    stores that memory in the free list.
    
    NotifyCodeObjectChanged() signals the GC that the code object is now
    fully initialized and revisits that object (even if it is black already)
    to find and record outgoing references in the instruction stream.
    
    Design doc: https://docs.google.com/document/d/12LHGkRXY1H3IFMBrdxs2vhgtG9bfJTdquQUsX1oPoSE/edit?usp=sharing
    
    Bug: v8:11872
    Change-Id: Ie1b95b27842eea5ec7e9d345052585a27d6ea7f3
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2999087
    Commit-Queue: Dominik Inführ <dinfuehr@chromium.org>
    Reviewed-by: 's avatarMichael Lippautz <mlippautz@chromium.org>
    Reviewed-by: 's avatarToon Verwaest <verwaest@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#75582}
    d1f2a83b
Name
Last commit
Last update
.github Loading commit data...
bazel Loading commit data...
build_overrides Loading commit data...
custom_deps Loading commit data...
docs Loading commit data...
gni Loading commit data...
include Loading commit data...
infra Loading commit data...
samples Loading commit data...
src Loading commit data...
test Loading commit data...
testing Loading commit data...
third_party Loading commit data...
tools Loading commit data...
.bazelrc Loading commit data...
.clang-format Loading commit data...
.clang-tidy Loading commit data...
.editorconfig Loading commit data...
.flake8 Loading commit data...
.git-blame-ignore-revs Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
.gn Loading commit data...
.mailmap Loading commit data...
.vpython Loading commit data...
.ycm_extra_conf.py Loading commit data...
AUTHORS Loading commit data...
BUILD.bazel Loading commit data...
BUILD.gn Loading commit data...
CODE_OF_CONDUCT.md Loading commit data...
COMMON_OWNERS Loading commit data...
DEPS Loading commit data...
DIR_METADATA Loading commit data...
ENG_REVIEW_OWNERS Loading commit data...
INFRA_OWNERS Loading commit data...
INTL_OWNERS Loading commit data...
LICENSE Loading commit data...
LICENSE.fdlibm Loading commit data...
LICENSE.strongtalk Loading commit data...
LICENSE.v8 Loading commit data...
MIPS_OWNERS Loading commit data...
OWNERS Loading commit data...
PPC_OWNERS Loading commit data...
PRESUBMIT.py Loading commit data...
README.md Loading commit data...
RISCV_OWNERS Loading commit data...
S390_OWNERS Loading commit data...
WATCHLISTS Loading commit data...
WORKSPACE Loading commit data...
codereview.settings Loading commit data...