5#ifndef V8_OBJECTS_CODE_H_
6#define V8_OBJECTS_CODE_H_
23template <
typename Impl>
272#ifdef V8_ENABLE_LEAPTIERING
354#ifdef ENABLE_DISASSEMBLER
365 void CodePrint(std::ostream& os,
const char* name =
nullptr,
372#define CODE_DATA_FIELDS(V) \
377 V(kDeoptimizationDataOrInterpreterDataOffset, kTaggedSize) \
385 V(kPositionTableOffset, kTaggedSize) \
387 V(kStartOfStrongFieldsOffset, 0) \
388 V(kWrapperOffset, kTaggedSize) \
389 V(kEndOfStrongFieldsWithMainCageBaseOffset, 0) \
391 V(kInstructionStreamOffset, kTaggedSize) \
392 V(kEndOfStrongFieldsOffset, 0) \
399 V(kInstructionStartOffset, V8_ENABLE_SANDBOX_BOOL ? 0 : kSystemPointerSize) \
401 V(kDispatchHandleOffset, \
402 V8_ENABLE_LEAPTIERING_BOOL ? kJSDispatchHandleSize : 0) \
403 V(kFlagsOffset, kUInt32Size) \
404 V(kInstructionSizeOffset, kIntSize) \
405 V(kMetadataSizeOffset, kIntSize) \
407 V(kInlinedBytecodeSizeOffset, kIntSize) \
408 V(kOsrOffsetOffset, kInt32Size) \
409 V(kHandlerTableOffsetOffset, kIntSize) \
410 V(kUnwindingInfoOffsetOffset, kInt32Size) \
411 V(kConstantPoolOffsetOffset, V8_EMBEDDED_CONSTANT_POOL_BOOL ? kIntSize : 0) \
412 V(kCodeCommentsOffsetOffset, kIntSize) \
413 V(kBuiltinJumpTableInfoOffsetOffset, \
414 V8_BUILTIN_JUMP_TABLE_INFO_BOOL ? kInt32Size : 0) \
418 V(kParameterCountOffset, kUInt16Size) \
420 V(kBuiltinIdOffset, kInt16Size) \
421 V(kUnalignedSize, OBJECT_POINTER_PADDING(kUnalignedSize)) \
428#undef CODE_DATA_FIELDS
430#ifdef V8_EXTERNAL_CODE_SPACE
431 template <
typename T>
432 using ExternalCodeField =
435 template <
typename T>
442#define FLAGS_BIT_FIELDS(V, _) \
443 V(KindField, CodeKind, 4, _) \
444 V(IsTurbofannedField, bool, 1, _) \
445 V(IsContextSpecializedField, bool, 1, _) \
446 V(MarkedForDeoptimizationField, bool, 1, _) \
447 V(EmbeddedObjectsClearedField, bool, 1, _) \
448 V(CanHaveWeakObjectsField, bool, 1, _)
450#undef FLAGS_BIT_FIELDS
451 static_assert(FLAGS_BIT_FIELDS_Ranges::kBitsCount <=
457 MarkedForDeoptimizationField::kShift;
486 template <
typename IsolateT>
563#define FIELD_LIST(V) \
564 V(kCodeOffset, kCodePointerSize) \
571 class BodyDescriptor;
#define DEFINE_BIT_FIELDS(LIST_MACRO)
OBJECT_CONSTRUCTORS(CodeWrapper, Struct)
void set_instruction_start(IsolateForSandbox isolate, Address value)
SafepointEntry GetSafepointEntry(Isolate *isolate, Address pc)
Address builtin_jump_table_info() const
bool checks_tiering_state() const
bool has_source_position_table() const
Tagged< InstructionStream > unchecked_instruction_stream() const
int InstructionStreamObjectSize() const
void TraceMarkForDeoptimization(Isolate *isolate, LazyDeoptimizeReason reason)
bool is_baseline_trampoline_builtin() const
uintptr_t GetBaselinePCForBytecodeOffset(int bytecode_offset, BytecodeToPCPosition position, Tagged< BytecodeArray > bytecodes)
CodeEntrypointTag entrypoint_tag() const
bool CanContainWeakObjects()
uint16_t parameter_count_without_receiver() const
int handler_table_size() const
uint32_t stack_slots() const
Address InstructionStart(Isolate *isolate, Address pc) const
bool uses_safepoint_table() const
Address body_start() const
static const int kIsTurbofannedBit
void set_embedded_objects_cleared(bool flag)
Address unwinding_info_end() const
void SetInstructionStreamAndInstructionStart(IsolateForSandbox isolate, Tagged< InstructionStream > code, WriteBarrierMode mode=UPDATE_WRITE_BARRIER)
void initialize_flags(CodeKind kind, bool is_context_specialized, bool is_turbofanned)
static Tagged< Code > FromTargetAddress(Address address)
Address metadata_end() const
Address instruction_end() const
bool is_turbofanned() const
static const int kMarkedForDeoptimizationBit
Tagged< Object > raw_deoptimization_data_or_interpreter_data() const
void clear_source_position_table_and_bytecode_offset_table()
int unwinding_info_size() const
bool has_deoptimization_data_or_interpreter_data() const
void SetMarkedForDeoptimization(Isolate *isolate, LazyDeoptimizeReason reason)
bool has_tagged_outgoing_params() const
int code_comments_size() const
int safepoint_table_offset() const
bool Inlines(Tagged< SharedFunctionInfo > sfi)
int constant_pool_size() const
Address constant_pool() const
DEFINE_FIELD_OFFSET_CONSTANTS(ExposedTrustedObject::kHeaderSize, CODE_DATA_FIELDS) template< typename T > using ExternalCodeField
bool is_wasm_code() const
void set_bytecode_or_interpreter_data(Tagged< TrustedObject > value, WriteBarrierMode mode=UPDATE_WRITE_BARRIER)
int SourcePosition(int offset) const
uintptr_t GetBaselineStartPCForBytecodeOffset(int bytecode_offset, Tagged< BytecodeArray > bytecodes)
int SizeIncludingMetadata() const
bool contains(Isolate *isolate, Address pc) const
bool IsWeakObject(Tagged< HeapObject > object)
Address handler_table_address() const
uintptr_t GetBaselineEndPCForBytecodeOffset(int bytecode_offset, Tagged< BytecodeArray > bytecodes)
uintptr_t GetBaselinePCForNextExecutedBytecode(int bytecode_offset, Tagged< BytecodeArray > bytecodes)
static const int kMaxArguments
Tagged< TrustedObject > bytecode_or_interpreter_data() const
uint8_t * relocation_end() const
bool is_optimized_code() const
bool has_unwinding_info() const
bool is_interpreter_trampoline_builtin() const
Address InstructionEnd(Isolate *isolate, Address pc) const
MaglevSafepointEntry GetMaglevSafepointEntry(Isolate *isolate, Address pc)
int safepoint_table_size() const
int relocation_size() const
void SetInstructionStartForOffHeapBuiltin(IsolateForSandbox isolate, Address entry)
bool has_constant_pool() const
Address safepoint_table_address() const
OBJECT_CONSTRUCTORS(Code, ExposedTrustedObject)
Address unwinding_info_start() const
bool is_context_specialized() const
void set_builtin_id(Builtin builtin_id)
bool has_handler_table() const
int GetOffsetFromInstructionStart(Isolate *isolate, Address pc) const
bool has_safepoint_table() const
void ClearInstructionStartForSerialization(IsolateForSandbox isolate)
int SourceStatementPosition(int offset) const
bool is_baseline_leave_frame_builtin() const
Tagged< ProtectedFixedArray > unchecked_deoptimization_data() const
static bool IsWeakObjectInOptimizedCode(Tagged< HeapObject > object)
int builtin_jump_table_info_size() const
void IterateDeoptimizationLiterals(RootVisitor *v)
Tagged< TrustedByteArray > SourcePositionTable(Isolate *isolate, Tagged< SharedFunctionInfo > sfi) const
Address code_comments() const
bool uses_deoptimization_data() const
int GetBytecodeOffsetForBaselinePC(Address baseline_pc, Tagged< BytecodeArray > bytecodes)
static bool IsWeakObjectInDeoptimizationLiteralArray(Tagged< Object > object)
uint8_t * relocation_start() const
bool has_code_comments() const
bool embedded_objects_cleared() const
bool is_maglevved() const
Tagged< Object > raw_position_table() const
void UpdateInstructionStart(IsolateForSandbox isolate, Tagged< InstructionStream > istream)
PtrComprCageBase code_cage_base() const
bool IsIsolateIndependent(Isolate *isolate)
void ClearEmbeddedObjectsAndJSDispatchHandles(Heap *heap)
Address metadata_start() const
Builtin builtin_id() const
void clear_deoptimization_data_and_interpreter_data()
static const int kArgumentsBits
bool has_builtin_jump_table_info() const
bool has_bytecode_offset_table() const
bool has_instruction_stream() const
bool has_source_position_table_or_bytecode_offset_table() const
static constexpr int kHeaderSize
bool is_interpreter_trampoline_builtin() const
uint16_t wasm_js_tagged_parameter_count() const
Address InstructionEnd(Isolate *isolate, Address pc) const
Address constant_pool() const
Address instruction_end() const
bool CanDeoptAt(Isolate *isolate, Address pc) const
uint32_t stack_slots() const
Tagged< Object > raw_instruction_stream() const
OBJECT_CONSTRUCTORS(GcSafeCode, HeapObject)
Builtin builtin_id() const
bool is_turbofanned() const
Address InstructionStart(Isolate *isolate, Address pc) const
Tagged< Code > UnsafeCastToCode() const
bool has_instruction_stream() const
bool is_baseline_trampoline_builtin() const
uint16_t wasm_js_first_tagged_parameter() const
int GetOffsetFromInstructionStart(Isolate *isolate, Address pc) const
Address safepoint_table_address() const
bool marked_for_deoptimization() const
Address instruction_start() const
bool is_maglevved() const
bool has_tagged_outgoing_params() const
bool is_baseline_leave_frame_builtin() const
#define FLAGS_BIT_FIELDS(V, _)
#define CODE_DATA_FIELDS(V)
V8_INLINE IndirectHandle< T > handle(Tagged< T > object, Isolate *isolate)
constexpr int kBitsPerByte
static constexpr int kCodeKindCount
static constexpr Address kNullAddress
#define DECL_ACCESSORS(name,...)
#define DECL_GETTER(name,...)
#define DECL_CODE_POINTER_ACCESSORS(name)
#define DECL_VERIFIER(Name)
#define DECL_PRIMITIVE_GETTER(name, type)
#define DECL_RELAXED_GETTER(name,...)
#define DECL_PRIMITIVE_ACCESSORS(name, type)
#define DECL_RELAXED_UINT32_ACCESSORS(name)
#define DECL_PRIMITIVE_SETTER(name, type)
#define DECL_PRINTER(Name)
#define V8_EXPORT_PRIVATE
#define DEFINE_FIELD_OFFSET_CONSTANTS(StartOffset, LIST_MACRO)