diff options
author | Peter Collingbourne <peter@pcc.me.uk> | 2013-01-17 20:17:16 +0000 |
---|---|---|
committer | Peter Collingbourne <peter@pcc.me.uk> | 2013-01-17 20:17:16 +0000 |
commit | 24c67c6a63d67615748944fea9c8caf7bb891241 (patch) | |
tree | 1678aff136350ef91447ac4a6b8b2925e0f91787 | |
parent | 5724ee9765dd0aa584a767be610f4938b7b685a6 (diff) | |
download | bcm5719-llvm-24c67c6a63d67615748944fea9c8caf7bb891241.tar.gz bcm5719-llvm-24c67c6a63d67615748944fea9c8caf7bb891241.zip |
Do not pass -pie flag to linker if -shared specified. This matches
the gcc driver and makes it possible to add -pie to $CC or similar and
have it apply in the right places.
llvm-svn: 172753
-rw-r--r-- | clang/lib/Driver/Tools.cpp | 2 | ||||
-rw-r--r-- | clang/test/Driver/pic.c | 6 |
2 files changed, 7 insertions, 1 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 199bb719dea..372af794044 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -5506,7 +5506,7 @@ void linuxtools::Link::ConstructJob(Compilation &C, const JobAction &JA, if (!D.SysRoot.empty()) CmdArgs.push_back(Args.MakeArgString("--sysroot=" + D.SysRoot)); - if (Args.hasArg(options::OPT_pie)) + if (Args.hasArg(options::OPT_pie) && !Args.hasArg(options::OPT_shared)) CmdArgs.push_back("-pie"); if (Args.hasArg(options::OPT_rdynamic)) diff --git a/clang/test/Driver/pic.c b/clang/test/Driver/pic.c index 54e5982c085..8ba931954b1 100644 --- a/clang/test/Driver/pic.c +++ b/clang/test/Driver/pic.c @@ -34,6 +34,8 @@ // // CHECK-NON-DARWIN-DYNAMIC-NO-PIC: error: unsupported option '-mdynamic-no-pic' for target 'i386-unknown-unknown' // +// CHECK-NO-PIE-NOT: "-pie" +// // RUN: %clang -c %s -target i386-unknown-unknown -### 2>&1 \ // RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC // RUN: %clang -c %s -target i386-unknown-unknown -fpic -### 2>&1 \ @@ -127,6 +129,10 @@ // RUN: %clang -c %s -target i386-unknown-unknown -static -fPIC -### 2>&1 \ // RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC // +// On Linux, disregard -pie if we have -shared. +// RUN: %clang %s -target i386-unknown-linux -shared -pie -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-NO-PIE +// // Darwin is a beautiful and unique snowflake when it comes to these flags. // When targetting a 32-bit darwin system, the -fno-* flag variants work and // disable PIC, but any other flag enables PIC (*not* PIE) even if the flag |