summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/CFGuard
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Transforms/CFGuard')
-rw-r--r--llvm/lib/Transforms/CFGuard/CFGuard.cpp10
1 files changed, 4 insertions, 6 deletions
diff --git a/llvm/lib/Transforms/CFGuard/CFGuard.cpp b/llvm/lib/Transforms/CFGuard/CFGuard.cpp
index 3eca00691e0..7c5e90cb53c 100644
--- a/llvm/lib/Transforms/CFGuard/CFGuard.cpp
+++ b/llvm/lib/Transforms/CFGuard/CFGuard.cpp
@@ -254,8 +254,8 @@ bool CFGuard::doInitialization(Module &M) {
bool CFGuard::runOnFunction(Function &F) {
- // Skip modules and functions for which CFGuard checks have been disabled.
- if (cfguard_module_flag != 2 || F.hasFnAttribute(Attribute::NoCfCheck))
+ // Skip modules for which CFGuard checks have been disabled.
+ if (cfguard_module_flag != 2)
return false;
SmallVector<CallBase *, 8> IndirectCalls;
@@ -267,17 +267,15 @@ bool CFGuard::runOnFunction(Function &F) {
for (BasicBlock &BB : F.getBasicBlockList()) {
for (Instruction &I : BB.getInstList()) {
auto *CB = dyn_cast<CallBase>(&I);
- if (CB && CB->isIndirectCall()) {
+ if (CB && CB->isIndirectCall() && !CB->hasFnAttr("guard_nocf")) {
IndirectCalls.push_back(CB);
CFGuardCounter++;
}
}
}
- // If no checks are needed, return early and add this attribute to indicate
- // that subsequent CFGuard passes can skip this function.
+ // If no checks are needed, return early.
if (IndirectCalls.empty()) {
- F.addFnAttr(Attribute::NoCfCheck);
return false;
}
OpenPOWER on IntegriCloud