d3a72e3c2a
This CL implements stack scanning for cppgc. Given a value on the stack, the MarkingVisitor uses PageBackend::Lookup to checks whether that address is on the heap. If it is, BasePage::TryObjectHeaderFromInnerAddress (introduced in this CL) is used to get the relevant object header. Note that random addresses on the heap might point to free memory, object-start-bitmap, etc. If a valid object header is found: * If the object is not in construction, the GCInfoIndex is used the get the relevant Trace method and the object is traced. * Otherwise, the object is conservatively scanned - i.e. the payload of the object is iterated word by word and each word is treated as a possible pointer. Only addresses pointing to the payload on non-free objects are traced. BasePage::TryObjectHeaderFromInnerAddress assumes on LAB on the relevant space, thus all LABs are reset before scanning the stack. Bug: chromium:1056170 Change-Id: I172850f6f1bbb6f0efca8e44ad8fdfe222977b9f Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2190426 Commit-Queue: Omer Katz <omerkatz@chromium.org> Reviewed-by: Michael Lippautz <mlippautz@chromium.org> Reviewed-by: Ulan Degenbaev <ulan@chromium.org> Reviewed-by: Anton Bikineev <bikineev@chromium.org> Cr-Commit-Position: refs/heads/master@{#67795} |
||
---|---|---|
.. | ||
cppgc | ||
barrier-unittest.cc | ||
bitmap-test-utils.h | ||
bitmap-unittest.cc | ||
code-object-registry-unittest.cc | ||
embedder-tracing-unittest.cc | ||
gc-idle-time-handler-unittest.cc | ||
gc-tracer-unittest.cc | ||
heap-controller-unittest.cc | ||
heap-unittest.cc | ||
item-parallel-job-unittest.cc | ||
list-unittest.cc | ||
local-heap-unittest.cc | ||
marking-unittest.cc | ||
marking-worklist-unittest.cc | ||
memory-reducer-unittest.cc | ||
object-stats-unittest.cc | ||
off-thread-factory-unittest.cc | ||
safepoint-unittest.cc | ||
slot-set-unittest.cc | ||
spaces-unittest.cc | ||
unmapper-unittest.cc | ||
worklist-unittest.cc |