chiark / gitweb /
clang: Support -nopie flag
[termux-packages] / packages / clang / tools-clang-lib-Driver-Tools.cpp.patch
1 diff -u -r ../llvm-3.8.1.src/tools/clang/lib/Driver/Tools.cpp ./tools/clang/lib/Driver/Tools.cpp
2 --- ../llvm-3.8.1.src/tools/clang/lib/Driver/Tools.cpp  2016-02-12 17:51:41.000000000 -0500
3 +++ ./tools/clang/lib/Driver/Tools.cpp  2016-08-18 10:00:30.287138752 -0400
4 @@ -733,11 +733,11 @@
5          ABI = FloatABI::SoftFP;
6          break;
7        case llvm::Triple::Android:
8 -        ABI = (SubArch == 7) ? FloatABI::SoftFP : FloatABI::Soft;
9 +        ABI = FloatABI::SoftFP;
10          break;
11        default:
12          // Assume "soft", but warn the user we are guessing.
13 -        ABI = FloatABI::Soft;
14 +        ABI = FloatABI::SoftFP;
15          if (Triple.getOS() != llvm::Triple::UnknownOS ||
16              !Triple.isOSBinFormatMachO())
17            D.Diag(diag::warn_drv_assuming_mfloat_abi_is) << "soft";
18 @@ -8773,9 +8773,18 @@
19  
20    const llvm::Triple::ArchType Arch = ToolChain.getArch();
21    const bool isAndroid = ToolChain.getTriple().isAndroid();
22    const bool IsPIE =
23        !Args.hasArg(options::OPT_shared) && !Args.hasArg(options::OPT_static) &&
24 -      (Args.hasArg(options::OPT_pie) || ToolChain.isPIEDefault());
25 +      (Args.hasArg(options::OPT_pie) || ToolChain.isPIEDefault()
26 +       /* Termux modification: Revert
27 +          http://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20150302/124624.html
28 +          as we really want pie by default: */
29 +       // On Android every code is PIC so every executable is PIE
30 +       // Cannot use isPIEDefault here since otherwise
31 +       // PIE only logic will be enabled during compilation
32 +       || isAndroid)
33 +       && !Args.hasArg(options::OPT_nopie);
34 +
35    const bool HasCRTBeginEndFiles =
36        ToolChain.getTriple().hasEnvironment() ||
37        (ToolChain.getTriple().getVendor() != llvm::Triple::MipsTechnologies);