diff options
| author | Oliver Stannard <oliver.stannard@arm.com> | 2018-09-13 10:25:36 +0000 |
|---|---|---|
| committer | Oliver Stannard <oliver.stannard@arm.com> | 2018-09-13 10:25:36 +0000 |
| commit | 95ac65bc32180744cbc67d4e82a0f6417fb92aa9 (patch) | |
| tree | 4dffe209d85ee0036788065a695142bc0a013c7c /clang/lib/CodeGen/CGDeclCXX.cpp | |
| parent | 4588fc80bf0a20b0d7d3d75cb4f18871529d3ba5 (diff) | |
| download | bcm5719-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.cpp | 6 |
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; } |

