Skip to content

Commit 638cf56

Browse files
authored
Merge pull request swiftlang#34033 from eeckstein/merge-func-ptrauth
LLVM-Passes: add pointer authentication to Swift's function merge pass.
2 parents d43c1cc + e4e5484 commit 638cf56

File tree

5 files changed

+312
-32
lines changed

5 files changed

+312
-32
lines changed

include/swift/LLVMPasses/PassesFwd.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ namespace swift {
3131
llvm::FunctionPass *createSwiftARCOptPass();
3232
llvm::FunctionPass *createSwiftARCContractPass();
3333
llvm::ModulePass *createInlineTreePrinterPass();
34-
llvm::ModulePass *createSwiftMergeFunctionsPass();
34+
llvm::ModulePass *createSwiftMergeFunctionsPass(bool ptrAuthEnabled,
35+
unsigned ptrAuthKey);
3536
llvm::ImmutablePass *createSwiftAAWrapperPass();
3637
llvm::ImmutablePass *createSwiftRCIdentityPass();
3738
} // end namespace swift

lib/IRGen/IRGen.cpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -126,12 +126,6 @@ static void addSwiftContractPass(const PassManagerBuilder &Builder,
126126
PM.add(createSwiftARCContractPass());
127127
}
128128

129-
static void addSwiftMergeFunctionsPass(const PassManagerBuilder &Builder,
130-
PassManagerBase &PM) {
131-
if (Builder.OptLevel > 0)
132-
PM.add(createSwiftMergeFunctionsPass());
133-
}
134-
135129
static void addAddressSanitizerPasses(const PassManagerBuilder &Builder,
136130
legacy::PassManagerBase &PM) {
137131
auto &BuilderWrapper =
@@ -249,9 +243,16 @@ void swift::performLLVMOptimizations(const IRGenOptions &Opts,
249243
PMBuilder.addExtension(PassManagerBuilder::EP_EnabledOnOptLevel0,
250244
addSanitizerCoveragePass);
251245
}
252-
if (RunSwiftSpecificLLVMOptzns)
246+
if (RunSwiftSpecificLLVMOptzns) {
253247
PMBuilder.addExtension(PassManagerBuilder::EP_OptimizerLast,
254-
addSwiftMergeFunctionsPass);
248+
[&](const PassManagerBuilder &Builder, PassManagerBase &PM) {
249+
if (Builder.OptLevel > 0) {
250+
const PointerAuthSchema &schema = Opts.PointerAuth.FunctionPointers;
251+
unsigned key = (schema.isEnabled() ? schema.getKey() : 0);
252+
PM.add(createSwiftMergeFunctionsPass(schema.isEnabled(), key));
253+
}
254+
});
255+
}
255256

256257
// Configure the function passes.
257258
legacy::FunctionPassManager FunctionPasses(Module);

0 commit comments

Comments
 (0)