]> granicus.if.org Git - clang/commitdiff
Default to PIE and using stack protection on OpenBSD.
authorRafael Espindola <rafael.espindola@gmail.com>
Wed, 5 Jun 2013 04:28:55 +0000 (04:28 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Wed, 5 Jun 2013 04:28:55 +0000 (04:28 +0000)
Patch by Matthew Dempsky.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@183295 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Driver/Options.td
lib/Driver/ToolChains.h
lib/Driver/Tools.cpp
test/Driver/pic.c
test/Driver/stack-protector.c

index a2d7688cf3db4b5695b57dd38dea928b0081de25..4073d857a460511739c037b4e1e79c90b9e4f3a0 100644 (file)
@@ -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">;
index 3afd8dd228b61cdc25bf674e003e49d98e7c5fef..0827dba26bebe99492cd811e06d3a761ed50feed 100644 (file)
@@ -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;
index 106c642b4432568dccfb24fc4ad92e417123c997..e95d49dd49033ad2b239c71379ce23ef65dbdd5a 100644 (file)
@@ -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());
index 3faed2d18faf27cd2b6b9f694286f7abdf46889b..30e1005c97370d679213db64c3797968831db03d 100644 (file)
@@ -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"
 // 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
index 5f3d679c1ade18ebcf1feec8308b9b337968ff14..2eb0f53530a72594c3a87b476726a891c333a4a4 100644 (file)
@@ -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"