Flutter Engine
The Flutter Engine
Public Member Functions | Static Public Member Functions | Friends | List of all members
dart::InstructionsTable Class Reference

#include <object.h>

Inheritance diagram for dart::InstructionsTable:
dart::Object

Public Member Functions

void SetCodeAt (intptr_t index, CodePtr code) const
 
bool ContainsPc (uword pc) const
 
const UntaggedInstructionsTable::Data * rodata () const
 
uword PayloadStartAt (intptr_t index) const
 
uword EntryPointAt (intptr_t index) const
 
- Public Member Functions inherited from dart::Object
virtual ~Object ()
 
ObjectPtr ptr () const
 
void operator= (ObjectPtr value)
 
bool IsCanonical () const
 
void SetCanonical () const
 
void ClearCanonical () const
 
bool IsImmutable () const
 
void SetImmutable () const
 
void ClearImmutable () const
 
intptr_t GetClassId () const
 
ClassPtr clazz () const
 
 CLASS_LIST_FOR_HANDLES (DEFINE_CLASS_TESTER)
 
bool IsNull () const
 
virtual const char * ToCString () const
 
void PrintJSON (JSONStream *stream, bool ref=true) const
 
virtual void PrintJSONImpl (JSONStream *stream, bool ref) const
 
void PrintImplementationFields (JSONStream *stream) const
 
virtual void PrintImplementationFieldsImpl (const JSONArray &jsarr_fields) const
 
virtual const char * JSONType () const
 
virtual StringPtr DictionaryName () const
 
bool IsNew () const
 
bool IsOld () const
 
bool InVMIsolateHeap () const
 
void Print () const
 

Static Public Member Functions

static intptr_t InstanceSize ()
 
static InstructionsTablePtr New (intptr_t length, uword start_pc, uword end_pc, uword rodata)
 
static bool ContainsPc (InstructionsTablePtr table, uword pc)
 
static CodePtr FindCode (InstructionsTablePtr table, uword pc)
 
static const UntaggedCompressedStackMaps::PayloadFindStackMap (InstructionsTablePtr table, uword pc, uword *start_pc)
 
static const UntaggedCompressedStackMaps::PayloadGetCanonicalStackMap (InstructionsTablePtr table)
 
static uword PayloadStartAt (InstructionsTablePtr table, intptr_t index)
 
- Static Public Member Functions inherited from dart::Object
static ObjectPtr RawCast (ObjectPtr obj)
 
static constexpr bool ContainsCompressedPointers ()
 
static intptr_t tags_offset ()
 
static ObjectHandle ()
 
static ObjectHandle (Zone *zone)
 
static ObjectHandle (ObjectPtr ptr)
 
static ObjectHandle (Zone *zone, ObjectPtr ptr)
 
static ObjectZoneHandle ()
 
static ObjectZoneHandle (Zone *zone)
 
static ObjectZoneHandle (ObjectPtr ptr)
 
static ObjectZoneHandle (Zone *zone, ObjectPtr ptr)
 
static ObjectReadOnlyHandle ()
 
static ObjectPtr null ()
 
static void set_vm_isolate_snapshot_object_table (const Array &table)
 
static ClassPtr class_class ()
 
static ClassPtr dynamic_class ()
 
static ClassPtr void_class ()
 
static ClassPtr type_parameters_class ()
 
static ClassPtr type_arguments_class ()
 
static ClassPtr patch_class_class ()
 
static ClassPtr function_class ()
 
static ClassPtr closure_data_class ()
 
static ClassPtr ffi_trampoline_data_class ()
 
static ClassPtr field_class ()
 
static ClassPtr script_class ()
 
static ClassPtr library_class ()
 
static ClassPtr namespace_class ()
 
static ClassPtr kernel_program_info_class ()
 
static ClassPtr code_class ()
 
static ClassPtr instructions_class ()
 
static ClassPtr instructions_section_class ()
 
static ClassPtr instructions_table_class ()
 
static ClassPtr object_pool_class ()
 
static ClassPtr pc_descriptors_class ()
 
static ClassPtr code_source_map_class ()
 
static ClassPtr compressed_stackmaps_class ()
 
static ClassPtr var_descriptors_class ()
 
static ClassPtr exception_handlers_class ()
 
static ClassPtr context_class ()
 
static ClassPtr context_scope_class ()
 
static ClassPtr sentinel_class ()
 
static ClassPtr api_error_class ()
 
static ClassPtr language_error_class ()
 
