v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
isolate-data.h
Go to the documentation of this file.
1// Copyright 2018 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef V8_EXECUTION_ISOLATE_DATA_H_
6#define V8_EXECUTION_ISOLATE_DATA_H_
7
15#include "src/roots/roots.h"
20#include "src/utils/utils.h"
21#include "testing/gtest/include/gtest/gtest_prod.h" // nogncheck
22
23namespace v8 {
24namespace internal {
25
26class Isolate;
27class TrustedPointerPublishingScope;
28
29namespace wasm {
30class StackMemory;
31}
32
33#if V8_HOST_ARCH_64_BIT
34// In kSystemPointerSize.
35static constexpr int kFastCCallAlignmentPaddingCount = 5;
36#else
37static constexpr int kFastCCallAlignmentPaddingCount = 1;
38#endif
39
40#if V8_HOST_ARCH_64_BIT
41#define ISOLATE_DATA_FAST_C_CALL_PADDING(V) \
42 V(kFastCCallAlignmentPaddingOffset, \
43 kFastCCallAlignmentPaddingCount* kSystemPointerSize, \
44 fast_c_call_alignment_padding)
45#else
46#define ISOLATE_DATA_FAST_C_CALL_PADDING(V) \
47 V(kFastCCallAlignmentPaddingOffset, \
48 kFastCCallAlignmentPaddingCount* kSystemPointerSize, \
49 fast_c_call_alignment_padding)
50#endif // V8_HOST_ARCH_64_BIT
51
52#ifdef V8_ENABLE_LEAPTIERING
53
54#define BUILTINS_WITH_DISPATCH_ADAPTER(V, CamelName, underscore_name, ...) \
55 V(CamelName, CamelName##SharedFun)
56
57// If we have predictable builtins then dispatch handles of builtins are
58// stored in the read only segment of the JSDispatchTable. Otherwise,
59// we need a table of per-isolate dispatch handles of builtins.
60#if V8_ENABLE_LEAPTIERING_BOOL
61#if V8_STATIC_ROOTS_BOOL
62#define V8_STATIC_DISPATCH_HANDLES_BOOL true
63#else
64#define V8_STATIC_DISPATCH_HANDLES_BOOL false
65#endif // V8_STATIC_ROOTS_BOOL
66#endif // V8_ENABLE_LEAPTIERING_BOOL
67
68#define BUILTINS_WITH_DISPATCH_LIST(V) \
69 BUILTINS_WITH_SFI_LIST_GENERATOR(BUILTINS_WITH_DISPATCH_ADAPTER, V)
70
71struct JSBuiltinDispatchHandleRoot {
72 enum Idx {
73#define CASE(builtin_name, ...) k##builtin_name,
74 BUILTINS_WITH_DISPATCH_LIST(CASE)
75
76 kCount,
77 kFirst = 0
78#undef CASE
79 };
80 static constexpr size_t kPadding = Idx::kCount * sizeof(JSDispatchHandle) %
81 kSystemPointerSize /
82 sizeof(JSDispatchHandle);
83 static constexpr size_t kTableSize = Idx::kCount + kPadding;
84
85 static inline Builtin to_builtin(Idx idx) {
86#define CASE(builtin_name, ...) Builtin::k##builtin_name,
87 return std::array<Builtin, Idx::kCount>{
88 BUILTINS_WITH_DISPATCH_LIST(CASE)}[idx];
89#undef CASE
90 }
91 static inline Idx to_idx(Builtin builtin) {
92 switch (builtin) {
93#define CASE(builtin_name, ...) \
94 case Builtin::k##builtin_name: \
95 return Idx::k##builtin_name;
96 BUILTINS_WITH_DISPATCH_LIST(CASE)
97#undef CASE
98 default:
100 }
101 }
102
103 static inline Idx to_idx(RootIndex root_idx) {
104 switch (root_idx) {
105#define CASE(builtin_name, shared_fun_name, ...) \
106 case RootIndex::k##shared_fun_name: \
107 return Idx::k##builtin_name;
108 BUILTINS_WITH_DISPATCH_LIST(CASE)
109#undef CASE
110 default:
111 UNREACHABLE();
112 }
113 }
114};
115
116#endif // V8_ENABLE_LEAPTIERING
117
118// IsolateData fields, defined as: V(CamelName, Size, hacker_name)
119#define ISOLATE_DATA_FIELDS(V) \
120 /* Misc. fields. */ \
121 V(CageBase, kSystemPointerSize, cage_base) \
122 V(StackGuard, StackGuard::kSizeInBytes, stack_guard) \
123 V(IsMarkingFlag, kUInt8Size, is_marking_flag) \
124 V(IsMinorMarkingFlag, kUInt8Size, is_minor_marking_flag) \
125 V(IsSharedSpaceIsolateFlag, kUInt8Size, is_shared_space_isolate_flag) \
126 V(UsesSharedHeapFlag, kUInt8Size, uses_shared_heap_flag) \
127 V(ExecutionMode, kUInt8Size, execution_mode) \
128 V(StackIsIterable, kUInt8Size, stack_is_iterable) \
129 V(ErrorMessageParam, kUInt8Size, error_message_param) \
130 V(TablesAlignmentPadding, 1, tables_alignment_padding) \
131 V(RegExpStaticResultOffsetsVector, kSystemPointerSize, \
132 regexp_static_result_offsets_vector) \
133 /* Tier 0 tables (small but fast access). */ \
134 V(BuiltinTier0EntryTable, Builtins::kBuiltinTier0Count* kSystemPointerSize, \
135 builtin_tier0_entry_table) \
136 V(BuiltinsTier0Table, Builtins::kBuiltinTier0Count* kSystemPointerSize, \
137 builtin_tier0_table) \
138 /* Misc. fields. */ \
139 V(NewAllocationInfo, LinearAllocationArea::kSize, new_allocation_info) \
140 V(OldAllocationInfo, LinearAllocationArea::kSize, old_allocation_info) \
141 ISOLATE_DATA_FAST_C_CALL_PADDING(V) \
142 V(FastCCallCallerPC, kSystemPointerSize, fast_c_call_caller_pc) \
143 V(FastCCallCallerFP, kSystemPointerSize, fast_c_call_caller_fp) \
144 V(FastApiCallTarget, kSystemPointerSize, fast_api_call_target) \
145 V(LongTaskStatsCounter, kSizetSize, long_task_stats_counter) \
146 V(ThreadLocalTop, ThreadLocalTop::kSizeInBytes, thread_local_top) \
147 V(HandleScopeData, HandleScopeData::kSizeInBytes, handle_scope_data) \
148 V(EmbedderData, Internals::kNumIsolateDataSlots* kSystemPointerSize, \
149 embedder_data) \
150 ISOLATE_DATA_FIELDS_POINTER_COMPRESSION(V) \
151 ISOLATE_DATA_FIELDS_SANDBOX(V) \
152 V(ApiCallbackThunkArgument, kSystemPointerSize, api_callback_thunk_argument) \
153 V(RegexpExecVectorArgument, kSystemPointerSize, regexp_exec_vector_argument) \
154 V(ContinuationPreservedEmbedderData, kSystemPointerSize, \
155 continuation_preserved_embedder_data) \
156 /* Full tables (arbitrary size, potentially slower access). */ \
157 V(RootsTable, RootsTable::kEntriesCount* kSystemPointerSize, roots_table) \
158 V(ExternalReferenceTable, ExternalReferenceTable::kSizeInBytes, \
159 external_reference_table) \
160 V(BuiltinEntryTable, Builtins::kBuiltinCount* kSystemPointerSize, \
161 builtin_entry_table) \
162 V(BuiltinTable, Builtins::kBuiltinCount* kSystemPointerSize, builtin_table) \
163 V(ActiveStack, kSystemPointerSize, active_stack) \
164 ISOLATE_DATA_FIELDS_LEAPTIERING(V)
165
166#ifdef V8_COMPRESS_POINTERS
167#define ISOLATE_DATA_FIELDS_POINTER_COMPRESSION(V) \
168 V(ExternalPointerTable, sizeof(ExternalPointerTable), \
169 external_pointer_table) \
170 V(SharedExternalPointerTable, kSystemPointerSize, \
171 shared_external_pointer_table) \
172 V(CppHeapPointerTable, sizeof(CppHeapPointerTable), cpp_heap_pointer_table)
173#else
174#define ISOLATE_DATA_FIELDS_POINTER_COMPRESSION(V)
175#endif // V8_COMPRESS_POINTERS
176
177#ifdef V8_ENABLE_SANDBOX
178#define ISOLATE_DATA_FIELDS_SANDBOX(V) \
179 V(TrustedCageBase, kSystemPointerSize, trusted_cage_base) \
180 V(TrustedPointerTable, sizeof(TrustedPointerTable), trusted_pointer_table) \
181 V(SharedTrustedPointerTable, kSystemPointerSize, \
182 shared_trusted_pointer_table) \
183 V(TrustedPointerPublishingScope, kSystemPointerSize, \
184 trusted_pointer_publishing_scope) \
185 V(CodePointerTableBaseAddress, kSystemPointerSize, \
186 code_pointer_table_base_address)
187#else
188#define ISOLATE_DATA_FIELDS_SANDBOX(V)
189#endif // V8_ENABLE_SANDBOX
190
191#if V8_ENABLE_LEAPTIERING_BOOL && !V8_STATIC_DISPATCH_HANDLES_BOOL
192
193#define ISOLATE_DATA_FIELDS_LEAPTIERING(V) \
194 V(BuiltinDispatchTable, \
195 (JSBuiltinDispatchHandleRoot::kTableSize) * sizeof(JSDispatchHandle), \
196 builtin_dispatch_table)
197#else
198
199#define ISOLATE_DATA_FIELDS_LEAPTIERING(V)
200
201#endif // V8_ENABLE_LEAPTIERING_BOOL && !V8_STATIC_DISPATCH_HANDLES_BOOL
202
203#define EXTERNAL_REFERENCE_LIST_ISOLATE_FIELDS(V) \
204 V(isolate_address, "isolate address", IsolateAddress) \
205 V(jslimit_address, "jslimit address", JsLimitAddress)
206
207constexpr uint8_t kNumIsolateFieldIds = 0
208#define PLUS_1(...) +1
210#undef PLUS_1
211
212enum class IsolateFieldId : uint8_t {
213 kUnknown = 0,
214#define FIELD(name, comment, camel) k##camel,
216#undef FIELD
217#define FIELD(camel, ...) k##camel,
219#undef FIELD
220};
221
222// This class contains a collection of data accessible from both C++ runtime
223// and compiled code (including builtins, interpreter bytecode handlers and
224// optimized code). The compiled code accesses the isolate data fields
225// indirectly via the root register.
226class IsolateData final {
227 public:
229 :
230#ifdef V8_COMPRESS_POINTERS
232#endif
233 stack_guard_(isolate)
234#ifdef V8_ENABLE_SANDBOX
235 ,
236 trusted_cage_base_(group->GetTrustedPtrComprCageBase()),
237 code_pointer_table_base_address_(
238 group->code_pointer_table()->base_address())
239#endif
240 {
241 }
242
243 IsolateData(const IsolateData&) = delete;
245
246 static constexpr intptr_t kIsolateRootBias = kRootRegisterBias;
247
248 // The value of the kRootRegister.
250 return reinterpret_cast<Address>(this) + kIsolateRootBias;
251 }
252
253 // Root-register-relative offsets.
254
255#define V(CamelName, Size, hacker_name) \
256 static constexpr int hacker_name##_offset() { \
257 return k##CamelName##Offset - kIsolateRootBias; \
258 }
260#undef V
261
262 static constexpr int root_slot_offset(RootIndex root_index) {
263 return roots_table_offset() + RootsTable::offset_of(root_index);
264 }
265
266 static constexpr int BuiltinEntrySlotOffset(Builtin id) {
268 return (Builtins::IsTier0(id) ? builtin_tier0_entry_table_offset()
269 : builtin_entry_table_offset()) +
271 }
272 // TODO(ishell): remove in favour of typified id version.
273 static constexpr int builtin_slot_offset(int builtin_index) {
274 return BuiltinSlotOffset(Builtins::FromInt(builtin_index));
275 }
276 static constexpr int BuiltinSlotOffset(Builtin id) {
277 return (Builtins::IsTier0(id) ? builtin_tier0_table_offset()
278 : builtin_table_offset()) +
280 }
281
282 static constexpr int jslimit_offset() {
283 return stack_guard_offset() + StackGuard::jslimit_offset();
284 }
285
286 static constexpr int real_jslimit_offset() {
287 return stack_guard_offset() + StackGuard::real_jslimit_offset();
288 }
289
290#define V(Offset, Size, Name) \
291 Address Name##_address() const { return reinterpret_cast<Address>(&Name##_); }
293#undef V
294
298
299 static constexpr int exception_offset() {
300 return thread_local_top_offset() + ThreadLocalTop::exception_offset();
301 }
302
303 // The value of kPointerCageBaseRegister.
304 Address cage_base() const { return cage_base_; }
327 const RootsTable& roots() const { return roots_table_; }
337#if V8_ENABLE_LEAPTIERING_BOOL && !V8_STATIC_DISPATCH_HANDLES_BOOL
338 JSDispatchHandle builtin_dispatch_handle(Builtin builtin) {
339 return builtin_dispatch_table_[JSBuiltinDispatchHandleRoot::to_idx(
340 builtin)];
341 }
342#endif // V8_ENABLE_LEAPTIERING_BOOL && !V8_STATIC_DISPATCH_HANDLES_BOOL
343
344 bool stack_is_iterable() const {
346 return stack_is_iterable_ != 0;
347 }
348 bool is_marking() const { return is_marking_flag_; }
349
350 // Returns true if this address points to data stored in this instance. If
351 // it's the case then the value can be accessed indirectly through the root
352 // register.
353 bool contains(Address address) const {
354 static_assert(std::is_unsigned<Address>::value);
355 Address start = reinterpret_cast<Address>(this);
356 return (address - start) < sizeof(*this);
357 }
358
359// Offset of a ThreadLocalTop member from {isolate_root()}.
360#define THREAD_LOCAL_TOP_MEMBER_OFFSET(Name) \
361 static constexpr uint32_t Name##_offset() { \
362 return static_cast<uint32_t>(IsolateData::thread_local_top_offset() + \
363 OFFSET_OF(ThreadLocalTop, Name##_)); \
364 }
365
366 THREAD_LOCAL_TOP_MEMBER_OFFSET(topmost_script_having_context)
367 THREAD_LOCAL_TOP_MEMBER_OFFSET(is_on_central_stack_flag)
369#undef THREAD_LOCAL_TOP_MEMBER_OFFSET
370
371 static constexpr intptr_t GetOffset(IsolateFieldId id) {
372 switch (id) {
374 UNREACHABLE();
375 case IsolateFieldId::kIsolateAddress:
376 return -kIsolateRootBias;
377 case IsolateFieldId::kJsLimitAddress:
379#define CASE(camel, size, name) \
380 case IsolateFieldId::k##camel: \
381 return IsolateData::name##_offset();
383#undef CASE
384 default:
385 UNREACHABLE();
386 }
387 }
388
389 private:
390 // Static layout definition.
391 //
392 // Note: The location of fields within IsolateData is significant. The
393 // closer they are to the value of kRootRegister (i.e.: isolate_root()), the
394 // cheaper it is to access them. See also: https://crbug.com/993264.
395 // The recommended guideline is to put frequently-accessed fields close to
396 // the beginning of IsolateData.
397#define FIELDS(V) \
398 ISOLATE_DATA_FIELDS(V) \
399 /* This padding aligns IsolateData size by 8 bytes. */ \
400 V(Padding, \
401 8 + RoundUp<8>(static_cast<int>(kPaddingOffset)) - kPaddingOffset) \
402 /* Total size. */ \
403 V(Size, 0)
404
406#undef FIELDS
407
409
410 // Fields related to the system and JS stack. In particular, this contains
411 // the stack limit used by stack checks in generated code.
413
414 //
415 // Hot flags that are regularly checked.
416 //
417
418 // These flags are regularly checked by write barriers.
419 // Only valid values are 0 or 1.
420 uint8_t is_marking_flag_ = false;
421 uint8_t is_minor_marking_flag_ = false;
423 uint8_t uses_shared_heap_flag_ = false;
424
425 // Storage for is_profiling and should_check_side_effects booleans.
426 // This value is checked on every API callback/getter call.
429 static_assert(sizeof(execution_mode_) == 1);
430
431 //
432 // Not super hot flags, which are put here because we have to align the
433 // builtin entry table to kSystemPointerSize anyway.
434 //
435
436 // Whether the StackFrameIteratorForProfiler can successfully iterate the
437 // current stack. The only valid values are 0 or 1.
439
440 // Field to pass value for error throwing builtins. Currently, it is used to
441 // pass the type of the `Dataview` operation to print out operation's name in
442 // case of an error.
444
445 // Ensure the following tables are kSystemPointerSize-byte aligned.
446 static_assert(FIELD_SIZE(kTablesAlignmentPaddingOffset) > 0);
447 uint8_t tables_alignment_padding_[FIELD_SIZE(kTablesAlignmentPaddingOffset)];
448
449 // A pointer to the static offsets vector (used to pass results from the
450 // irregexp engine to the rest of V8), or nullptr if the static offsets
451 // vector is currently in use.
453
454 // Tier 0 tables. See also builtin_entry_table_ and builtin_table_.
457
460
461 // Aligns fast_c_call_XXX fields so that they stay in the same CPU cache line.
463
464 // Stores the state of the caller for MacroAssembler::CallCFunction so that
465 // the sampling CPU profiler can iterate the stack during such calls. These
466 // are stored on IsolateData so that they can be stored to with only one move
467 // instruction in compiled code.
468 // Note that the PC field is right before FP. This is necessary for simulator
469 // builds for ARM64. This ensures that the PC is written before the FP with
470 // the stp instruction.
471 struct {
472 // The FP and PC that are saved right before MacroAssembler::CallCFunction.
475 };
476 // The address of the fast API callback right before it's executed from
477 // generated code.
479
480 // Used for implementation of LongTaskStats. Counts the number of potential
481 // long tasks.
483
486
487 // These fields are accessed through the API, offsets must be kept in sync
488 // with v8::internal::Internals (in include/v8-internal.h) constants. The
489 // layout consistency is verified in Isolate::CheckIsolateLayout() using
490 // runtime checks.
492
493 // Tables containing pointers to objects outside of the V8 sandbox.
494#ifdef V8_COMPRESS_POINTERS
495 ExternalPointerTable external_pointer_table_;
496 ExternalPointerTable* shared_external_pointer_table_ = nullptr;
497 CppHeapPointerTable cpp_heap_pointer_table_;
498#endif // V8_COMPRESS_POINTERS
499
500#ifdef V8_ENABLE_SANDBOX
501 const Address trusted_cage_base_;
502
503 TrustedPointerTable trusted_pointer_table_;
504 TrustedPointerTable* shared_trusted_pointer_table_ = nullptr;
505 TrustedPointerPublishingScope* trusted_pointer_publishing_scope_ = nullptr;
506
507 const Address code_pointer_table_base_address_;
508#endif // V8_ENABLE_SANDBOX
509
510 // This is a storage for an additional argument for the Api callback thunk
511 // functions, see InvokeAccessorGetterCallback and InvokeFunctionCallback.
513
514 // Storage for an additional (untagged) argument for
515 // Runtime::kRegExpExecInternal2, required since runtime functions only
516 // accept tagged arguments.
518
519 // This is data that should be preserved on newly created continuations.
521
524
525 // The entry points for builtins. This corresponds to
526 // InstructionStream::InstructionStart() for each InstructionStream object in
527 // the builtins table below. The entry table is in IsolateData for easy access
528 // through kRootRegister.
530
531 // The entries in this array are tagged pointers to Code objects.
533
535
536#if V8_ENABLE_LEAPTIERING_BOOL && !V8_STATIC_DISPATCH_HANDLES_BOOL
537 // The entries in this array are dispatch handles for builtins with SFI's.
538 JSDispatchHandle* builtin_dispatch_table() { return builtin_dispatch_table_; }
540 builtin_dispatch_table_[JSBuiltinDispatchHandleRoot::kTableSize] = {};
541#endif // V8_ENABLE_LEAPTIERING_BOOL && !V8_STATIC_DISPATCH_HANDLES_BOOL
542
543 // Ensure the size is 8-byte aligned in order to make alignment of the field
544 // following the IsolateData field predictable. This solves the issue with
545 // C++ compilers for 32-bit platforms which are not consistent at aligning
546 // int64_t fields.
547 // In order to avoid dealing with zero-size arrays the padding size is always
548 // in the range [8, 15).
549 static_assert(kPaddingOffsetEnd + 1 - kPaddingOffset >= 8);
550 char padding_[kPaddingOffsetEnd + 1 - kPaddingOffset];
551
553
554 friend class Isolate;
555 friend class Heap;
556 FRIEND_TEST(HeapTest, ExternalLimitDefault);
557 FRIEND_TEST(HeapTest, ExternalLimitStaysAboveDefaultForExplicitHandling);
558};
559
560// IsolateData object must have "predictable" layout which does not change when
561// cross-compiling to another platform. Otherwise there may be compatibility
562// issues because of different compilers used for snapshot generator and
563// actual V8 code.
565 static_assert(std::is_standard_layout<StackGuard>::value);
566 static_assert(std::is_standard_layout<RootsTable>::value);
567 static_assert(std::is_standard_layout<ThreadLocalTop>::value);
568 static_assert(std::is_standard_layout<ExternalReferenceTable>::value);
569 static_assert(std::is_standard_layout<IsolateData>::value);
570 static_assert(std::is_standard_layout<LinearAllocationArea>::value);
571#define V(PureName, Size, Name) \
572 static_assert( \
573 std::is_standard_layout<decltype(IsolateData::Name##_)>::value); \
574 static_assert(offsetof(IsolateData, Name##_) == k##PureName##Offset);
576#undef V
577 static_assert(sizeof(IsolateData) == IsolateData::kSizeOffset);
578}
579
580} // namespace internal
581} // namespace v8
582
583#endif // V8_EXECUTION_ISOLATE_DATA_H_
#define CASE(Name,...)
union v8::internal::@341::BuiltinMetadata::KindSpecificData data
static constexpr int kBuiltinCount
Definition builtins.h:105
static constexpr int ToInt(Builtin id)
Definition builtins.h:144
static constexpr int kBuiltinTier0Count
Definition builtins.h:108
static constexpr bool IsBuiltinId(Builtin builtin)
Definition builtins.h:128
static constexpr Builtin FromInt(int id)
Definition builtins.h:140
static constexpr bool IsTier0(Builtin builtin)
Definition builtins.h:136
static const uint32_t kNumIsolateDataSlots
ThreadLocalTop const & thread_local_top() const
wasm::StackMemory * active_stack_
static constexpr int builtin_slot_offset(int builtin_index)
IsolateData & operator=(const IsolateData &)=delete
static constexpr int BuiltinEntrySlotOffset(Builtin id)
Tagged< Object > continuation_preserved_embedder_data() const
Address isolate_root() const
Address builtin_tier0_table_[Builtins::kBuiltinTier0Count]
const RootsTable & roots() const
Address regexp_exec_vector_argument() const
Tagged< Object > continuation_preserved_embedder_data_
Address fast_c_call_caller_pc() const
bool contains(Address address) const
HandleScopeData handle_scope_data_
static constexpr int real_jslimit_offset()
uint8_t tables_alignment_padding_[FIELD_SIZE(kTablesAlignmentPaddingOffset)]
IsolateData(const IsolateData &)=delete
ExternalReferenceTable external_reference_table_
wasm::StackMemory * active_stack()
static constexpr intptr_t GetOffset(IsolateFieldId id)
Address builtin_tier0_entry_table_[Builtins::kBuiltinTier0Count]
Address builtin_entry_table_[Builtins::kBuiltinCount]
void set_regexp_static_result_offsets_vector(int32_t *value)
Address fast_api_call_target() const
void * embedder_data_[Internals::kNumIsolateDataSlots]
ThreadLocalTop thread_local_top_
static constexpr int root_slot_offset(RootIndex root_index)
Address fast_c_call_caller_fp() const
FRIEND_TEST(HeapTest, ExternalLimitStaysAboveDefaultForExplicitHandling)
static constexpr intptr_t kIsolateRootBias
int32_t * regexp_static_result_offsets_vector_
Address fast_c_call_alignment_padding_[kFastCCallAlignmentPaddingCount]
Address api_callback_thunk_argument() const
LinearAllocationArea new_allocation_info_
void set_continuation_preserved_embedder_data(Tagged< Object > data)
base::Flags< IsolateExecutionModeFlag, uint8_t, std::atomic< uint8_t > > execution_mode_
static constexpr int exception_offset()
static constexpr int jslimit_offset()
int32_t * regexp_static_result_offsets_vector() const
LinearAllocationArea old_allocation_info_
Address cage_base() const
ExternalReferenceTable * external_reference_table()
Address * builtin_tier0_entry_table()
FRIEND_TEST(HeapTest, ExternalLimitDefault)
IsolateData(Isolate *isolate, IsolateGroup *group)
static constexpr int BuiltinSlotOffset(Builtin id)
void set_active_stack(wasm::StackMemory *stack)
static V8_INLINE void AssertPredictableLayout()
char padding_[kPaddingOffsetEnd+1 - kPaddingOffset]
ThreadLocalTop & thread_local_top()
Address builtin_table_[Builtins::kBuiltinCount]
static constexpr int offset_of(RootIndex root_index)
Definition roots.h:606
static constexpr Tagged< Smi > zero()
Definition smi.h:99
static constexpr int jslimit_offset()
static constexpr int real_jslimit_offset()
static constexpr int exception_offset()
int start
#define EXTERNAL_REFERENCE_LIST_ISOLATE_FIELDS(V)
#define THREAD_LOCAL_TOP_MEMBER_OFFSET(Name)
#define ISOLATE_DATA_FIELDS(V)
#define PLUS_1(...)
#define FIELDS(V)
ZoneStack< RpoNumber > & stack
FIELD(name, comment, camel)
constexpr int kSystemPointerSize
Definition globals.h:410
static constexpr int kFastCCallAlignmentPaddingCount
V8_INLINE PtrComprCageBase GetPtrComprCageBase()
return value
Definition map-inl.h:893
static constexpr Address kNullAddress
Definition v8-internal.h:53
constexpr int kRootRegisterBias
constexpr uint8_t kNumIsolateFieldIds
Definition c-api.cc:87
#define UNREACHABLE()
Definition logging.h:67
#define DCHECK(condition)
Definition logging.h:482
#define FIELD_SIZE(Name)
Definition utils.h:259
#define DEFINE_FIELD_OFFSET_CONSTANTS_WITH_PURE_NAME(StartOffset, LIST_MACRO)
Definition utils.h:252
#define V8_INLINE
Definition v8config.h:500