5#ifndef V8_EXECUTION_FRAMES_INL_H_
6#define V8_EXECUTION_FRAMES_INL_H_
26 std::optional<Tagged<GcSafeCode>>
code;
72 : iterator_(iterator),
isolate_(iterator_->isolate()) {}
183 DCHECK(IsJSFunction(function) || IsFunctionTemplateInfo(function));
188 DCHECK(IsJSFunction(function) || IsFunctionTemplateInfo(function));
209 return !IsUndefined(new_context,
isolate());
260 intptr_t frame_type =
324#if V8_ENABLE_WEBASSEMBLY
328inline WasmSegmentStartFrame::WasmSegmentStartFrame(
329 StackFrameIteratorBase* iterator)
330 : WasmFrame(iterator) {}
332inline WasmExitFrame::WasmExitFrame(StackFrameIteratorBase* iterator)
333 : WasmFrame(iterator) {}
335#if V8_ENABLE_DRUMBRAKE
336inline WasmInterpreterEntryFrame::WasmInterpreterEntryFrame(
337 StackFrameIteratorBase* iterator)
338 : WasmFrame(iterator) {}
341inline WasmDebugBreakFrame::WasmDebugBreakFrame(
342 StackFrameIteratorBase* iterator)
343 : TypedFrame(iterator) {}
345inline WasmToJsFrame::WasmToJsFrame(StackFrameIteratorBase* iterator)
346 : WasmFrame(iterator) {}
348inline WasmToJsFunctionFrame::WasmToJsFunctionFrame(
349 StackFrameIteratorBase* iterator)
350 : TypedFrame(iterator) {}
352inline JsToWasmFrame::JsToWasmFrame(StackFrameIteratorBase* iterator)
353 : StubFrame(iterator) {}
355inline StackSwitchFrame::StackSwitchFrame(StackFrameIteratorBase* iterator)
356 : ExitFrame(iterator) {}
358inline CWasmEntryFrame::CWasmEntryFrame(StackFrameIteratorBase* iterator)
359 : StubFrame(iterator) {}
361inline WasmLiftoffSetupFrame::WasmLiftoffSetupFrame(
362 StackFrameIteratorBase* iterator)
363 : TypedFrame(iterator) {}
393#if V8_ENABLE_WEBASSEMBLY
410#if V8_ENABLE_WEBASSEMBLY
411bool DebuggableStackFrameIterator::is_wasm()
const {
412 return frame()->is_wasm();
415#if V8_ENABLE_DRUMBRAKE
416bool DebuggableStackFrameIterator::is_wasm_interpreter_entry()
const {
417 return frame()->is_wasm_interpreter_entry();
430#if V8_ENABLE_WEBASSEMBLY
431 DCHECK_NE(type, StackFrame::C_WASM_ENTRY);
434 type == StackFrame::BUILTIN_EXIT ||
435 type == StackFrame::API_ACCESSOR_EXIT ||
436 type == StackFrame::API_CALLBACK_EXIT ||
437#if V8_ENABLE_WEBASSEMBLY
438 type == StackFrame::WASM || type == StackFrame::WASM_TO_JS ||
439 type == StackFrame::JS_TO_WASM ||
440 type == StackFrame::WASM_SEGMENT_START ||
441#if V8_ENABLE_DRUMBRAKE
442 type == StackFrame::WASM_INTERPRETER_ENTRY ||
static constexpr int kReceiverOffset
static constexpr int kHolderOffset
static constexpr int kPropertyNameOffset
FullObjectSlot receiver_slot() const
FullObjectSlot property_name_slot() const
FullObjectSlot holder_slot() const
Tagged< Object > receiver() const
ApiAccessorExitFrame(StackFrameIteratorBase *iterator)
Tagged< Object > holder() const
Tagged< Name > property_name() const
static constexpr int kReceiverOffset
static constexpr int kFirstArgumentOffset
static constexpr int kContextOffset
static constexpr int kTargetOffset
static constexpr int kFCIArgcOffset
static constexpr int kNewTargetOffset
FullObjectSlot target_slot() const
void set_target(Tagged< HeapObject > function) const
Tagged< Object > context() const override
Tagged< HeapObject > target() const
ApiCallbackExitFrame(StackFrameIteratorBase *iterator)
Tagged< Object > GetParameter(int i) const
bool IsConstructor() const
Tagged< Object > receiver() const
int ComputeParametersCount() const
BaselineFrame(StackFrameIteratorBase *iterator)
BuiltinContinuationFrame(StackFrameIteratorBase *iterator)
static constexpr int kNewTargetOffset
static constexpr int kReceiverOffset
static constexpr int kTargetOffset
static constexpr int kArgcOffset
Tagged< Object > argc_slot_object() const
Tagged< Object > new_target_slot_object() const
Tagged< Object > receiver_slot_object() const
BuiltinExitFrame(StackFrameIteratorBase *iterator)
Tagged< Object > target_slot_object() const
BuiltinFrame(StackFrameIteratorBase *iterator)
static constexpr int kCallerFPOffset
static constexpr int kCallerPCOffset
virtual int ComputeParametersCount() const
Address GetParameterSlot(int index) const
CommonFrameWithJSLinkage(StackFrameIteratorBase *iterator)
virtual int GetActualArgumentCount() const
static bool IsConstructFrame(Address fp)
CommonFrame(StackFrameIteratorBase *iterator)
Address caller_fp() const
void SetExpression(int index, Tagged< Object > value)
Address caller_pc() const
Tagged< Object > GetExpression(int index) const
virtual Address GetExpressionAddress(int n) const
ConstructEntryFrame(StackFrameIteratorBase *iterator)
ConstructFrame(StackFrameIteratorBase *iterator)
bool is_javascript() const
CommonFrame * frame() const
JavaScriptFrame * javascript_frame() const
StackFrameIterator iterator_
EntryFrame(StackFrameIteratorBase *iterator)
ExitFrame(StackFrameIteratorBase *iterator)
FastConstructFrame(StackFrameIteratorBase *iterator)
void store(Tagged< Object > value) const
InnerPointerToCodeCache & operator=(const InnerPointerToCodeCache &)=delete
InnerPointerToCodeCacheEntry * GetCacheEntry(Address inner_pointer)
InnerPointerToCodeCache(Isolate *isolate)
InnerPointerToCodeCacheEntry cache_[kInnerPointerToCodeCacheSize]
InnerPointerToCodeCacheEntry * cache(int index)
static const int kInnerPointerToCodeCacheSize
InnerPointerToCodeCache(const InnerPointerToCodeCache &)=delete
InternalFrame(StackFrameIteratorBase *iterator)
InterpretedFrame(StackFrameIteratorBase *iterator)
IrregexpFrame(StackFrameIteratorBase *iterator)
JavaScriptBuiltinContinuationFrame(StackFrameIteratorBase *iterator)
JavaScriptBuiltinContinuationWithCatchFrame(StackFrameIteratorBase *iterator)
Tagged< Object > function_slot_object() const
JavaScriptFrame(StackFrameIteratorBase *iterator)
void set_receiver(Tagged< Object > value)
static JavaScriptFrame * cast(StackFrame *frame)
MaglevFrame(StackFrameIteratorBase *iterator)
NativeFrame(StackFrameIteratorBase *iterator)
OptimizedJSFrame(StackFrameIteratorBase *iterator)
static V8_INLINE Address StripPAC(Address pc)
static V8_INLINE Address AuthenticatePC(Address *pc_address, unsigned offset_from_sp)
StackFrame * frame() const
static bool IsValidFrameType(StackFrame::Type type)
StackFrame * frame() const
static constexpr int32_t TypeToMarker(Type type)
Address unauthenticated_pc() const
bool is_stack_exit_frame() const
static ReturnAddressLocationResolver return_address_location_resolver_
Address caller_sp() const
bool is_profiler_entry_frame() const
static bool IsJavaScript(Type t)
virtual Type type() const =0
bool is_javascript() const
Address * pc_address() const
Isolate * isolate() const
static Address * ResolveReturnAddressLocation(Address *pc_address)
StackHandler * top_handler() const
const StackFrameIteratorBase *const iterator_
StackFrame(const StackFrame &original) V8_NOEXCEPT
Address maybe_unauthenticated_pc() const
static Address ReadPC(Address *pc_address)
static const int kNextOffset
static StackHandler * FromAddress(Address address)
StackHandler * next() const
Address next_address() const
static constexpr int kFunctionOffset
StubFrame(StackFrameIteratorBase *iterator)
V8_INLINE constexpr StorageType ptr() const
TurbofanJSFrame(StackFrameIteratorBase *iterator)
TurbofanStubWithContextFrame(StackFrameIteratorBase *iterator)
static constexpr int kFrameTypeOffset
TypedFrameWithJSLinkage(StackFrameIteratorBase *iterator)
TypedFrame(StackFrameIteratorBase *iterator)
static constexpr int kFeedbackVectorFromFp
UnoptimizedJSFrame(StackFrameIteratorBase *iterator)
void SetFeedbackVector(Tagged< FeedbackVector > feedback_vector)
constexpr int kSystemPointerSize
Tagged< To > Cast(Tagged< From > value, const v8::SourceLocation &loc=INIT_SOURCE_LOCATION_IN_DEBUG)
#define DCHECK_LE(v1, v2)
#define DCHECK_NE(v1, v2)
#define DCHECK_GE(v1, v2)
#define DCHECK(condition)
#define DCHECK_LT(v1, v2)
InnerPointerToCodeCacheEntry()
SafepointEntry safepoint_entry
std::optional< Tagged< GcSafeCode > > code
MaglevSafepointEntry maglev_safepoint_entry