static ClassPtr unhandled_exception_class ()
 
static ClassPtr unwind_error_class ()
 
static ClassPtr singletargetcache_class ()
 
static ClassPtr unlinkedcall_class ()
 
static ClassPtr monomorphicsmiablecall_class ()
 
static ClassPtr icdata_class ()
 
static ClassPtr megamorphic_cache_class ()
 
static ClassPtr subtypetestcache_class ()
 
static ClassPtr loadingunit_class ()
 
static ClassPtr weak_serialization_reference_class ()
 
static ClassPtr weak_array_class ()
 
static void InitNullAndBool (IsolateGroup *isolate_group)
 
static void Init (IsolateGroup *isolate_group)
 
static void InitVtables ()
 
static void FinishInit (IsolateGroup *isolate_group)
 
static void FinalizeVMIsolate (IsolateGroup *isolate_group)
 
static void FinalizeReadOnlyObject (ObjectPtr object)
 
static void Cleanup ()
 
static ErrorPtr Init (IsolateGroup *isolate_group, const uint8_t *kernel_buffer, intptr_t kernel_buffer_size)
 
static void MakeUnusedSpaceTraversable (const Object &obj, intptr_t original_size, intptr_t used_size)
 
static intptr_t InstanceSize ()
 
template<class FakeObject >
static void VerifyBuiltinVtable (intptr_t cid)
 
static void VerifyBuiltinVtables ()
 
static bool ShouldHaveImmutabilityBitSet (classid_t class_id)
 

Friends

class Class
 
class Deserializer
 

Additional Inherited Members

- Public Types inherited from dart::Object
enum  NameVisibility { kInternalName = 0 , kScrubbedName , kUserVisibleName }
 
enum class  NameDisambiguation { kYes , kNo }
 
using UntaggedObjectType = UntaggedObject
 
using ObjectPtrType = ObjectPtr
 
- Static Public Attributes inherited from dart::Object
static constexpr intptr_t kHashBits = 30
 
static const ClassId kClassId = kObjectCid
 
- Protected Member Functions inherited from dart::Object
 Object ()
 
uword raw_value () const
 
void setPtr (ObjectPtr value, intptr_t default_cid)
 
void CheckHandle () const
 
cpp_vtable vtable () const
 
void set_vtable (cpp_vtable value)
 
bool Contains (uword addr) const
 
template<typename type , std::memory_order order = std::memory_order_relaxed>
type LoadPointer (type const *addr) const
 
template<typename type , std::memory_order order = std::memory_order_relaxed>
void StorePointer (type const *addr, type value) const
 
template<typename type , typename compressed_type , std::memory_order order = std::memory_order_relaxed>
void StoreCompressedPointer (compressed_type const *addr, type value) const
 
template<typename type >
void StorePointerUnaligned (type const *addr, type value, Thread *thread) const
 
void StoreSmi (SmiPtr const *addr, SmiPtr value) const
 
template<typename FieldType >
void StoreSimd128 (const FieldType *addr, simd128_value_t value) const
 
template<typename FieldType >
FieldType LoadNonPointer (const FieldType *addr) const
 
template<typename FieldType , std::memory_order order>
FieldType LoadNonPointer (const FieldType *addr) const
 
template<typename FieldType , typename ValueType >
void StoreNonPointer (const FieldType *addr, ValueType value) const
 
template<typename FieldType , typename ValueType , std::memory_order order>
void StoreNonPointer (const FieldType *addr, ValueType value) const
 
template<typename FieldType >
FieldType * UnsafeMutableNonPointer (const FieldType *addr) const
 
 CLASS_LIST (STORE_NON_POINTER_ILLEGAL_TYPE)
 
void UnimplementedMethod () const
 
void AddCommonObjectProperties (JSONObject *jsobj, const char *protocol_type, bool ref) const
 
- Static Protected Member Functions inherited from dart::Object
static DART_NOINLINE ObjectHandleImpl (Zone *zone, ObjectPtr ptr, intptr_t default_cid)
 
static DART_NOINLINE ObjectZoneHandleImpl (Zone *zone, ObjectPtr ptr, intptr_t default_cid)
 
static DART_NOINLINE ObjectReadOnlyHandleImpl (intptr_t cid)
 
static ObjectPtr Allocate (intptr_t cls_id, intptr_t size, Heap::Space space, bool compressed, uword ptr_field_start_offset, uword ptr_field_end_offset)
 
template<typename T >
static DART_FORCE_INLINE T::ObjectPtrType Allocate (Heap::Space space)
 
