• 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
code-inl.h 49.7 KB