diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2013-06-05 04:28:55 +0000 |
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2013-06-05 04:28:55 +0000 |
| commit | 044f783bc0defd0ee5cce411360b795b27b8f595 (patch) | |
| tree | dc0384bded60a2b8b73678fced078d1b7a039f53 /clang | |
| parent | aad5376fb69979f9e651be45ceca9d7a72e66e8f (diff) | |
| download | bcm5719-llvm-044f783bc0defd0ee5cce411360b795b27b8f595.tar.gz bcm5719-llvm-044f783bc0defd0ee5cce411360b795b27b8f595.zip | |
Default to PIE and using stack protection on OpenBSD.
Patch by Matthew Dempsky.
llvm-svn: 183295
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/include/clang/Driver/Options.td | 1 | ||||
| -rw-r--r-- | clang/lib/Driver/ToolChains.h | 5 | ||||
| -rw-r--r-- | clang/lib/Driver/Tools.cpp | 3 | ||||
| -rw-r--r-- | clang/test/Driver/pic.c | 12 | ||||
| -rw-r--r-- | clang/test/Driver/stack-protector.c | 6 |
5 files changed, 27 insertions, 0 deletions
diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index a2d7688cf3d..4073d857a46 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -1007,6 +1007,7 @@ def nodefaultlibs : Flag<["-"], "nodefaultlibs">; def nofixprebinding : Flag<["-"], "nofixprebinding">; def nolibc : Flag<["-"], "nolibc">; def nomultidefs : Flag<["-"], "nomultidefs">; +def nopie : Flag<["-"], "nopie">; def noprebind : Flag<["-"], "noprebind">; def noseglinkedit : Flag<["-"], "noseglinkedit">; def nostartfiles : Flag<["-"], "nostartfiles">; diff --git a/clang/lib/Driver/ToolChains.h b/clang/lib/Driver/ToolChains.h index 3afd8dd228b..0827dba26be 100644 --- a/clang/lib/Driver/ToolChains.h +++ b/clang/lib/Driver/ToolChains.h @@ -427,6 +427,11 @@ public: virtual bool IsMathErrnoDefault() const { return false; } virtual bool IsObjCNonFragileABIDefault() const { return true; } + virtual bool isPIEDefault() const { return true; } + + virtual unsigned GetDefaultStackProtectorLevel(bool KernelOrKext) const { + return 1; + } protected: virtual Tool *buildAssembler() const; diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 106c642b443..e95d49dd490 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -5165,6 +5165,9 @@ void openbsd::Link::ConstructJob(Compilation &C, const JobAction &JA, } } + if (Args.hasArg(options::OPT_nopie)) + CmdArgs.push_back("-nopie"); + if (Output.isFilename()) { CmdArgs.push_back("-o"); CmdArgs.push_back(Output.getFilename()); diff --git a/clang/test/Driver/pic.c b/clang/test/Driver/pic.c index 3faed2d18fa..30e1005c973 100644 --- a/clang/test/Driver/pic.c +++ b/clang/test/Driver/pic.c @@ -24,6 +24,8 @@ // CHECK-PIE-LD: "Scrt1.o" "crti.o" "crtbeginS.o" // CHECK-PIE-LD: "crtendS.o" "crtn.o" // +// CHECK-NOPIE-LD: "-nopie" +// // CHECK-DYNAMIC-NO-PIC-32: "-mrelocation-model" "dynamic-no-pic" // CHECK-DYNAMIC-NO-PIC-32-NOT: "-pic-level" // CHECK-DYNAMIC-NO-PIC-32-NOT: "-pie-level" @@ -197,3 +199,13 @@ // RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC // RUN: %clang -c %s -target armv7-apple-ios -fapple-kext -miphoneos-version-min=6.0.0 -static -### 2>&1 \ // RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC +// +// On OpenBSD, PIE is enabled by default, but can be disabled. +// RUN: %clang -c %s -target i386-pc-openbsd -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-PIE2 +// RUN: %clang -c %s -target i386-pc-openbsd -fno-pie -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC +// +// On OpenBSD, -nopie needs to be passed through to the linker. +// RUN: %clang %s -target i386-pc-openbsd -nopie -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-NOPIE-LD diff --git a/clang/test/Driver/stack-protector.c b/clang/test/Driver/stack-protector.c index 5f3d679c1ad..2eb0f53530a 100644 --- a/clang/test/Driver/stack-protector.c +++ b/clang/test/Driver/stack-protector.c @@ -9,3 +9,9 @@ // RUN: %clang -fstack-protector --param ssp-buffer-size=16 -### %s 2>&1 | FileCheck %s -check-prefix=SSP-BUF // SSP-BUF: "-stack-protector" "1" // SSP-BUF: "-stack-protector-buffer-size" "16" + +// RUN: %clang -target i386-pc-openbsd -### %s 2>&1 | FileCheck %s -check-prefix=OPENBSD +// OPENBSD: "-stack-protector" "1" + +// RUN: %clang -target i386-pc-openbsd -fno-stack-protector -### %s 2>&1 | FileCheck %s -check-prefix=OPENBSD_OFF +// OPENBSD_OFF-NOT: "-stack-protector" |