template<typename T >
static DART_FORCE_INLINE T::ObjectPtrType Allocate (Heap::Space space, intptr_t elements)
 
template<typename T >
static DART_FORCE_INLINE T::ObjectPtrType AllocateVariant (intptr_t class_id, Heap::Space space)
 
template<typename T >
static DART_FORCE_INLINE T::ObjectPtrType AllocateVariant (intptr_t class_id, Heap::Space space, intptr_t elements)
 
static constexpr intptr_t RoundedAllocationSize (intptr_t size)
 
static ObjectPtr Clone (const Object &orig, Heap::Space space, bool load_with_relaxed_atomics=false)
 
template<typename T >
static DART_FORCE_INLINE uword from_offset ()
 
template<typename T >
static DART_FORCE_INLINE uword to_offset (intptr_t length=0)
 
- Protected Attributes inherited from dart::Object
ObjectPtr ptr_
 

Detailed Description

Definition at line 5969 of file object.h.

Member Function Documentation

◆ ContainsPc() [1/2]

bool dart::InstructionsTable::ContainsPc ( InstructionsTablePtr  table,
uword  pc 
)
static

Definition at line 15545 of file object.cc.

15545 {
15546 return (InstructionsTable::start_pc(table) <= pc) &&
15547 (pc < InstructionsTable::end_pc(table));
15548}
SI F table(const skcms_Curve *curve, F v)

◆ ContainsPc() [2/2]

bool dart::InstructionsTable::ContainsPc ( uword  pc) const
inline

Definition at line 5980 of file object.h.

5980{ return ContainsPc(ptr(), pc); }
bool ContainsPc(uword pc) const
Definition: object.h:5980
ObjectPtr ptr() const
Definition: object.h:332

◆ EntryPointAt()

uword dart::InstructionsTable::EntryPointAt ( intptr_t  index) const

Definition at line 15641 of file object.cc.

15641 {
15642 ASSERT(0 <= code_index);
15643 ASSERT(code_index < static_cast<intptr_t>(rodata()->length));
15644 return InstructionsTable::start_pc(this->ptr()) +
15645 rodata()->entries()[code_index].pc_offset;
15646}
const UntaggedInstructionsTable::Data * rodata() const
Definition: object.h:5991
#define ASSERT(E)
size_t length

◆ FindCode()

CodePtr dart::InstructionsTable::FindCode ( InstructionsTablePtr  table,
uword  pc 
)
static

Definition at line 15610 of file object.cc.

15610 {
15611 // This can run in the middle of GC and must not allocate handles.
15612 NoSafepointScope no_safepoint;
15614
15615 const auto rodata = table.untag()->rodata_;
15616
15617 const auto pc_offset = InstructionsTable::ConvertPcToOffset(table, pc);
15618
15619 if (pc_offset <= rodata->entries()[rodata->first_entry_with_code].pc_offset) {
15620 return StubCode::UnknownDartCode().ptr();
15621 }
15622
15623 const auto idx =
15624 FindEntry(table, pc, table.untag()->rodata_->first_entry_with_code);
15625 if (idx != -1) {
15626 const intptr_t code_index = idx - rodata->first_entry_with_code;
15627 ASSERT(code_index >= 0);
15628 ASSERT(code_index <
15629 Smi::Value(table.untag()->code_objects()->untag()->length()));
15630 ObjectPtr result =
15631 table.untag()->code_objects()->untag()->element(code_index);
15632 ASSERT(result->IsCode());
15633 // Note: can't use Code::RawCast(...) here because it allocates handles
15634 // in DEBUG mode.
15635 return static_cast<CodePtr>(result);
15636 }
15637
15638 return Code::null();
15639}
static ObjectPtr null()
Definition: object.h:433
intptr_t Value() const
Definition: object.h:9990
GAsyncResult * result

◆ FindStackMap()

const UntaggedCompressedStackMaps::Payload * dart::InstructionsTable::FindStackMap ( InstructionsTablePtr  table,
uword  pc,
uword start_pc 
)
static

Definition at line 15594 of file object.cc.

15597 {
15598 // This can run in the middle of GC and must not allocate handles.
15599 NoSafepointScope no_safepoint;
15600 const intptr_t idx = FindEntry(table, pc);
15601 if (idx != -1) {
15602 const auto rodata = table.untag()->rodata_;
15603 const auto entries = rodata->entries();
15604 *start_pc = InstructionsTable::start_pc(table) + entries[idx].pc_offset;
15605 return rodata->StackMapAt(entries[idx].stack_map_offset);
15606 }
15607 return nullptr;
15608}

