summaryrefslogtreecommitdiff
path: root/libre-multilib/lib32-clang
diff options
context:
space:
mode:
Diffstat (limited to 'libre-multilib/lib32-clang')
-rw-r--r--libre-multilib/lib32-clang/PKGBUILD29
-rw-r--r--libre-multilib/lib32-clang/clang-3.4-fstack-protector-strong.patch165
2 files changed, 189 insertions, 5 deletions
diff --git a/libre-multilib/lib32-clang/PKGBUILD b/libre-multilib/lib32-clang/PKGBUILD
index aaa9bd91e..e493ff5c6 100644
--- a/libre-multilib/lib32-clang/PKGBUILD
+++ b/libre-multilib/lib32-clang/PKGBUILD
@@ -1,28 +1,43 @@
# Maintainer: PitBall
pkgname=lib32-clang
-pkgver=3.4
+pkgver=3.4.1
+_base_ver=3.4
pkgrel=2
arch=('x86_64')
url="http://llvm.org/"
license=('custom:University of Illinois/NCSA Open Source License')
makedepends=('lib32-libffi' 'lib32-zlib' 'python2' 'gcc-multilib' 'clang' 'lib32-llvm' 'bc')
-source=(http://llvm.org/releases/$pkgver/llvm-$pkgver.src.tar.gz
- http://llvm.org/releases/$pkgver/clang-$pkgver.src.tar.gz
- http://llvm.org/releases/$pkgver/compiler-rt-$pkgver.src.tar.gz)
+source=(http://llvm.org/releases/$pkgver/llvm-$pkgver.src.tar.gz{,.sig}
+ http://llvm.org/releases/$pkgver/cfe-$pkgver.src.tar.gz{,.sig}
+ http://llvm.org/releases/$_base_ver/compiler-rt-$_base_ver.src.tar.gz{,.sig}
+ clang-3.4-fstack-protector-strong.patch)
sha256sums=('25a5612d692c48481b9b397e2b55f4870e447966d66c96d655241702d44a2628'
'22a9780db3b85a7f2eb9ea1f7f6e00da0249e3d12851e8dea0f62f1783242b1b'
'f37c89b1383ce462d47537a0245ac798600887a9be9f63073e16b79ed536ab5c')
+sha256sums=('7d28bb6eca243a2bb6d65a05743ab915b57958a7770277364e93534b63eef93a'
+ 'SKIP'
+ 'ab83f30951b34d75729026e0e73c180a728a140f2a02cbb8915805051a9d6bb7'
+ 'SKIP'
+ 'f37c89b1383ce462d47537a0245ac798600887a9be9f63073e16b79ed536ab5c'
+ 'SKIP'
+ '7a2a1ddc94f67e643c1ab74601ec07deb6d5d344d4b19ed17c900afb2f6f2863')
options=('staticlibs')
prepare() {
+ # Change directory names to release names so we don't need to change the
+ # whole PKGBUILD
+ mv llvm-$pkgver{.src,}
+ mv cfe-$pkgver.src clang-$pkgver
+
cd "$srcdir/llvm-$pkgver"
rm -rf projects/compiler-rt
mv "$srcdir/clang-$pkgver" tools/clang
+
rm -rf projects/compiler-rt
- mv "$srcdir/compiler-rt-$pkgver" projects/compiler-rt
+ mv "$srcdir/compiler-rt-$_base_ver" projects/compiler-rt
# Fix installation directories, ./configure doesn't seem to set them right
sed -i -e 's:\$(PROJ_prefix)/lib:$(PROJ_prefix)/lib32:' \
@@ -42,6 +57,10 @@ prepare() {
for file in ` pacman -Ql lib32-llvm |grep /lib32/ |awk '{print $2}' |sed '/\/$/d'`; do
ln -sf $file $srcdir/llvm-$pkgver/Release/lib/
done
+
+ # Add command line option -fstack-protector-strong
+ # http://reviews.llvm.org/rL201120
+ patch -d tools/clang -Np0 -i "$srcdir/clang-3.4-fstack-protector-strong.patch"
}
build() {
diff --git a/libre-multilib/lib32-clang/clang-3.4-fstack-protector-strong.patch b/libre-multilib/lib32-clang/clang-3.4-fstack-protector-strong.patch
new file mode 100644
index 000000000..bda41fe1b
--- /dev/null
+++ b/libre-multilib/lib32-clang/clang-3.4-fstack-protector-strong.patch
@@ -0,0 +1,165 @@
+Index: test/Driver/stack-protector.c
+===================================================================
+--- test/Driver/stack-protector.c (revision 201119)
++++ test/Driver/stack-protector.c (revision 201120)
+@@ -15,3 +15,11 @@
+
+ // RUN: %clang -target i386-pc-openbsd -fno-stack-protector -### %s 2>&1 | FileCheck %s -check-prefix=OPENBSD_OFF
+ // OPENBSD_OFF-NOT: "-stack-protector"
++
++// RUN: %clang -fstack-protector-strong -### %s 2>&1 | FileCheck %s -check-prefix=SSP-STRONG
++// SSP-STRONG: "-stack-protector" "2"
++// SSP-STRONG-NOT: "-stack-protector-buffer-size"
++
++// RUN: %clang -fstack-protector-all -### %s 2>&1 | FileCheck %s -check-prefix=SSP-ALL
++// SSP-ALL: "-stack-protector" "3"
++// SSP-ALL-NOT: "-stack-protector-buffer-size"
+Index: test/CodeGen/stack-protector.c
+===================================================================
+--- test/CodeGen/stack-protector.c (revision 201119)
++++ test/CodeGen/stack-protector.c (revision 201120)
+@@ -2,7 +2,9 @@
+ // NOSSP: define void @test1(i8* %msg) #0 {
+ // RUN: %clang_cc1 -emit-llvm -o - %s -stack-protector 1 | FileCheck -check-prefix=WITHSSP %s
+ // WITHSSP: define void @test1(i8* %msg) #0 {
+-// RUN: %clang_cc1 -emit-llvm -o - %s -stack-protector 2 | FileCheck -check-prefix=SSPREQ %s
++// RUN: %clang_cc1 -emit-llvm -o - %s -stack-protector 2 | FileCheck -check-prefix=SSPSTRONG %s
++// SSPSTRONG: define void @test1(i8* %msg) #0 {
++// RUN: %clang_cc1 -emit-llvm -o - %s -stack-protector 3 | FileCheck -check-prefix=SSPREQ %s
+ // SSPREQ: define void @test1(i8* %msg) #0 {
+
+ typedef __SIZE_TYPE__ size_t;
+@@ -21,4 +23,6 @@
+
+ // WITHSSP: attributes #{{.*}} = { nounwind ssp{{.*}} }
+
++// SSPSTRONG: attributes #{{.*}} = { nounwind sspstrong{{.*}} }
++
+ // SSPREQ: attributes #{{.*}} = { nounwind sspreq{{.*}} }
+Index: include/clang/Basic/LangOptions.h
+===================================================================
+--- include/clang/Basic/LangOptions.h (revision 201119)
++++ include/clang/Basic/LangOptions.h (revision 201120)
+@@ -58,7 +58,7 @@
+ typedef clang::Visibility Visibility;
+
+ enum GCMode { NonGC, GCOnly, HybridGC };
+- enum StackProtectorMode { SSPOff, SSPOn, SSPReq };
++ enum StackProtectorMode { SSPOff, SSPOn, SSPStrong, SSPReq };
+
+ enum SignedOverflowBehaviorTy {
+ SOB_Undefined, // Default C standard behavior.
+Index: include/clang/Driver/ToolChain.h
+===================================================================
+--- include/clang/Driver/ToolChain.h (revision 201119)
++++ include/clang/Driver/ToolChain.h (revision 201120)
+@@ -196,7 +196,7 @@
+ virtual bool UseObjCMixedDispatch() const { return false; }
+
+ /// GetDefaultStackProtectorLevel - Get the default stack protector level for
+- /// this tool chain (0=off, 1=on, 2=all).
++ /// this tool chain (0=off, 1=on, 2=strong, 3=all).
+ virtual unsigned GetDefaultStackProtectorLevel(bool KernelOrKext) const {
+ return 0;
+ }
+Index: include/clang/Driver/Options.td
+===================================================================
+--- include/clang/Driver/Options.td (revision 201119)
++++ include/clang/Driver/Options.td (revision 201120)
+@@ -675,7 +675,8 @@
+ Flags<[CC1Option]>, HelpText<"Do not include source location information with diagnostics">;
+ def fno_spell_checking : Flag<["-"], "fno-spell-checking">, Group<f_Group>,
+ Flags<[CC1Option]>, HelpText<"Disable spell-checking">;
+-def fno_stack_protector : Flag<["-"], "fno-stack-protector">, Group<f_Group>;
++def fno_stack_protector : Flag<["-"], "fno-stack-protector">, Group<f_Group>,
++ HelpText<"Disable the use of stack protectors">;
+ def fno_strict_aliasing : Flag<["-"], "fno-strict-aliasing">, Group<f_Group>;
+ def fstruct_path_tbaa : Flag<["-"], "fstruct-path-tbaa">, Group<f_Group>;
+ def fno_struct_path_tbaa : Flag<["-"], "fno-struct-path-tbaa">, Group<f_Group>;
+@@ -773,8 +774,12 @@
+ def fno_signed_char : Flag<["-"], "fno-signed-char">, Flags<[CC1Option]>,
+ Group<clang_ignored_f_Group>, HelpText<"Char is unsigned">;
+ def fsplit_stack : Flag<["-"], "fsplit-stack">, Group<f_Group>;
+-def fstack_protector_all : Flag<["-"], "fstack-protector-all">, Group<f_Group>;
+-def fstack_protector : Flag<["-"], "fstack-protector">, Group<f_Group>;
++def fstack_protector_all : Flag<["-"], "fstack-protector-all">, Group<f_Group>,
++ HelpText<"Force the usage of stack protectors for all functions">;
++def fstack_protector_strong : Flag<["-"], "fstack-protector-strong">, Group<f_Group>,
++ HelpText<"Use a strong heuristic to apply stack protectors to functions">;
++def fstack_protector : Flag<["-"], "fstack-protector">, Group<f_Group>,
++ HelpText<"Enable stack protectors for functions potentially vulnerable to stack smashing">;
+ def fstrict_aliasing : Flag<["-"], "fstrict-aliasing">, Group<f_Group>;
+ def fstrict_enums : Flag<["-"], "fstrict-enums">, Group<f_Group>, Flags<[CC1Option]>,
+ HelpText<"Enable optimizations based on the strict definition of an enum's "
+Index: lib/Frontend/CompilerInvocation.cpp
+===================================================================
+--- lib/Frontend/CompilerInvocation.cpp (revision 201119)
++++ lib/Frontend/CompilerInvocation.cpp (revision 201120)
+@@ -1435,7 +1435,8 @@
+ break;
+ case 0: Opts.setStackProtector(LangOptions::SSPOff); break;
+ case 1: Opts.setStackProtector(LangOptions::SSPOn); break;
+- case 2: Opts.setStackProtector(LangOptions::SSPReq); break;
++ case 2: Opts.setStackProtector(LangOptions::SSPStrong); break;
++ case 3: Opts.setStackProtector(LangOptions::SSPReq); break;
+ }
+
+ // Parse -fsanitize= arguments.
+Index: lib/Frontend/InitPreprocessor.cpp
+===================================================================
+--- lib/Frontend/InitPreprocessor.cpp (revision 201119)
++++ lib/Frontend/InitPreprocessor.cpp (revision 201120)
+@@ -695,8 +695,10 @@
+
+ if (LangOpts.getStackProtector() == LangOptions::SSPOn)
+ Builder.defineMacro("__SSP__");
++ else if (LangOpts.getStackProtector() == LangOptions::SSPStrong)
++ Builder.defineMacro("__SSP_STRONG__", "2");
+ else if (LangOpts.getStackProtector() == LangOptions::SSPReq)
+- Builder.defineMacro("__SSP_ALL__", "2");
++ Builder.defineMacro("__SSP_ALL__", "3");
+
+ if (FEOpts.ProgramAction == frontend::RewriteObjC)
+ Builder.defineMacro("__weak", "__attribute__((objc_gc(weak)))");
+Index: lib/Driver/Tools.cpp
+===================================================================
+--- lib/Driver/Tools.cpp (revision 201119)
++++ lib/Driver/Tools.cpp (revision 201120)
+@@ -10,6 +10,7 @@
+ #include "Tools.h"
+ #include "InputInfo.h"
+ #include "ToolChains.h"
++#include "clang/Basic/LangOptions.h"
+ #include "clang/Basic/ObjCRuntime.h"
+ #include "clang/Basic/Version.h"
+ #include "clang/Driver/Action.h"
+@@ -3114,11 +3115,14 @@
+ unsigned StackProtectorLevel = 0;
+ if (Arg *A = Args.getLastArg(options::OPT_fno_stack_protector,
+ options::OPT_fstack_protector_all,
++ options::OPT_fstack_protector_strong,
+ options::OPT_fstack_protector)) {
+ if (A->getOption().matches(options::OPT_fstack_protector))
+- StackProtectorLevel = 1;
++ StackProtectorLevel = LangOptions::SSPOn;
++ else if (A->getOption().matches(options::OPT_fstack_protector_strong))
++ StackProtectorLevel = LangOptions::SSPStrong;
+ else if (A->getOption().matches(options::OPT_fstack_protector_all))
+- StackProtectorLevel = 2;
++ StackProtectorLevel = LangOptions::SSPReq;
+ } else {
+ StackProtectorLevel =
+ getToolChain().GetDefaultStackProtectorLevel(KernelOrKext);
+Index: lib/CodeGen/CodeGenModule.cpp
+===================================================================
+--- lib/CodeGen/CodeGenModule.cpp (revision 201119)
++++ lib/CodeGen/CodeGenModule.cpp (revision 201120)
+@@ -651,6 +651,8 @@
+
+ if (LangOpts.getStackProtector() == LangOptions::SSPOn)
+ B.addAttribute(llvm::Attribute::StackProtect);
++ else if (LangOpts.getStackProtector() == LangOptions::SSPStrong)
++ B.addAttribute(llvm::Attribute::StackProtectStrong);
+ else if (LangOpts.getStackProtector() == LangOptions::SSPReq)
+ B.addAttribute(llvm::Attribute::StackProtectReq);
+