summaryrefslogtreecommitdiff
path: root/llvm/lib/Target/ARM/ARMMachineFunctionInfo.h
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2021-12-02 21:02:54 +0000
committerDimitry Andric <dim@FreeBSD.org>2021-12-02 21:02:54 +0000
commitf65dcba83ce5035ab88a85fe17628b447eb56e1b (patch)
tree35f37bb72b3cfc6060193e66c76ee7c9478969b0 /llvm/lib/Target/ARM/ARMMachineFunctionInfo.h
parent846a2208a8ab099f595fe7e8b2e6d54a7b5e67fb (diff)
Diffstat (limited to 'llvm/lib/Target/ARM/ARMMachineFunctionInfo.h')
-rw-r--r--llvm/lib/Target/ARM/ARMMachineFunctionInfo.h25
1 files changed, 25 insertions, 0 deletions
diff --git a/llvm/lib/Target/ARM/ARMMachineFunctionInfo.h b/llvm/lib/Target/ARM/ARMMachineFunctionInfo.h
index 851655284060..4077fc058217 100644
--- a/llvm/lib/Target/ARM/ARMMachineFunctionInfo.h
+++ b/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