Commit | Line | Data |
---|---|---|
51872374 FF |
1 | diff -u -r ../llvm-3.9.0.src/tools/clang/lib/Driver/Tools.cpp ./tools/clang/lib/Driver/Tools.cpp |
2 | --- ../llvm-3.9.0.src/tools/clang/lib/Driver/Tools.cpp 2016-08-13 16:43:56.000000000 -0400 | |
3 | +++ ./tools/clang/lib/Driver/Tools.cpp 2016-09-04 06:15:59.703422745 -0400 | |
8ab024d0 FF |
4 | @@ -7415,10 +7415,12 @@ |
5 | const char *GCCName; | |
6 | if (!customGCCName.empty()) | |
7 | GCCName = customGCCName.c_str(); | |
8 | - else if (D.CCCIsCXX()) { | |
9 | - GCCName = "g++"; | |
10 | - } else | |
11 | - GCCName = "gcc"; | |
12 | + else | |
13 | + // Termux modification: Disable calling into gcc from clang. | |
14 | + // Clang calls into gcc if it tries to compile a language it doesn't understand. | |
15 | + // On Termux gcc is a symlink to clang, so this leads into fork loop until | |
16 | + // the whole system runs out of memory. | |
17 | + GCCName = "false"; | |
18 | ||
19 | const char *Exec = Args.MakeArgString(getToolChain().GetProgramPath(GCCName)); | |
20 | C.addCommand(llvm::make_unique<Command>(JA, *this, Exec, CmdArgs, Inputs)); | |
51872374 | 21 | @@ -9357,9 +9357,12 @@ |
9cbdadb1 FF |
22 | const llvm::Triple::ArchType Arch = ToolChain.getArch(); |
23 | const bool isAndroid = ToolChain.getTriple().isAndroid(); | |
51872374 FF |
24 | const bool IsIAMCU = ToolChain.getTriple().isOSIAMCU(); |
25 | + // Termux modification: Enable pie by default for Android and support the | |
26 | + // nopie flag. | |
9cbdadb1 FF |
27 | const bool IsPIE = |
28 | !Args.hasArg(options::OPT_shared) && !Args.hasArg(options::OPT_static) && | |
29 | - (Args.hasArg(options::OPT_pie) || ToolChain.isPIEDefault()); | |
51872374 FF |
30 | + (Args.hasArg(options::OPT_pie) || ToolChain.isPIEDefault() || isAndroid) && |
31 | + !Args.hasArg(options::OPT_nopie); | |
9cbdadb1 FF |
32 | const bool HasCRTBeginEndFiles = |
33 | ToolChain.getTriple().hasEnvironment() || | |
34 | (ToolChain.getTriple().getVendor() != llvm::Triple::MipsTechnologies); |