5#ifndef INCLUDE_V8_SANDBOX_H_
6#define INCLUDE_V8_SANDBOX_H_
145#ifdef V8_COMPRESS_POINTERS
148 Internals::kIsolateCppHeapPointerTableOffset +
150 return *
reinterpret_cast<Address**
>(addr);
156 Address heap_object_ptr,
int offset,
163#ifdef V8_COMPRESS_POINTERS
165 Internals::ReadRawField<CppHeapPointerHandle>(heap_object_ptr, offset);
166 const uint32_t index = handle >> kExternalPointerIndexShift;
167 const Address* table = GetCppHeapPointerTableBase(isolate);
168 const std::atomic<Address>* ptr =
169 reinterpret_cast<const std::atomic<Address>*
>(&table[index]);
170 Address entry = std::atomic_load_explicit(ptr, std::memory_order_relaxed);
178 uint32_t actual_tag =
static_cast<uint16_t
>(entry);
183 uint32_t first_tag =
static_cast<uint32_t
>(tag_range.first) << kTagShift;
184 uint32_t last_tag = (
static_cast<uint32_t
>(tag_range.last) << kTagShift) + 1;
187 if (actual_tag >= first_tag && actual_tag <= last_tag) [[likely]] {
211 return reinterpret_cast<T*
>(safe_entry);
213 return reinterpret_cast<T*
>(
214 Internals::ReadRawField<Address>(heap_object_ptr, offset));
221V8_INLINE static constexpr bool ExternalPointerCanBeEmpty(
Definition: v8-isolate.h:298
Definition: v8-sandbox.h:133
static void InitializeBeforeThreadCreation()
static const int kExternalEntityTableBasePointerOffset
Definition: v8-internal.h:1041
uint32_t CppHeapPointerHandle
Definition: v8-internal.h:413
constexpr uint64_t kCppHeapPointerPayloadShift
Definition: v8-internal.h:430
constexpr uint64_t kCppHeapPointerTagShift
Definition: v8-internal.h:429
uintptr_t Address
Definition: v8-internal.h:38
Definition: libplatform.h:15
constexpr CppHeapPointerTagRange kAnyCppHeapPointer(CppHeapPointerTag::kFirstTag, CppHeapPointerTag::kZappedEntryTag)
internal::TagRange< CppHeapPointerTag > CppHeapPointerTagRange
Definition: v8-sandbox.h:93
constexpr CppHeapPointerTagRange kEmbedderNonWrappableTagRange(CppHeapPointerTag::kFirstEmbedderNonWrappableTag, CppHeapPointerTag::kLastEmbedderNonWrappableTag)
constexpr CppHeapPointerTagRange kNonWrappableTagRange(CppHeapPointerTag::kFirstNonWrappableTag, CppHeapPointerTag::kLastNonWrappableTag)
constexpr CppHeapPointerTagRange kEmbedderWrappableTagRange(CppHeapPointerTag::kFirstEmbedderWrappableTag, CppHeapPointerTag::kLastEmbedderWrappableTag)
CppHeapPointerTag
Definition: v8-sandbox.h:28
@ kFirstEmbedderNonWrappableTag
@ kFirstEmbedderWrappableTag
@ kLastObjectWrappableTag
@ kLastEmbedderWrappableTag
@ kLastV8InternalNonWrappableTag
@ kLastEmbedderNonWrappableTag
@ kLastV8InternalWrappableTag
@ kFirstV8InternalNonWrappableTag
@ kFirstObjectWrappableTag
@ kFirstV8InternalWrappableTag
constexpr CppHeapPointerTagRange kObjectWrappableTagRange(CppHeapPointerTag::kFirstObjectWrappableTag, CppHeapPointerTag::kLastObjectWrappableTag)
Definition: v8-internal.h:528
constexpr bool Contains(Tag tag) const
Definition: v8-internal.h:563
#define V8_EXPORT
Definition: v8config.h:874
#define V8_INLINE
Definition: v8config.h:518