[Concurrency] Fix arm64e ptrauth violations in Embedded Swift Concurrency

This commit is contained in:
Kuba Mracek
2024-10-28 21:16:48 -07:00
parent 9ee1ddc35e
commit cf7ea301e1
3 changed files with 66 additions and 16 deletions

View File

@@ -1782,9 +1782,14 @@ void DefaultActorImpl::deallocate() {
void DefaultActorImpl::deallocateUnconditional() {
concurrency::trace::actor_deallocate(this);
#if !SWIFT_CONCURRENCY_EMBEDDED
auto metadata = cast<ClassMetadata>(this->metadata);
swift_deallocClassInstance(this, metadata->getInstanceSize(),
metadata->getInstanceAlignMask());
#else
// Embedded Swift's runtime doesn't actually use the size/mask values.
swift_deallocClassInstance(this, 0, 0);
#endif
}
bool DefaultActorImpl::tryLock(bool asDrainer) {
@@ -2107,12 +2112,16 @@ static bool isDefaultActorClass(const ClassMetadata *metadata) {
}
void swift::swift_defaultActor_deallocateResilient(HeapObject *actor) {
#if !SWIFT_CONCURRENCY_EMBEDDED
auto metadata = cast<ClassMetadata>(actor->metadata);
if (isDefaultActorClass(metadata))
return swift_defaultActor_deallocate(static_cast<DefaultActor*>(actor));
swift_deallocObject(actor, metadata->getInstanceSize(),
metadata->getInstanceAlignMask());
#else
return swift_defaultActor_deallocate(static_cast<DefaultActor*>(actor));
#endif
}
/// FIXME: only exists for the quick-and-dirty MainActor implementation.
@@ -2546,12 +2555,16 @@ swift::swift_distributedActor_remote_initialize(const Metadata *actorType) {
}
bool swift::swift_distributed_actor_is_remote(HeapObject *_actor) {
#if !SWIFT_CONCURRENCY_EMBEDDED
const ClassMetadata *metadata = cast<ClassMetadata>(_actor->metadata);
if (isDefaultActorClass(metadata)) {
return asImpl(reinterpret_cast<DefaultActor *>(_actor))->isDistributedRemote();
} else {
return asImpl(reinterpret_cast<NonDefaultDistributedActor *>(_actor))->isDistributedRemote();
}
#else
return false;
#endif
}
bool DefaultActorImpl::isDistributedRemote() {