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} |
||
---|---|---|
build_overrides | ||
custom_deps | ||
docs | ||
gni | ||
include | ||
infra | ||
samples | ||
src | ||
test | ||
testing | ||
third_party | ||
tools | ||
.clang-format | ||
.clang-tidy | ||
.editorconfig | ||
.flake8 | ||
.git-blame-ignore-revs | ||
.gitattributes | ||
.gitignore | ||
.gn | ||
.vpython | ||
.ycm_extra_conf.py | ||
AUTHORS | ||
BUILD.gn | ||
CODE_OF_CONDUCT.md | ||
codereview.settings | ||
COMMON_OWNERS | ||
DEPS | ||
ENG_REVIEW_OWNERS | ||
INFRA_OWNERS | ||
INTL_OWNERS | ||
LICENSE | ||
LICENSE.fdlibm | ||
LICENSE.strongtalk | ||
LICENSE.v8 | ||
LICENSE.valgrind | ||
MIPS_OWNERS | ||
OWNERS | ||
PPC_OWNERS | ||
PRESUBMIT.py | ||
README.md | ||
S390_OWNERS | ||
WATCHLISTS |
V8 JavaScript Engine
V8 is Google's open source JavaScript engine.
V8 implements ECMAScript as specified in ECMA-262.
V8 is written in C++ and is used in Google Chrome, the open source browser from Google.
V8 can run standalone, or can be embedded into any C++ application.
V8 Project page: https://v8.dev/docs
Getting the Code
Checkout depot tools, and run
fetch v8
This will checkout V8 into the directory v8
and fetch all of its dependencies.
To stay up to date, run
git pull origin
gclient sync
For fetching all branches, add the following into your remote
configuration in .git/config
:
fetch = +refs/branch-heads/*:refs/remotes/branch-heads/*
fetch = +refs/tags/*:refs/tags/*
Contributing
Please follow the instructions mentioned at v8.dev/docs/contribute.