diff options
author | Dmitry Mikulin <dmitry.mikulin@sony.com> | 2019-10-16 17:51:40 +0000 |
---|---|---|
committer | Dmitry Mikulin <dmitry.mikulin@sony.com> | 2019-10-16 17:51:40 +0000 |
commit | e2692b3bc0327606748b6d291b9009d2c845ced5 (patch) | |
tree | 1708317b476af3609f0ef2432327ef3db80c3f8b /clang/lib/Sema/SemaDecl.cpp | |
parent | 97ed5625442d66d882c304a72ffe0de9fdad59a1 (diff) | |
download | bcm5719-llvm-e2692b3bc0327606748b6d291b9009d2c845ced5.tar.gz bcm5719-llvm-e2692b3bc0327606748b6d291b9009d2c845ced5.zip |
Tag CFI-generated data structures with "#pragma clang section" attributes.
Differential Revision: https://reviews.llvm.org/D68808
llvm-svn: 375022
Diffstat (limited to 'clang/lib/Sema/SemaDecl.cpp')
-rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 62ec83967bf..658cff0212f 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -9062,6 +9062,25 @@ Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, Context, PragmaClangTextSection.SectionName, PragmaClangTextSection.PragmaLocation, AttributeCommonInfo::AS_Pragma)); + if (D.isFunctionDefinition()) { + if (PragmaClangBSSSection.Valid) + NewFD->addAttr(PragmaClangBSSSectionAttr::CreateImplicit( + Context, PragmaClangBSSSection.SectionName, + PragmaClangBSSSection.PragmaLocation)); + if (PragmaClangDataSection.Valid) + NewFD->addAttr(PragmaClangDataSectionAttr::CreateImplicit( + Context, PragmaClangDataSection.SectionName, + PragmaClangDataSection.PragmaLocation)); + if (PragmaClangRodataSection.Valid) + NewFD->addAttr(PragmaClangRodataSectionAttr::CreateImplicit( + Context, PragmaClangRodataSection.SectionName, + PragmaClangRodataSection.PragmaLocation)); + if (PragmaClangRelroSection.Valid) + NewFD->addAttr(PragmaClangRelroSectionAttr::CreateImplicit( + Context, PragmaClangRelroSection.SectionName, + PragmaClangRelroSection.PragmaLocation)); + } + // Apply an implicit SectionAttr if #pragma code_seg is active. if (CodeSegStack.CurrentValue && D.isFunctionDefinition() && !NewFD->hasAttr<SectionAttr>()) { |