summaryrefslogtreecommitdiffstats
path: root/recipes-devtools/clang/clang/0000-clang-Enable-SSP-and-PIE-by-default.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-devtools/clang/clang/0000-clang-Enable-SSP-and-PIE-by-default.patch')
-rw-r--r--recipes-devtools/clang/clang/0000-clang-Enable-SSP-and-PIE-by-default.patch63
1 files changed, 63 insertions, 0 deletions
diff --git a/recipes-devtools/clang/clang/0000-clang-Enable-SSP-and-PIE-by-default.patch b/recipes-devtools/clang/clang/0000-clang-Enable-SSP-and-PIE-by-default.patch
new file mode 100644
index 0000000..d7b76b1
--- /dev/null
+++ b/recipes-devtools/clang/clang/0000-clang-Enable-SSP-and-PIE-by-default.patch
@@ -0,0 +1,63 @@
1From 76718d7d905029a2304c1ad275cd528b404dc7d4 Mon Sep 17 00:00:00 2001
2From: Evangelos Foutras <evangelos@foutrelis.com>
3Date: Thu, 20 Sep 2018 06:20:28 +0300
4Subject: [PATCH] clang: Enable SSP and PIE by default
5
6This is a minimal set of changes needed to make clang use SSP and PIE by
7default on Arch Linux. Tests that were easy to adjust have been changed
8accordingly; only test/Driver/linux-ld.c has been marked as "expected
9failure" due to the number of changes it would require (mostly replacing
10crtbegin.o with crtbeginS.o).
11
12Doing so is needed in order to align clang with the new default GCC
13behavior in Arch which generates PIE executables by default and also
14defaults to -fstack-protector-strong. It is not meant to be a long term
15solution, but a simple temporary fix.
16
17Hopefully these changes will be obsoleted by the introduction upstream
18of a compile-time option (https://bugs.llvm.org/show_bug.cgi?id=13410)
19---
20 clang/lib/Driver/ToolChains/Linux.cpp | 14 ++++++++++++--
21 clang/lib/Driver/ToolChains/Linux.h | 1 +
22 2 files changed, 13 insertions(+), 2 deletions(-)
23
24diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp
25index 5dc7b506d6f..4dfef25aa63 100644
26--- a/clang/lib/Driver/ToolChains/Linux.cpp
27+++ b/clang/lib/Driver/ToolChains/Linux.cpp
28@@ -976,8 +976,18 @@ void Linux::AddIAMCUIncludeArgs(const ArgList &DriverArgs,
29 }
30
31 bool Linux::isPIEDefault() const {
32- return (getTriple().isAndroid() && !getTriple().isAndroidVersionLT(16)) ||
33- getTriple().isMusl() || getSanitizerArgs().requiresPIE();
34+ const bool IsMips = getTriple().isMIPS();
35+ const bool IsAndroid = getTriple().isAndroid();
36+
37+ if (IsMips || IsAndroid)
38+ return (getTriple().isAndroid() && !getTriple().isAndroidVersionLT(16)) ||
39+ getTriple().isMusl() || getSanitizerArgs().requiresPIE();
40+
41+ return true;
42+}
43+
44+unsigned Linux::GetDefaultStackProtectorLevel(bool KernelOrKext) const {
45+ return 2;
46 }
47
48 bool Linux::IsMathErrnoDefault() const {
49diff --git a/clang/lib/Driver/ToolChains/Linux.h b/clang/lib/Driver/ToolChains/Linux.h
50index 4a662cb4b42..2ddd4056573 100644
51--- a/clang/lib/Driver/ToolChains/Linux.h
52+++ b/clang/lib/Driver/ToolChains/Linux.h
53@@ -39,6 +39,7 @@ public:
54 llvm::opt::ArgStringList &CC1Args) const override;
55 CXXStdlibType GetDefaultCXXStdlibType() const override;
56 bool isPIEDefault() const override;
57+ unsigned GetDefaultStackProtectorLevel(bool KernelOrKext) const override;
58 bool IsMathErrnoDefault() const override;
59 SanitizerMask getSupportedSanitizers() const override;
60 void addProfileRTLibs(const llvm::opt::ArgList &Args,
61--
622.20.1
63