◆ GetCanonicalStackMap()

const UntaggedCompressedStackMaps::Payload * dart::InstructionsTable::GetCanonicalStackMap ( InstructionsTablePtr  table)
static

Definition at line 15587 of file object.cc.

15587 {
15588 const auto rodata = table.untag()->rodata_;
15589 return rodata->canonical_stack_map_entries_offset != 0
15590 ? rodata->StackMapAt(rodata->canonical_stack_map_entries_offset)
15591 : nullptr;
15592}

◆ InstanceSize()

static intptr_t dart::InstructionsTable::InstanceSize ( )
inlinestatic

Definition at line 5971 of file object.h.

5971{ return sizeof(UntaggedInstructionsTable); }

◆ New()

InstructionsTablePtr dart::InstructionsTable::New ( intptr_t  length,
uword  start_pc,
uword  end_pc,
uword  rodata 
)
static

Definition at line 15518 of file object.cc.

15521 {
15523 ASSERT(length >= 0);
15524 ASSERT(start_pc <= end_pc);
15525 auto* const zone = Thread::Current()->zone();
15526 const Array& code_objects =
15527 (length == 0) ? Object::empty_array()
15529 const auto& result = InstructionsTable::Handle(
15530 zone, Object::Allocate<InstructionsTable>(Heap::kOld));
15531 result.set_code_objects(code_objects);
15532 result.set_length(length);
15533 result.set_start_pc(start_pc);
15534 result.set_end_pc(end_pc);
15535 result.set_rodata(rodata);
15536 return result.ptr();
15537}
static ArrayPtr New(intptr_t len, Heap::Space space=Heap::kNew)
Definition: object.h:10959
@ kOld
Definition: heap.h:39
static ClassPtr instructions_table_class()
Definition: object.h:536
static Object & Handle()
Definition: object.h:407
Zone * zone() const
Definition: thread_state.h:37
static Thread * Current()
Definition: thread.h:362

◆ PayloadStartAt() [1/2]

static uword dart::InstructionsTable::PayloadStartAt ( InstructionsTablePtr  table,
intptr_t  index 
)
static

◆ PayloadStartAt() [2/2]

uword dart::InstructionsTable::PayloadStartAt ( intptr_t  index) const
inline

Definition at line 5996 of file object.h.

5996 {
5997 return InstructionsTable::PayloadStartAt(this->ptr(), index);
5998 }
uword PayloadStartAt(intptr_t index) const
Definition: object.h:5996

◆ rodata()

const UntaggedInstructionsTable::Data * dart::InstructionsTable::rodata ( ) const
inline

Definition at line 5991 of file object.h.

5991 {
5992 return ptr()->untag()->rodata_;
5993 }
UntaggedObject * untag() const

◆ SetCodeAt()

void dart::InstructionsTable::SetCodeAt ( intptr_t  index,
CodePtr  code 
) const

Definition at line 15539 of file object.cc.

15539 {
15540 ASSERT((0 <= index) &&
15541 (index < Smi::Value(code_objects()->untag()->length())));
15542 code_objects()->untag()->set_element(index, code);
15543}
raw_obj untag() -> num_entries()) VARIABLE_COMPRESSED_VISITOR(Array, Smi::Value(raw_obj->untag() ->length())) VARIABLE_COMPRESSED_VISITOR(TypedData, TypedData::ElementSizeInBytes(raw_obj->GetClassId()) *Smi::Value(raw_obj->untag() ->length())) VARIABLE_COMPRESSED_VISITOR(Record, RecordShape(raw_obj->untag() ->shape()).num_fields()) VARIABLE_NULL_VISITOR(CompressedStackMaps, CompressedStackMaps::PayloadSizeOf(raw_obj)) VARIABLE_NULL_VISITOR(OneByteString, Smi::Value(raw_obj->untag() ->length())) VARIABLE_NULL_VISITOR(TwoByteString, Smi::Value(raw_obj->untag() ->length())) intptr_t UntaggedField::VisitFieldPointers(FieldPtr raw_obj, ObjectPointerVisitor *visitor)
Definition: raw_object.cc:558

Friends And Related Function Documentation

◆ Class

friend class Class
friend

Definition at line 6033 of file object.h.

◆ Deserializer

friend class Deserializer
friend

Definition at line 6034 of file object.h.


The documentation for this class was generated from the following files: