From 0a196eb46494abd21c24da0ee5c16d0696e1cff6 Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Tue, 3 Mar 2015 18:24:57 +0000 Subject: [PATCH] Don't force -pie for Android. Summary: There is no -no-pie flag that can override this, so making it default to being on for Android means it is no longer possible to create non-PIE executables on Android. While current versions of Android support (and the most recent requires) PIE, ICS and earlier versions of Android cannot run PIE executables, so this needs to be optional. Reviewers: srhines Reviewed By: srhines Subscribers: thakis, volkalexey, cfe-commits Differential Revision: http://reviews.llvm.org/D8015 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@231091 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Driver/Tools.cpp | 6 +----- test/Driver/gold-lto.c | 1 - test/Driver/linux-ld.c | 25 +++++++++++++++++++++++++ 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 17b430c316..5d66605c25 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -7576,11 +7576,7 @@ void gnutools::Link::ConstructJob(Compilation &C, const JobAction &JA, const bool IsPIE = !Args.hasArg(options::OPT_shared) && !Args.hasArg(options::OPT_static) && - (Args.hasArg(options::OPT_pie) || ToolChain.isPIEDefault() || - // On Android every code is PIC so every executable is PIE - // Cannot use isPIEDefault here since otherwise - // PIE only logic will be enabled during compilation - isAndroid); + (Args.hasArg(options::OPT_pie) || ToolChain.isPIEDefault()); ArgStringList CmdArgs; diff --git a/test/Driver/gold-lto.c b/test/Driver/gold-lto.c index 18a293b696..db6786ffd8 100644 --- a/test/Driver/gold-lto.c +++ b/test/Driver/gold-lto.c @@ -22,5 +22,4 @@ // // 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" diff --git a/test/Driver/linux-ld.c b/test/Driver/linux-ld.c index b431b1c748..f2e6eda3ff 100644 --- a/test/Driver/linux-ld.c +++ b/test/Driver/linux-ld.c @@ -1093,6 +1093,31 @@ // CHECK-ANDROID-PIE: "{{.*}}{{/|\\\\}}crtend_android.o" // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN: --target=arm-linux-androideabi \ +// RUN: | FileCheck --check-prefix=CHECK-ANDROID-NO-DEFAULT-PIE %s +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: --target=arm-linux-android \ +// RUN: | FileCheck --check-prefix=CHECK-ANDROID-NO-DEFAULT-PIE %s +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: --target=aarch64-linux-android \ +// RUN: | FileCheck --check-prefix=CHECK-ANDROID-NO-DEFAULT-PIE %s +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: --target=arm64-linux-android \ +// RUN: | FileCheck --check-prefix=CHECK-ANDROID-NO-DEFAULT-PIE %s +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: --target=mipsel-linux-android \ +// RUN: | FileCheck --check-prefix=CHECK-ANDROID-NO-DEFAULT-PIE %s +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: --target=mips64el-linux-android \ +// RUN: | FileCheck --check-prefix=CHECK-ANDROID-NO-DEFAULT-PIE %s +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: --target=i686-linux-android \ +// RUN: | FileCheck --check-prefix=CHECK-ANDROID-NO-DEFAULT-PIE %s +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: --target=x86_64-linux-android \ +// RUN: | FileCheck --check-prefix=CHECK-ANDROID-NO-DEFAULT-PIE %s +// CHECK-ANDROID-NO-DEFAULT-PIE-NOT: -pie +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: --target=arm-linux-androideabi \ // RUN: --gcc-toolchain="" \ // RUN: --sysroot=%S/Inputs/basic_android_tree/sysroot \ // RUN: | FileCheck --check-prefix=CHECK-ANDROID-32 %s -- 2.50.1