diff options
Diffstat (limited to 'deps/v8/src/objects/objects-body-descriptors-inl.h')
-rw-r--r-- | deps/v8/src/objects/objects-body-descriptors-inl.h | 63 |
1 files changed, 46 insertions, 17 deletions
diff --git a/deps/v8/src/objects/objects-body-descriptors-inl.h b/deps/v8/src/objects/objects-body-descriptors-inl.h index 18dceb527d..bb3c6ca3ce 100644 --- a/deps/v8/src/objects/objects-body-descriptors-inl.h +++ b/deps/v8/src/objects/objects-body-descriptors-inl.h @@ -492,7 +492,7 @@ class FeedbackMetadata::BodyDescriptor final : public BodyDescriptorBase { static inline int SizeOf(Map map, HeapObject obj) { return FeedbackMetadata::SizeFor( - FeedbackMetadata::cast(obj).synchronized_slot_count()); + FeedbackMetadata::cast(obj).slot_count(kAcquireLoad)); } }; @@ -626,6 +626,24 @@ class WasmExportedFunctionData::BodyDescriptor final static inline int SizeOf(Map map, HeapObject object) { return kSize; } }; +class WasmCapiFunctionData::BodyDescriptor final : public BodyDescriptorBase { + public: + static bool IsValidSlot(Map map, HeapObject obj, int offset) { + UNREACHABLE(); + } + + template <typename ObjectVisitor> + static inline void IterateBody(Map map, HeapObject obj, int object_size, + ObjectVisitor* v) { + Foreign::BodyDescriptor::IterateBody<ObjectVisitor>(map, obj, object_size, + v); + IteratePointers(obj, WasmFunctionData::kStartOfStrongFieldsOffset, + kEndOfStrongFieldsOffset, v); + } + + static inline int SizeOf(Map map, HeapObject object) { return kSize; } +}; + class WasmInstanceObject::BodyDescriptor final : public BodyDescriptorBase { public: static bool IsValidSlot(Map map, HeapObject obj, int offset) { @@ -772,8 +790,15 @@ class Code::BodyDescriptor final : public BodyDescriptorBase { // GC does not visit data/code in the header and in the body directly. IteratePointers(obj, kRelocationInfoOffset, kDataStart, v); - RelocIterator it(Code::cast(obj), kRelocModeMask); - v->VisitRelocInfo(&it); + Code code = Code::cast(obj); + HeapObject relocation_info = + code.synchronized_unchecked_relocation_info_or_undefined(); + + if (!relocation_info.IsUndefined()) { + RelocIterator it(code, ByteArray::unchecked_cast(relocation_info), + kRelocModeMask); + v->VisitRelocInfo(&it); + } } template <typename ObjectVisitor> @@ -855,7 +880,7 @@ class CodeDataContainer::BodyDescriptor final : public BodyDescriptorBase { public: static bool IsValidSlot(Map map, HeapObject obj, int offset) { return offset >= CodeDataContainer::kHeaderSize && - offset < CodeDataContainer::kSize; + offset <= CodeDataContainer::kPointerFieldsWeakEndOffset; } template <typename ObjectVisitor> @@ -866,6 +891,12 @@ class CodeDataContainer::BodyDescriptor final : public BodyDescriptorBase { IterateCustomWeakPointers( obj, CodeDataContainer::kPointerFieldsStrongEndOffset, CodeDataContainer::kPointerFieldsWeakEndOffset, v); + + if (V8_EXTERNAL_CODE_SPACE_BOOL) { + // TODO(v8:11880): Currently, the |code| field is still compressed and + // the |code_entry_point| field doesn't require custom visitation, so + // nothing to do here yet. + } } static inline int SizeOf(Map map, HeapObject object) { @@ -988,6 +1019,9 @@ ReturnType BodyDescriptorApply(InstanceType type, T1 p1, T2 p2, T3 p3, T4 p4) { #if V8_ENABLE_WEBASSEMBLY case WASM_ARRAY_TYPE: return Op::template apply<WasmArray::BodyDescriptor>(p1, p2, p3, p4); + case WASM_CAPI_FUNCTION_DATA_TYPE: + return Op::template apply<WasmCapiFunctionData::BodyDescriptor>(p1, p2, + p3, p4); case WASM_EXPORTED_FUNCTION_DATA_TYPE: return Op::template apply<WasmExportedFunctionData::BodyDescriptor>( p1, p2, p3, p4); @@ -1040,6 +1074,14 @@ ReturnType BodyDescriptorApply(InstanceType type, T1 p1, T2 p2, T3 p3, T4 p4) { case JS_STRING_ITERATOR_PROTOTYPE_TYPE: case JS_STRING_ITERATOR_TYPE: case JS_TYPED_ARRAY_PROTOTYPE_TYPE: + case JS_FUNCTION_TYPE: + case JS_PROMISE_CONSTRUCTOR_TYPE: + case JS_REG_EXP_CONSTRUCTOR_TYPE: + case JS_ARRAY_CONSTRUCTOR_TYPE: +#define TYPED_ARRAY_CONSTRUCTORS_SWITCH(Type, type, TYPE, Ctype) \ + case TYPE##_TYPED_ARRAY_CONSTRUCTOR_TYPE: + TYPED_ARRAYS(TYPED_ARRAY_CONSTRUCTORS_SWITCH) +#undef TYPED_ARRAY_CONSTRUCTORS_SWITCH #ifdef V8_INTL_SUPPORT case JS_V8_BREAK_ITERATOR_TYPE: case JS_COLLATOR_TYPE: @@ -1078,15 +1120,6 @@ ReturnType BodyDescriptorApply(InstanceType type, T1 p1, T2 p2, T3 p3, T4 p4) { return Op::template apply<JSDataView::BodyDescriptor>(p1, p2, p3, p4); case JS_TYPED_ARRAY_TYPE: return Op::template apply<JSTypedArray::BodyDescriptor>(p1, p2, p3, p4); - case JS_FUNCTION_TYPE: - case JS_PROMISE_CONSTRUCTOR_TYPE: - case JS_REG_EXP_CONSTRUCTOR_TYPE: - case JS_ARRAY_CONSTRUCTOR_TYPE: -#define TYPED_ARRAY_CONSTRUCTORS_SWITCH(Type, type, TYPE, Ctype) \ - case TYPE##_TYPED_ARRAY_CONSTRUCTOR_TYPE: - TYPED_ARRAYS(TYPED_ARRAY_CONSTRUCTORS_SWITCH) -#undef TYPED_ARRAY_CONSTRUCTORS_SWITCH - return Op::template apply<JSFunction::BodyDescriptor>(p1, p2, p3, p4); case WEAK_CELL_TYPE: return Op::template apply<WeakCell::BodyDescriptor>(p1, p2, p3, p4); case JS_WEAK_REF_TYPE: @@ -1146,10 +1179,6 @@ ReturnType BodyDescriptorApply(InstanceType type, T1 p1, T2 p2, T3 p3, T4 p4) { p4); } #if V8_ENABLE_WEBASSEMBLY - if (type == WASM_CAPI_FUNCTION_DATA_TYPE) { - return Op::template apply<WasmCapiFunctionData::BodyDescriptor>(p1, p2, - p3, p4); - } if (type == WASM_INDIRECT_FUNCTION_TABLE_TYPE) { return Op::template apply<WasmIndirectFunctionTable::BodyDescriptor>( p1, p2, p3, p4); |