summaryrefslogtreecommitdiff
path: root/deps/v8/src/objects/objects-body-descriptors-inl.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/objects/objects-body-descriptors-inl.h')
-rw-r--r--deps/v8/src/objects/objects-body-descriptors-inl.h63
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);