• Dominik Inführ's avatar
    [heap] Fix failing DCHECK with original_top < top · ca448997
    Dominik Inführ authored
    The problem here was that IncrementalMarking::Step was invoking
    new_space()->ResetOriginalTop() which sets original_top to the current
    top. IncrementalMarking::Step could be invoked during
    InvokeAllocationObservers(), which is called right after acquiring a
    new LAB and allocating the first object in it. However this first
    allocation might be from generated code with allocation folding enabled.
    The generated code might not use all of the memory it allocated and in
    that process move top backwards again. Nevertheless
    InvokeAllocationObservers() could already set original_top to the
    current top. If the generated code later not uses all of that
    memory, original_top can be bigger than top.
    
    Fix this problem by ensuring that original_top always equals the LAB
    start. Each time LAB start is moved/accounted for, original_top is now
    updated as well for the new space. Also IncrementalMarking::Step()
    isn't allowed to move original_top anymore.
    
    Bug: chromium:1116278, v8:10315
    Change-Id: Ib18a0b07e2665b8ba933555387b84329cbecdf5b
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2398519Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
    Reviewed-by: 's avatarIgor Sheludko <ishell@chromium.org>
    Commit-Queue: Dominik Inführ <dinfuehr@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#69840}
    ca448997
Name
Last commit
Last update
..
api Loading commit data...
asmjs Loading commit data...
ast Loading commit data...
base Loading commit data...
builtins Loading commit data...
codegen Loading commit data...
common Loading commit data...
compiler Loading commit data...
compiler-dispatcher Loading commit data...
d8 Loading commit data...
date Loading commit data...
debug Loading commit data...
deoptimizer Loading commit data...
diagnostics Loading commit data...
execution Loading commit data...
extensions Loading commit data...
flags Loading commit data...
handles Loading commit data...
heap Loading commit data...
ic Loading commit data...
init Loading commit data...
inspector Loading commit data...
interpreter Loading commit data...
json Loading commit data...
libplatform Loading commit data...
libsampler Loading commit data...
logging Loading commit data...
numbers Loading commit data...
objects Loading commit data...
parsing Loading commit data...
profiler Loading commit data...
protobuf Loading commit data...
regexp Loading commit data...
roots Loading commit data...
runtime Loading commit data...
sanitizer Loading commit data...
snapshot Loading commit data...
strings Loading commit data...
tasks Loading commit data...
third_party Loading commit data...
torque Loading commit data...
tracing Loading commit data...
trap-handler Loading commit data...
utils Loading commit data...
wasm Loading commit data...
zone Loading commit data...
DEPS Loading commit data...
OWNERS Loading commit data...