summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexey Volkov <avolkov.intel@gmail.com>2014-04-29 10:25:20 +0000
committerAlexey Volkov <avolkov.intel@gmail.com>2014-04-29 10:25:20 +0000
commit06921036536db150e403e677165ff775972a75ac (patch)
treec2ece37b3a61922984fba44110597f0510c058bb
parentaacce57d61073b06d27c9f85aa457a79746a492e (diff)
downloadbcm5719-llvm-06921036536db150e403e677165ff775972a75ac.tar.gz
bcm5719-llvm-06921036536db150e403e677165ff775972a75ac.zip
Pass -pie to linker when generating executable on Android
This fixes problem with LTO on Android. Differential Revision: http://reviews.llvm.org/D2668 llvm-svn: 207520
-rw-r--r--clang/lib/Driver/Tools.cpp5
-rw-r--r--clang/test/Driver/gold-lto.c5
2 files changed, 9 insertions, 1 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp
index a8d3f010bd0..bda4edfd07c 100644
--- a/clang/lib/Driver/Tools.cpp
+++ b/clang/lib/Driver/Tools.cpp
@@ -6917,7 +6917,10 @@ void gnutools::Link::ConstructJob(Compilation &C, const JobAction &JA,
ToolChain.getTriple().getEnvironment() == llvm::Triple::Android;
const bool IsPIE =
!Args.hasArg(options::OPT_shared) &&
- (Args.hasArg(options::OPT_pie) || ToolChain.isPIEDefault());
+ !Args.hasArg(options::OPT_static) &&
+ (Args.hasArg(options::OPT_pie) || ToolChain.isPIEDefault() ||
+ // On Android every code is PIC so every executable is PIE
+ isAndroid);
ArgStringList CmdArgs;
diff --git a/clang/test/Driver/gold-lto.c b/clang/test/Driver/gold-lto.c
index c2e8bdfbc74..18a293b6960 100644
--- a/clang/test/Driver/gold-lto.c
+++ b/clang/test/Driver/gold-lto.c
@@ -19,3 +19,8 @@
// CHECK-ARM-V7A: "-plugin" "{{.*}}/LLVMgold.so"
// CHECK-ARM-V7A: "-plugin-opt=mcpu=cortex-a8"
// CHECK-ARM-V7A: "-plugin-opt=foo"
+//
+// RUN: %clang -target i686-linux-android -### %t.o -flto 2>&1 \
+// RUN: | FileCheck %s --check-prefix=CHECK-X86-ANDROID
+// CHECK-X86-ANDROID: "-pie"
+// CHECK-X86-ANDROID: "-plugin" "{{.*}}/LLVMgold.so"
OpenPOWER on IntegriCloud