[llvm-branch-commits] [clang] [clang] Implement function pointer signing and authenticated function calls (PR #93906)
Daniil Kovalev via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Fri Jun 7 01:42:12 PDT 2024
================
@@ -75,3 +93,36 @@ CodeGen::getConstantSignedPointer(CodeGenModule &CGM,
return CGM.getConstantSignedPointer(pointer, key, storageAddress,
otherDiscriminator);
}
+
+/// If applicable, sign a given constant function pointer with the ABI rules for
+/// functionType.
+llvm::Constant *CodeGenModule::getFunctionPointer(llvm::Constant *pointer,
+ QualType functionType,
+ GlobalDecl GD) {
+ assert(functionType->isFunctionType() ||
+ functionType->isFunctionReferenceType() ||
+ functionType->isFunctionPointerType());
+
+ if (auto pointerAuth = getFunctionPointerAuthInfo(functionType)) {
+ return getConstantSignedPointer(
+ pointer, pointerAuth.getKey(), nullptr,
+ cast_or_null<llvm::Constant>(pointerAuth.getDiscriminator()));
+ }
+
+ return pointer;
+}
+
+llvm::Constant *CodeGenModule::getFunctionPointer(GlobalDecl GD,
+ llvm::Type *Ty) {
+ const FunctionDecl *FD = cast<FunctionDecl>(GD.getDecl());
----------------
kovdan01 wrote:
nit
```suggestion
const auto *FD = cast<FunctionDecl>(GD.getDecl());
```
https://github.com/llvm/llvm-project/pull/93906
More information about the llvm-branch-commits
mailing list