44 : main_thread_flags_(flags)
45#ifndef V8_ENABLE_SANDBOX
50#ifdef V8_ENABLE_SANDBOX
51 auto metadata_index = MetadataTableIndex(
address());
54 metadata_pointer_table[metadata_index] == metadata);
55 metadata_pointer_table[metadata_index] = metadata;
56 metadata_index_ = metadata_index;
60#ifdef V8_ENABLE_SANDBOX
63 uint32_t metadata_index = MetadataTableIndex(metadata->
ChunkAddress());
65 DCHECK_EQ(metadata_pointer_table[metadata_index], metadata);
66 metadata_pointer_table[metadata_index] =
nullptr;
70uint32_t MemoryChunk::MetadataTableIndex(
Address chunk_address) {
74 static_assert(kPtrComprCageReservationSize == kPtrComprCageBaseAlignment);
77 index = MemoryChunkConstants::kMainCageMetadataOffset +
79 }
else if (TrustedRange::GetProcessWideTrustedRange()->region().contains(
83 MemoryChunkConstants::kPagesInTrustedCage);
84 index = MemoryChunkConstants::kTrustedSpaceMetadataOffset +
88 DCHECK(code_range->region().contains(chunk_address));
89 uint32_t
offset =
static_cast<uint32_t
>(chunk_address - code_range->base());
91 index = MemoryChunkConstants::kCodeRangeMetadataOffset +
94 DCHECK_LT(index, MemoryChunkConstants::kMetadataPointerTableSize);
103#ifdef THREAD_SANITIZER
108 Metadata()->SynchronizedHeapStore();
109#ifndef V8_ENABLE_SANDBOX
114 static_assert(
sizeof(
base::AtomicWord) ==
sizeof(metadata_pointer_table[0]));
117 &metadata_pointer_table[metadata_index_]),
119 metadata_pointer_table[metadata_index_]));
126#ifdef THREAD_SANITIZER
128void MemoryChunk::SynchronizedLoad()
const {
129#ifndef V8_ENABLE_SANDBOX
135 static_assert(
sizeof(
base::AtomicWord) ==
sizeof(metadata_pointer_table[0]));
137 uint32_t metadata_index =
139 &(
const_cast<MemoryChunk*
>(
this)->metadata_index_)));
142 &metadata_pointer_table[metadata_index])));
144 metadata->SynchronizedHeapLoad();
274#ifdef V8_ENABLE_SANDBOX
275bool MemoryChunk::SandboxSafeInReadOnlySpace()
const {
289 MemoryChunkMetadata** metadata_pointer_table = MetadataTableAddress();
290 MemoryChunkMetadata* metadata = metadata_pointer_table
291 [metadata_index_ & MemoryChunkConstants::kMetadataPointerTableSizeMask];
293 static_cast<const ReadOnlyPageMetadata*
>(metadata)->ChunkAddress(),
constexpr int kPageSizeBits
#define SBXCHECK_EQ(lhs, rhs)
AllocationSpace identity() const
static IsolateGroup * current()
CodeRange * GetCodeRange() const
void ClearFlagSlow(Flag flag)
static constexpr MainThreadFlags kAllFlagsMask
static constexpr MainThreadFlags kPointersToHereAreInterestingMask
void SetOldGenerationPageFlags(MarkingMode marking_mode, AllocationSpace space)
void InitializationMemoryFence()
@ POINTERS_FROM_HERE_ARE_INTERESTING
@ IS_MAJOR_GC_IN_PROGRESS
@ POINTERS_TO_HERE_ARE_INTERESTING
V8_INLINE void SetFlagNonExecutable(Flag flag)
V8_INLINE void SetFlagUnlocked(Flag flag)
size_t OffsetMaybeOutOfRange(Address addr) const
static MainThreadFlags OldGenerationPageFlags(MarkingMode marking_mode, AllocationSpace space)
static constexpr MainThreadFlags kIsInYoungGenerationMask
Executability executable() const
V8_INLINE bool IsFlagSet(Flag flag) const
V8_INLINE Address address() const
V8_INLINE void SetFlagsNonExecutable(MainThreadFlags flags, MainThreadFlags mask=kAllFlagsMask)
V8_INLINE MemoryChunkMetadata * Metadata()
static constexpr MainThreadFlags kPointersFromHereAreInterestingMask
V8_INLINE void ClearFlagUnlocked(Flag flag)
V8_INLINE void SetFlagsUnlocked(MainThreadFlags flags, MainThreadFlags mask=kAllFlagsMask)
size_t Offset(Address addr) const
void SetFlagSlow(Flag flag)
base::Flags< Flag, uintptr_t > MainThreadFlags
V8_INLINE void ClearFlagsNonExecutable(MainThreadFlags flags)
V8_INLINE void ClearFlagNonExecutable(Flag flag)
static MainThreadFlags YoungGenerationPageFlags(MarkingMode marking_mode)
MemoryChunk(MainThreadFlags flags, MemoryChunkMetadata *metadata)
static constexpr MainThreadFlags kIsLargePageMask
V8_INLINE bool InReadOnlySpace() const
MemoryChunkMetadata * metadata_
static constexpr MainThreadFlags kSkipEvacuationSlotsRecordingMask
V8_INLINE void ClearFlagsUnlocked(MainThreadFlags flags)
void SetYoungGenerationPageFlags(MarkingMode marking_mode)
static constexpr MainThreadFlags kEvacuationCandidateMask
static V8_INLINE constexpr Tagged_t CompressAny(Address tagged)
V8_CONST static V8_INLINE Address base()
static V8_INLINE constexpr Address GetPtrComprCageBaseAddress(Address on_heap_addr)
Atomic8 Acquire_Load(volatile const Atomic8 *ptr)
void SeqCst_MemoryFence()
void Release_Store(volatile Atomic8 *ptr, Atomic8 value)
constexpr bool IsAnyCodeSpace(AllocationSpace space)
constexpr bool IsAnyTrustedSpace(AllocationSpace space)
V8_EXPORT_PRIVATE FlagValues v8_flags
const uint32_t kClearedWeakHeapObjectLower32
constexpr bool IsAnySharedSpace(AllocationSpace space)
#define DCHECK_LE(v1, v2)
#define DCHECK_IMPLIES(v1, v2)
#define DCHECK_GE(v1, v2)
#define DCHECK(condition)
#define DCHECK_LT(v1, v2)
#define DCHECK_EQ(v1, v2)