• Samuel Groß's avatar
    [sandbox] Turn ExternalPointerTag into a template parameter · 8ca93205
    Samuel Groß authored
    The ExternalPointerTags are assumed to be compile-time constants in most
    cases, so turning them into template parameters enforces that. As
    decisions such as whether to use the per-isolate or the shared external
    pointer table are encoded into the tag values, forcing those to be
    compile-time constants guarantees that the compiler will be able to
    inline the correct logic when accessing an external pointer.
    
    With this, there are now two (high-level) ways of accessing external pointer fields from C++: the Read/WriteExternalPointerField methods
    which require the ExternalPointerTag to be a template parameter, and the
    ExternalPointerSlot class which takes the tag as an argument. The latter
    is for example used for snapshot deserialization and by the garbage
    collector (more generally, by the ObjectVisitor::VisitExternalPointer
    method), where the tag is not a compile-time constant.
    
    Finally, this CL also introduces a new ExternalPointerHandle type which
    represents the (opaque) on-heap representation of a reference to an
    entry in an ExternalPointerTable when sandboxing is enabled. Making this
    its own type makes the code a bit more readable.
    
    Bug: v8:10391
    Change-Id: I867b8ce41d15d485f1dc66786f233c710c56afcb
    Cq-Include-Trybots: luci.v8.try:v8_linux64_heap_sandbox_dbg_ng,v8_linux_arm64_sim_heap_sandbox_dbg_ng
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3720641Reviewed-by: 's avatarTobias Tebbi <tebbi@chromium.org>
    Reviewed-by: 's avatarLeszek Swirski <leszeks@chromium.org>
    Commit-Queue: Samuel Groß <saelo@chromium.org>
    Reviewed-by: 's avatarIgor Sheludko <ishell@chromium.org>
    Reviewed-by: 's avatarMichael Lippautz <mlippautz@chromium.org>
    Cr-Commit-Position: refs/heads/main@{#81402}
    8ca93205
Name
Last commit
Last update
..
api Loading commit data...
asmjs Loading commit data...
ast Loading commit data...
base Loading commit data...
baseline Loading commit data...
bigint 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...
maglev 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...
sandbox Loading commit data...
sanitizer Loading commit data...
snapshot Loading commit data...
strings Loading commit data...
tasks Loading commit data...
temporal 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...
web-snapshot Loading commit data...
zone Loading commit data...
DEPS Loading commit data...
DIR_METADATA Loading commit data...
OWNERS Loading commit data...