mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
[Distributed] pointer auth protocol pointers as we use conformsToProtocol
This commit is contained in:
@@ -26,6 +26,7 @@
|
||||
#include "GenDecl.h"
|
||||
#include "GenMeta.h"
|
||||
#include "GenOpaque.h"
|
||||
#include "GenPointerAuth.h"
|
||||
#include "GenProto.h"
|
||||
#include "GenType.h"
|
||||
#include "IRGenDebugInfo.h"
|
||||
@@ -588,9 +589,26 @@ static llvm::Value *lookupWitnessTable(IRGenFunction &IGF, llvm::Value *witness,
|
||||
assert(Lowering::TypeConverter::protocolRequiresWitnessTable(protocol));
|
||||
|
||||
auto &IGM = IGF.IGM;
|
||||
auto *protocolDescriptor = IGM.getAddrOfProtocolDescriptor(protocol);
|
||||
llvm::Value *protocolDescriptor = IGM.getAddrOfProtocolDescriptor(protocol);
|
||||
|
||||
bool signedProtocolDescriptor = IGM.getAvailabilityRange().isContainedIn(
|
||||
IGM.Context.getSignedConformsToProtocolAvailability());
|
||||
|
||||
auto conformsToProtocolFunctionPointer = signedProtocolDescriptor ?
|
||||
IGM.getConformsToProtocol2FunctionPointer() :
|
||||
IGM.getConformsToProtocolFunctionPointer();
|
||||
|
||||
// Sign the protocol descriptor.
|
||||
auto schema = IGF.IGM.getOptions().PointerAuth.ProtocolDescriptorsAsArguments;
|
||||
if (schema && protocolDescriptor) {
|
||||
auto authInfo = PointerAuthInfo::emit(
|
||||
IGF, schema, nullptr,
|
||||
PointerAuthEntity::Special::ProtocolDescriptorAsArgument);
|
||||
protocolDescriptor = emitPointerAuthSign(IGF, protocolDescriptor, authInfo);
|
||||
}
|
||||
|
||||
auto *witnessTable = IGF.Builder.CreateCall(
|
||||
IGM.getConformsToProtocolFunctionPointer(), {witness, protocolDescriptor});
|
||||
conformsToProtocolFunctionPointer, {witness, protocolDescriptor});
|
||||
|
||||
auto failBB = IGF.createBasicBlock("missing-witness");
|
||||
auto contBB = IGF.createBasicBlock("");
|
||||
|
||||
Reference in New Issue
Block a user