summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CGDeclCXX.cpp
diff options
context:
space:
mode:
authorOliver Stannard <oliver.stannard@arm.com>2018-09-13 10:25:36 +0000
committerOliver Stannard <oliver.stannard@arm.com>2018-09-13 10:25:36 +0000
commit95ac65bc32180744cbc67d4e82a0f6417fb92aa9 (patch)
tree4dffe209d85ee0036788065a695142bc0a013c7c /clang/lib/CodeGen/CGDeclCXX.cpp
parent4588fc80bf0a20b0d7d3d75cb4f18871529d3ba5 (diff)
downloadbcm5719-llvm-95ac65bc32180744cbc67d4e82a0f6417fb92aa9.tar.gz
bcm5719-llvm-95ac65bc32180744cbc67d4e82a0f6417fb92aa9.zip
[AArch64] Enable return address signing for static ctors
Functions generated by clang and included in the .init_array section (such as static constructors) do not follow the usual code path for adding target-specific function attributes, so we have to add the return address signing attribute here too, as is currently done for the sanitisers. Differential revision: https://reviews.llvm.org/D51418 llvm-svn: 342126
Diffstat (limited to 'clang/lib/CodeGen/CGDeclCXX.cpp')
-rw-r--r--clang/lib/CodeGen/CGDeclCXX.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CGDeclCXX.cpp b/clang/lib/CodeGen/CGDeclCXX.cpp
index 4499eb93ebb..3f96fea608e 100644
--- a/clang/lib/CodeGen/CGDeclCXX.cpp
+++ b/clang/lib/CodeGen/CGDeclCXX.cpp
@@ -359,6 +359,12 @@ llvm::Function *CodeGenModule::CreateGlobalInitOrDestructFunction(
!isInSanitizerBlacklist(SanitizerKind::ShadowCallStack, Fn, Loc))
Fn->addFnAttr(llvm::Attribute::ShadowCallStack);
+ auto RASignKind = getCodeGenOpts().getSignReturnAddress();
+ if (RASignKind != CodeGenOptions::SignReturnAddressScope::None)
+ Fn->addFnAttr("sign-return-address",
+ RASignKind == CodeGenOptions::SignReturnAddressScope::All
+ ? "all"
+ : "non-leaf");
return Fn;
}
OpenPOWER on IntegriCloud