Skip to content

[Runtime] Add compatibility override support for CVW runtime functions #78890

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jan 28, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions include/swift/Runtime/Enum.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,11 @@ void swift_initEnumMetadataSingleCase(EnumMetadata *enumType,
EnumLayoutFlags flags,
const TypeLayout *payload);

SWIFT_RUNTIME_EXPORT
void swift_cvw_initEnumMetadataSingleCaseWithLayoutString(
EnumMetadata *self, EnumLayoutFlags layoutFlags,
const Metadata *payloadType);

SWIFT_RUNTIME_EXPORT
void swift_initEnumMetadataSingleCaseWithLayoutString(
EnumMetadata *self, EnumLayoutFlags layoutFlags,
Expand All @@ -65,6 +70,11 @@ void swift_initEnumMetadataSinglePayload(EnumMetadata *enumType,
const TypeLayout *payload,
unsigned emptyCases);

SWIFT_RUNTIME_EXPORT
void swift_cvw_initEnumMetadataSinglePayloadWithLayoutString(
EnumMetadata *enumType, EnumLayoutFlags flags, const Metadata *payload,
unsigned emptyCases);

SWIFT_RUNTIME_EXPORT
void swift_initEnumMetadataSinglePayloadWithLayoutString(
EnumMetadata *enumType, EnumLayoutFlags flags, const Metadata *payload,
Expand Down Expand Up @@ -123,6 +133,11 @@ void swift_initEnumMetadataMultiPayload(EnumMetadata *enumType,
unsigned numPayloads,
const TypeLayout * const *payloadTypes);

SWIFT_RUNTIME_EXPORT
void swift_cvw_initEnumMetadataMultiPayloadWithLayoutString(
EnumMetadata *enumType, EnumLayoutFlags flags, unsigned numPayloads,
const Metadata *const *payloadTypes);

SWIFT_RUNTIME_EXPORT
void swift_initEnumMetadataMultiPayloadWithLayoutString(EnumMetadata *enumType,
EnumLayoutFlags flags,
Expand Down
18 changes: 18 additions & 0 deletions include/swift/Runtime/Metadata.h
Original file line number Diff line number Diff line change
Expand Up @@ -319,6 +319,12 @@ swift_allocateGenericClassMetadata(const ClassDescriptor *description,
const void *arguments,
const GenericClassMetadataPattern *pattern);

SWIFT_EXTERN_C SWIFT_RETURNS_NONNULL SWIFT_NODISCARD
SWIFT_RUNTIME_EXPORT_ATTRIBUTE ClassMetadata *
swift_cvw_allocateGenericClassMetadataWithLayoutString(
const ClassDescriptor *description, const void *arguments,
const GenericClassMetadataPattern *pattern);

SWIFT_EXTERN_C SWIFT_RETURNS_NONNULL SWIFT_NODISCARD SWIFT_RUNTIME_EXPORT_ATTRIBUTE
ClassMetadata *
swift_allocateGenericClassMetadataWithLayoutString(
Expand All @@ -336,6 +342,12 @@ swift_allocateGenericValueMetadata(const ValueTypeDescriptor *description,
const GenericValueMetadataPattern *pattern,
size_t extraDataSize);

SWIFT_EXTERN_C SWIFT_RETURNS_NONNULL SWIFT_NODISCARD
SWIFT_RUNTIME_EXPORT_ATTRIBUTE ValueMetadata *
swift_cvw_allocateGenericValueMetadataWithLayoutString(
const ValueTypeDescriptor *description, const void *arguments,
const GenericValueMetadataPattern *pattern, size_t extraDataSize);

SWIFT_EXTERN_C SWIFT_RETURNS_NONNULL SWIFT_NODISCARD SWIFT_RUNTIME_EXPORT_ATTRIBUTE
ValueMetadata *
swift_allocateGenericValueMetadataWithLayoutString(
Expand Down Expand Up @@ -674,6 +686,12 @@ void swift_initStructMetadata(StructMetadata *self,
const TypeLayout * const *fieldTypes,
uint32_t *fieldOffsets);

SWIFT_RUNTIME_EXPORT
void swift_cvw_initStructMetadataWithLayoutString(
StructMetadata *self, StructLayoutFlags flags, size_t numFields,
const uint8_t *const *fieldTypes, const uint8_t *fieldTags,
uint32_t *fieldOffsets);

SWIFT_RUNTIME_EXPORT
void swift_initStructMetadataWithLayoutString(StructMetadata *self,
StructLayoutFlags flags,
Expand Down
88 changes: 44 additions & 44 deletions include/swift/Runtime/RuntimeFunctions.def
Original file line number Diff line number Diff line change
Expand Up @@ -1027,12 +1027,12 @@ FUNCTION(AllocateGenericClassMetadata, Swift, swift_allocateGenericClassMetadata
EFFECT(MetaData),
UNKNOWN_MEMEFFECTS)

// Metadata *swift_allocateGenericClassMetadataWithLayoutString(
// Metadata *swift_cvw_allocateGenericClassMetadataWithLayoutString(
// ClassDescriptor *type,
// const void * const *arguments,
// const void *template);
FUNCTION(AllocateGenericClassMetadataWithLayoutString,
Swift, swift_allocateGenericClassMetadataWithLayoutString,
Swift, swift_cvw_allocateGenericClassMetadataWithLayoutString,
C_CC, AlwaysAvailable,
RETURNS(TypeMetadataPtrTy),
ARGS(TypeContextDescriptorPtrTy, Int8PtrPtrTy, Int8PtrTy),
Expand All @@ -1052,13 +1052,13 @@ FUNCTION(AllocateGenericValueMetadata, Swift, swift_allocateGenericValueMetadata
EFFECT(MetaData),
UNKNOWN_MEMEFFECTS)

// Metadata *swift_allocateGenericValueMetadataWithLayoutString(
// Metadata *swift_cvw_allocateGenericValueMetadataWithLayoutString(
// ValueTypeDescriptor *type,
// const void * const *arguments,
// const void *template,
// size_t extraSize);
FUNCTION(AllocateGenericValueMetadataWithLayoutString,
Swift, swift_allocateGenericValueMetadataWithLayoutString,
Swift, swift_cvw_allocateGenericValueMetadataWithLayoutString,
C_CC, AlwaysAvailable,
RETURNS(TypeMetadataPtrTy),
ARGS(TypeContextDescriptorPtrTy, Int8PtrPtrTy, Int8PtrTy, SizeTy),
Expand Down Expand Up @@ -1489,14 +1489,14 @@ FUNCTION(InitStructMetadata,
EFFECT(MetaData),
UNKNOWN_MEMEFFECTS)

// void swift_initStructMetadataWithLayoutString(Metadata *structType,
// void swift_cvw_initStructMetadataWithLayoutString(Metadata *structType,
// StructLayoutFlags flags,
// size_t numFields,
// uint8_t * const *fieldTypes,
// const uint8_t *fieldTags
// uint32_t *fieldOffsets);
FUNCTION(InitStructMetadataWithLayoutString,
Swift, swift_initStructMetadataWithLayoutString, C_CC, AlwaysAvailable,
Swift, swift_cvw_initStructMetadataWithLayoutString, C_CC, AlwaysAvailable,
RETURNS(VoidTy),
ARGS(TypeMetadataPtrTy, SizeTy, SizeTy,
Int8PtrPtrTy->getPointerTo(0),
Expand All @@ -1518,11 +1518,11 @@ FUNCTION(InitEnumMetadataSingleCase,
EFFECT(MetaData),
UNKNOWN_MEMEFFECTS)

// void swift_initEnumMetadataSingleCaseWithLayoutString(Metadata *enumType,
// void swift_cvw_initEnumMetadataSingleCaseWithLayoutString(Metadata *enumType,
// EnumLayoutFlags flags,
// Metadata *payload);
FUNCTION(InitEnumMetadataSingleCaseWithLayoutString,
Swift, swift_initEnumMetadataSingleCaseWithLayoutString,
Swift, swift_cvw_initEnumMetadataSingleCaseWithLayoutString,
C_CC, AlwaysAvailable,
RETURNS(VoidTy),
ARGS(TypeMetadataPtrTy, SizeTy, TypeMetadataPtrTy),
Expand All @@ -1543,12 +1543,12 @@ FUNCTION(InitEnumMetadataSinglePayload,
EFFECT(MetaData),
UNKNOWN_MEMEFFECTS)

// void swift_initEnumMetadataSinglePayloadWithLayoutString(Metadata *enumType,
// void swift_cvw_initEnumMetadataSinglePayloadWithLayoutString(Metadata *enumType,
// EnumLayoutFlags flags,
// Metadata *payload,
// unsigned num_empty_cases);
FUNCTION(InitEnumMetadataSinglePayloadWithLayoutString,
Swift, swift_initEnumMetadataSinglePayloadWithLayoutString,
Swift, swift_cvw_initEnumMetadataSinglePayloadWithLayoutString,
C_CC, AlwaysAvailable,
RETURNS(VoidTy),
ARGS(TypeMetadataPtrTy, SizeTy, TypeMetadataPtrTy, Int32Ty),
Expand All @@ -1570,12 +1570,12 @@ FUNCTION(InitEnumMetadataMultiPayload,
UNKNOWN_MEMEFFECTS)

// void
// swift_initEnumMetadataMultiPayloadWithLayoutString(Metadata *enumType,
// swift_cvw_initEnumMetadataMultiPayloadWithLayoutString(Metadata *enumType,
// EnumLayoutFlags layoutFlags,
// size_t numPayloads,
// Metadata * const *payloadTypes);
FUNCTION(InitEnumMetadataMultiPayloadWithLayoutString,
Swift, swift_initEnumMetadataMultiPayloadWithLayoutString,
Swift, swift_cvw_initEnumMetadataMultiPayloadWithLayoutString,
C_CC, AlwaysAvailable,
RETURNS(VoidTy),
ARGS(TypeMetadataPtrTy, SizeTy, SizeTy, TypeMetadataPtrPtrTy),
Expand Down Expand Up @@ -2684,9 +2684,9 @@ FUNCTION(StoreMultiPayloadEnumTagSinglePayload,
EFFECT(NoEffect),
UNKNOWN_MEMEFFECTS)

// void swift_generic_destroy(opaque*, const Metadata* type);
// void swift_cvw_destroy(opaque*, const Metadata* type);
FUNCTION(GenericDestroy,
Swift, swift_generic_destroy,
Swift, swift_cvw_destroy,
C_CC, AlwaysAvailable,
RETURNS(VoidTy),
ARGS(Int8PtrTy, TypeMetadataPtrTy),
Expand All @@ -2695,49 +2695,49 @@ FUNCTION(GenericDestroy,
UNKNOWN_MEMEFFECTS)


// void *swift_generic_assignWithCopy(opaque* dest, opaque* src, const Metadata* type);
// void *swift_cvw_assignWithCopy(opaque* dest, opaque* src, const Metadata* type);
FUNCTION(GenericAssignWithCopy,
Swift, swift_generic_assignWithCopy,
Swift, swift_cvw_assignWithCopy,
C_CC, AlwaysAvailable,
RETURNS(Int8PtrTy),
ARGS(Int8PtrTy, Int8PtrTy, TypeMetadataPtrTy),
ATTRS(NoUnwind),
EFFECT(RefCounting, Deallocating),
UNKNOWN_MEMEFFECTS)

// void *swift_generic_assignWithTake(opaque* dest, opaque* src, const Metadata* type);
// void *swift_cvw_assignWithTake(opaque* dest, opaque* src, const Metadata* type);
FUNCTION(GenericAssignWithTake,
Swift, swift_generic_assignWithTake,
Swift, swift_cvw_assignWithTake,
C_CC, AlwaysAvailable,
RETURNS(Int8PtrTy),
ARGS(Int8PtrTy, Int8PtrTy, TypeMetadataPtrTy),
ATTRS(NoUnwind),
EFFECT(RefCounting, Deallocating),
UNKNOWN_MEMEFFECTS)

// void *swift_generic_initWithCopy(opaque* dest, opaque* src, const Metadata* type);
// void *swift_cvw_initWithCopy(opaque* dest, opaque* src, const Metadata* type);
FUNCTION(GenericInitWithCopy,
Swift, swift_generic_initWithCopy,
Swift, swift_cvw_initWithCopy,
C_CC, AlwaysAvailable,
RETURNS(Int8PtrTy),
ARGS(Int8PtrTy, Int8PtrTy, TypeMetadataPtrTy),
ATTRS(NoUnwind),
EFFECT(RefCounting),
UNKNOWN_MEMEFFECTS)

// void *swift_generic_initWithTake(opaque* dest, opaque* src, const Metadata* type);
// void *swift_cvw_initWithTake(opaque* dest, opaque* src, const Metadata* type);
FUNCTION(GenericInitWithTake,
Swift, swift_generic_initWithTake,
Swift, swift_cvw_initWithTake,
C_CC, AlwaysAvailable,
RETURNS(Int8PtrTy),
ARGS(Int8PtrTy, Int8PtrTy, TypeMetadataPtrTy),
ATTRS(NoUnwind),
EFFECT(RefCounting),
UNKNOWN_MEMEFFECTS)

// void *swift_generic_initializeBufferWithCopyOfBuffer(ValueBuffer* dest, ValueBuffer* src, const Metadata* type);
// void *swift_cvw_initializeBufferWithCopyOfBuffer(ValueBuffer* dest, ValueBuffer* src, const Metadata* type);
FUNCTION(GenericInitializeBufferWithCopyOfBuffer,
Swift, swift_generic_initializeBufferWithCopyOfBuffer,
Swift, swift_cvw_initializeBufferWithCopyOfBuffer,
C_CC, AlwaysAvailable,
RETURNS(Int8PtrTy),
ARGS(getFixedBufferTy()->getPointerTo(),
Expand All @@ -2747,113 +2747,113 @@ FUNCTION(GenericInitializeBufferWithCopyOfBuffer,
EFFECT(RefCounting),
UNKNOWN_MEMEFFECTS)

// unsigned swift_singletonEnum_getEnumTag(swift::OpaqueValue *address,
// unsigned swift_cvw_singletonEnum_getEnumTag(swift::OpaqueValue *address,
// const Metadata *metadata);
FUNCTION(SingletonEnumGetEnumTag,
Swift, swift_singletonEnum_getEnumTag,
Swift, swift_cvw_singletonEnum_getEnumTag,
C_CC, AlwaysAvailable,
RETURNS(Int32Ty),
ARGS(Int8PtrTy, TypeMetadataPtrTy),
ATTRS(NoUnwind, WillReturn),
EFFECT(NoEffect),
UNKNOWN_MEMEFFECTS)

// void swift_singletonEnum_destructiveInjectEnumTag(swift::OpaqueValue *address,
// void swift_cvw_singletonEnum_destructiveInjectEnumTag(swift::OpaqueValue *address,
// unsigned tag,
// const Metadata *metadata)
FUNCTION(SingletonEnumDestructiveInjectEnumTag,
Swift, swift_singletonEnum_destructiveInjectEnumTag,
Swift, swift_cvw_singletonEnum_destructiveInjectEnumTag,
C_CC, AlwaysAvailable,
RETURNS(VoidTy),
ARGS(Int8PtrTy, Int32Ty, TypeMetadataPtrTy),
ATTRS(NoUnwind, WillReturn),
EFFECT(NoEffect),
UNKNOWN_MEMEFFECTS)

// unsigned swift_enumSimple_getEnumTag(swift::OpaqueValue *address,
// unsigned swift_cvw_enumSimple_getEnumTag(swift::OpaqueValue *address,
// const Metadata *metadata);
FUNCTION(EnumSimpleGetEnumTag,
Swift, swift_enumSimple_getEnumTag,
Swift, swift_cvw_enumSimple_getEnumTag,
C_CC, AlwaysAvailable,
RETURNS(Int32Ty),
ARGS(Int8PtrTy, TypeMetadataPtrTy),
ATTRS(NoUnwind, WillReturn),
EFFECT(NoEffect),
UNKNOWN_MEMEFFECTS)

// unsigned swift_enumSimple_destructiveInjectEnumTag(swift::OpaqueValue *address,
// unsigned swift_cvw_enumSimple_destructiveInjectEnumTag(swift::OpaqueValue *address,
// unsigned tag,
// const Metadata *metadata)
FUNCTION(EnumSimpleDestructiveInjectEnumTag,
Swift, swift_enumSimple_destructiveInjectEnumTag,
Swift, swift_cvw_enumSimple_destructiveInjectEnumTag,
C_CC, AlwaysAvailable,
RETURNS(VoidTy),
ARGS(Int8PtrTy, Int32Ty, TypeMetadataPtrTy),
ATTRS(NoUnwind, WillReturn),
EFFECT(NoEffect),
UNKNOWN_MEMEFFECTS)

// unsigned swift_enumFn_getEnumTag(swift::OpaqueValue *address,
// unsigned swift_cvw_enumFn_getEnumTag(swift::OpaqueValue *address,
// const Metadata *metadata);
FUNCTION(EnumFnGetEnumTag,
Swift, swift_enumFn_getEnumTag,
Swift, swift_cvw_enumFn_getEnumTag,
C_CC, AlwaysAvailable,
RETURNS(Int32Ty),
ARGS(Int8PtrTy, TypeMetadataPtrTy),
ATTRS(NoUnwind, WillReturn),
EFFECT(NoEffect),
UNKNOWN_MEMEFFECTS)

// unsigned swift_multiPayloadEnumGeneric_getEnumTag(opaque* address,
// unsigned swift_cvw_multiPayloadEnumGeneric_getEnumTag(opaque* address,
// const Metadata *type);
FUNCTION(MultiPayloadEnumGenericGetEnumTag,
Swift, swift_multiPayloadEnumGeneric_getEnumTag,
Swift, swift_cvw_multiPayloadEnumGeneric_getEnumTag,
C_CC, AlwaysAvailable,
RETURNS(Int32Ty),
ARGS(Int8PtrTy, TypeMetadataPtrTy),
ATTRS(NoUnwind, WillReturn),
EFFECT(NoEffect),
UNKNOWN_MEMEFFECTS)

// void swift_multiPayloadEnumGeneric_destructiveInjectEnumTag(swift::OpaqueValue *address,
// void swift_cvw_multiPayloadEnumGeneric_destructiveInjectEnumTag(swift::OpaqueValue *address,
// unsigned tag,
// const Metadata *metadata)
FUNCTION(MultiPayloadEnumGenericDestructiveInjectEnumTag,
Swift, swift_multiPayloadEnumGeneric_destructiveInjectEnumTag,
Swift, swift_cvw_multiPayloadEnumGeneric_destructiveInjectEnumTag,
C_CC, AlwaysAvailable,
RETURNS(VoidTy),
ARGS(Int8PtrTy, Int32Ty, TypeMetadataPtrTy),
ATTRS(NoUnwind, WillReturn),
EFFECT(NoEffect),
UNKNOWN_MEMEFFECTS)

// unsigned swift_singlePayloadEnumGeneric_getEnumTag(swift::OpaqueValue *address,
// unsigned swift_cvw_singlePayloadEnumGeneric_getEnumTag(swift::OpaqueValue *address,
// const Metadata *metadata);
FUNCTION(SinglePayloadEnumGenericGetEnumTag,
Swift, swift_singlePayloadEnumGeneric_getEnumTag,
Swift, swift_cvw_singlePayloadEnumGeneric_getEnumTag,
C_CC, AlwaysAvailable,
RETURNS(Int32Ty),
ARGS(Int8PtrTy, TypeMetadataPtrTy),
ATTRS(NoUnwind, WillReturn),
EFFECT(NoEffect),
UNKNOWN_MEMEFFECTS)

// void swift_singlePayloadEnumGeneric_destructiveInjectEnumTag(swift::OpaqueValue *address,
// void swift_cvw_singlePayloadEnumGeneric_destructiveInjectEnumTag(swift::OpaqueValue *address,
// unsigned tag,
// const Metadata *metadata)
FUNCTION(SinglePayloadEnumGenericDestructiveInjectEnumTag,
Swift, swift_singlePayloadEnumGeneric_destructiveInjectEnumTag,
Swift, swift_cvw_singlePayloadEnumGeneric_destructiveInjectEnumTag,
C_CC, AlwaysAvailable,
RETURNS(VoidTy),
ARGS(Int8PtrTy, Int32Ty, TypeMetadataPtrTy),
ATTRS(NoUnwind, WillReturn),
EFFECT(NoEffect),
UNKNOWN_MEMEFFECTS)

// void swift_generic_instantiateLayoutString(const uint8_t* layoutStr,
// void swift_cvw_instantiateLayoutString(const uint8_t* layoutStr,
// Metadata* type);
FUNCTION(GenericInstantiateLayoutString,
Swift, swift_generic_instantiateLayoutString,
Swift, swift_cvw_instantiateLayoutString,
C_CC, AlwaysAvailable,
RETURNS(VoidTy),
ARGS(Int8PtrTy, TypeMetadataPtrTy),
Expand Down
Loading