diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2021-12-02 21:49:08 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2022-06-04 11:59:04 +0000 |
| commit | 574b7079b96703a748f89ef5adb7dc3e26b8f7fc (patch) | |
| tree | 195000196b1e0cc13dea43258fa240e006f48184 /contrib/llvm-project/llvm/lib/Target/ARM/ARMMachineFunctionInfo.h | |
| parent | 1f6fd64fe9c996b4795ee4a6c66b8f9216747560 (diff) | |
Diffstat (limited to 'contrib/llvm-project/llvm/lib/Target/ARM/ARMMachineFunctionInfo.h')
| -rw-r--r-- | contrib/llvm-project/llvm/lib/Target/ARM/ARMMachineFunctionInfo.h | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/contrib/llvm-project/llvm/lib/Target/ARM/ARMMachineFunctionInfo.h b/contrib/llvm-project/llvm/lib/Target/ARM/ARMMachineFunctionInfo.h index 851655284060..4077fc058217 100644 --- a/contrib/llvm-project/llvm/lib/Target/ARM/ARMMachineFunctionInfo.h +++ b/contrib/llvm-project/llvm/lib/Target/ARM/ARMMachineFunctionInfo.h @@ -142,6 +142,17 @@ class ARMFunctionInfo : public MachineFunctionInfo { /// con/destructors). bool PreservesR0 = false; + /// True if the function should sign its return address. + bool SignReturnAddress = false; + + /// True if the fucntion should sign its return address, even if LR is not + /// saved. + bool SignReturnAddressAll = false; + + /// True if BTI instructions should be placed at potential indirect jump + /// destinations. + bool BranchTargetEnforcement = false; + public: ARMFunctionInfo() = default; @@ -268,6 +279,20 @@ public: void setPreservesR0() { PreservesR0 = true; } bool getPreservesR0() const { return PreservesR0; } + + bool shouldSignReturnAddress() const { + return shouldSignReturnAddress(LRSpilled); + } + + bool shouldSignReturnAddress(bool SpillsLR) const { + if (!SignReturnAddress) + return false; + if (SignReturnAddressAll) + return true; + return LRSpilled; + } + + bool branchTargetEnforcement() const { return BranchTargetEnforcement; } }; } // end namespace llvm |
