• 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
heap.h 104 KB