13#if defined(DEBUG) && defined(V8_OS_LINUX) && !defined(V8_OS_ANDROID)
14#define SYMBOLIZE_FUNCTION
25#define ADD_EXT_REF_NAME(name, desc) desc,
26#define ADD_BUILTIN_NAME(Name, ...) "Builtin_" #Name,
27#define ADD_RUNTIME_FUNCTION(name, ...) "Runtime::" #name,
28#define ADD_ISOLATE_ADDR(Name, name) "Isolate::" #name "_address",
29#define ADD_ACCESSOR_INFO_NAME(_, __, AccessorName, ...) \
30 "Accessors::" #AccessorName "Getter",
31#define ADD_ACCESSOR_GETTER_NAME(name) "Accessors::" #name,
32#define ADD_ACCESSOR_SETTER_NAME(name) "Accessors::" #name,
33#define ADD_ACCESSOR_CALLBACK_NAME(_, name, ...) "Accessors::" #name,
34#define ADD_STATS_COUNTER_NAME(name, ...) "StatsCounter::" #name,
61 "Load StubCache::primary_->key",
62 "Load StubCache::primary_->value",
63 "Load StubCache::primary_->map",
64 "Load StubCache::secondary_->key",
65 "Load StubCache::secondary_->value",
66 "Load StubCache::secondary_->map",
67 "Store StubCache::primary_->key",
68 "Store StubCache::primary_->value",
69 "Store StubCache::primary_->map",
70 "Store StubCache::secondary_->key",
71 "Store StubCache::secondary_->value",
72 "Store StubCache::secondary_->map",
77#undef ADD_EXT_REF_NAME
78#undef ADD_BUILTIN_NAME
79#undef ADD_RUNTIME_FUNCTION
80#undef ADD_ISOLATE_ADDR
81#undef ADD_ACCESSOR_INFO_NAME
82#undef ADD_ACCESSOR_SETTER_NAME
83#undef ADD_ACCESSOR_CALLBACK_NAME
84#undef ADD_STATS_COUNTER_NAME
87#define FORWARD_DECLARE(Name, Argc) \
88 Address Builtin_##Name(int argc, Address* args, Isolate* isolate);
117#ifdef SYMBOLIZE_FUNCTION
118 char** names = backtrace_symbols(&
address, 1);
119 const char* name = names[0];
125 return "<unresolved>";
148 if (shared_external_references[
i] ==
address) {
163 shared_external_references[(*index)++] =
address;
171#define ADD_EXTERNAL_REFERENCE(name, desc) \
172 AddIsolateIndependent(ExternalReference::name().address(), index, \
173 shared_external_references);
175#undef ADD_EXTERNAL_REFERENCE
185#define ADD_EXTERNAL_REFERENCE(name, desc) \
186 Add(ExternalReference::name(isolate).address(), index);
188#undef ADD_EXTERNAL_REFERENCE
200 static const Address c_builtins[] = {
201#define DEF_ENTRY(Name, ...) FUNCTION_ADDR(&Builtin_##Name),
205 for (
Address addr : c_builtins) {
207 shared_external_references);
223#define RUNTIME_ENTRY(name, ...) Runtime::k##name,
230 shared_external_references);
243 std::copy(shared_external_references.
data(),
269#define ACCESSOR_INFO_DECLARATION(_, __, AccessorName, ...) \
270 FUNCTION_ADDR(&Accessors::AccessorName##Getter),
271#define ACCESSOR_GETTER_DECLARATION(name) FUNCTION_ADDR(&Accessors::name),
272#define ACCESSOR_SETTER_DECLARATION(name) FUNCTION_ADDR(&Accessors::name),
273#define ACCESSOR_CALLBACK_DECLARATION(_, AccessorName, ...) \
274 FUNCTION_ADDR(&Accessors::AccessorName),
276 static const Address accessors[] = {
286#undef ACCESSOR_INFO_DECLARATION
287#undef ACCESSOR_GETTER_DECLARATION
288#undef ACCESSOR_SETTER_DECLARATION
289#undef ACCESSOR_CALLBACK_DECLARATION
291 for (
Address addr : accessors) {
307 std::array<StubCache*, 3> stub_caches{isolate->load_stub_cache(),
308 isolate->store_stub_cache(),
309 isolate->define_own_stub_cache()};
311 for (
StubCache* stub_cache : stub_caches) {
340 Counters* counters = isolate->counters();
342#define SC(name, caption) Add(GetStatsCounterAddress(counters->name()), index);
356#undef SYMBOLIZE_FUNCTION
#define ACCESSOR_GETTER_DECLARATION(_, accessor_name, AccessorName,...)
#define ACCESSOR_CALLBACK_LIST_GENERATOR(V, _)
#define ACCESSOR_SETTER_LIST(V)
#define ACCESSOR_GETTER_LIST(V)
#define ACCESSOR_SETTER_DECLARATION(AccessorName)
#define ACCESSOR_INFO_DECLARATION(_, accessor_name, AccessorName,...)
#define ACCESSOR_INFO_LIST_GENERATOR(V, _)
#define ACCESSOR_CALLBACK_DECLARATION(_, AccessorName,...)
#define BUILTIN_LIST_C(V)
#define FORWARD_DECLARE(Name, Argc)
constexpr T * data() const
constexpr size_t size() const
static constexpr int kExternalReferenceCountIsolateDependent
static constexpr int kSpecialReferenceCount
InitializationState is_initialized_
static void AddIsolateIndependent(Address address, int *index, MemorySpan< Address > shared_external_references)
Address address(uint32_t i) const
Address GetStatsCounterAddress(StatsCounter *counter)
void Init(Isolate *isolate)
static void AddRuntimeFunctions(int *index, MemorySpan< Address > shared_external_references)
static void InitializeOncePerIsolateGroup(MemorySpan< Address > shared_external_references)
static constexpr int kSizeIsolateIndependent
uint32_t dummy_stats_counter_
static constexpr int kSize
static void AddBuiltins(int *index, MemorySpan< Address > shared_external_references)
void AddStubCache(Isolate *isolate, int *index)
void Add(Address address, int *index)
static constexpr int kExternalReferenceCountIsolateIndependent
void InitIsolateIndependent(MemorySpan< Address > shared_external_references)
void AddIsolateDependentReferences(Isolate *isolate, int *index)
static const char * ResolveSymbol(void *address)
static void AddIsolateIndependentReferences(int *index, MemorySpan< Address > shared_external_references)
static constexpr int kRuntimeReferenceCount
static constexpr int kStubCacheReferenceCount
static constexpr int kAccessorReferenceCount
static void AddAccessors(int *index, MemorySpan< Address > shared_external_references)
@ kInitializedIsolateIndependent
static const char *const ref_name_[kSize]
static constexpr int kIsolateAddressReferenceCount
static const char * NameOfIsolateIndependentAddress(Address address, MemorySpan< Address > shared_external_references)
void AddNativeCodeStatsCounters(Isolate *isolate, int *index)
static constexpr int kStatsCountersReferenceCount
void AddIsolateAddresses(Isolate *isolate, int *index)
static constexpr int kBuiltinsReferenceCount
void CopyIsolateIndependentReferences(int *index, MemorySpan< Address > shared_external_references)
static ExternalReference Create(const SCTableReference &table_ref)
V8_EXPORT_PRIVATE bool Enabled()
std::atomic< int > * GetInternalPointer()
#define FOR_EACH_ISOLATE_ADDRESS_NAME(C)
#define STATS_COUNTER_NATIVE_CODE_LIST(SC)
#define RUNTIME_ENTRY(name,...)
#define ADD_EXTERNAL_REFERENCE(name, desc)
#define ADD_ACCESSOR_GETTER_NAME(name)
#define ADD_BUILTIN_NAME(Name,...)
#define ADD_ACCESSOR_INFO_NAME(_, __, AccessorName,...)
#define DEF_ENTRY(Name,...)
#define ADD_ACCESSOR_CALLBACK_NAME(_, name,...)
#define ADD_STATS_COUNTER_NAME(name,...)
#define ADD_ISOLATE_ADDR(Name, name)
#define ADD_RUNTIME_FUNCTION(name,...)
#define ADD_EXT_REF_NAME(name, desc)
#define ADD_ACCESSOR_SETTER_NAME(name)
#define EXTERNAL_REFERENCE_LIST(V)
#define EXTERNAL_REFERENCE_LIST_WITH_ISOLATE(V)
too high values may cause the compiler to set high thresholds for inlining to as much as possible avoid inlined allocation of objects that cannot escape trace load stores from virtual maglev objects use TurboFan fast string builder analyze liveness of environment slots and zap dead values trace TurboFan load elimination emit data about basic block usage in builtins to this enable builtin reordering when run mksnapshot flag for emit warnings when applying builtin profile data verify register allocation in TurboFan randomly schedule instructions to stress dependency tracking enable store store elimination in TurboFan rewrite far to near simulate GC compiler thread race related to allow float parameters to be passed in simulator mode JS Wasm Run additional turbo_optimize_inlined_js_wasm_wrappers enable experimental feedback collection in generic lowering enable Turboshaft s WasmLoadElimination enable Turboshaft s low level load elimination for JS enable Turboshaft s escape analysis for string concatenation use enable Turbolev features that we want to ship in the not too far future trace individual Turboshaft reduction steps trace intermediate Turboshaft reduction steps invocation count threshold for early optimization Enables optimizations which favor memory size over execution speed Enables sampling allocation profiler with X as a sample interval min size of a semi the new space consists of two semi spaces max size of the Collect garbage after Collect garbage after keeps maps alive for< n > old space garbage collections print one detailed trace line in name
static constexpr Address kNullAddress
#define FOR_EACH_INTRINSIC(F)
#define DCHECK_GE(v1, v2)
#define CHECK_EQ(lhs, rhs)
#define DCHECK_EQ(v1, v2)