summaryrefslogtreecommitdiffstats
path: root/clang/lib/Driver/ToolChains/CommonArgs.cpp
diff options
context:
space:
mode:
authorAleksandar Beserminji <Aleksandar.Beserminji@mips.com>2018-05-07 14:19:54 +0000
committerAleksandar Beserminji <Aleksandar.Beserminji@mips.com>2018-05-07 14:19:54 +0000
commitf9b3fc5e2bc77f036759d7f0a13d18e741f39bb4 (patch)
tree90a1929fcd1832ef5e04d05dcbb52559264db740 /clang/lib/Driver/ToolChains/CommonArgs.cpp
parentcc4915701cbac39f8ae507d41857242a449dc842 (diff)
downloadbcm5719-llvm-f9b3fc5e2bc77f036759d7f0a13d18e741f39bb4.tar.gz
bcm5719-llvm-f9b3fc5e2bc77f036759d7f0a13d18e741f39bb4.zip
[mips] Improve handling of -fno-[pic/PIC] option
In order to disable PIC and to match GCC behaviour, -mno-abicalls option is neccessary. When -fno-[pic/PIC] is used witout -mno-abicalls, warning is reported. An error is reported when -fno-pic or -fno-PIC is used in combination with -mabicalls. Depends on D44381. Differential Revision: https://reviews.llvm.org/D44684 llvm-svn: 331636
Diffstat (limited to 'clang/lib/Driver/ToolChains/CommonArgs.cpp')
-rw-r--r--clang/lib/Driver/ToolChains/CommonArgs.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp
index be09bc19fda..7013b43d700 100644
--- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -1018,6 +1018,14 @@ tools::ParsePICArgs(const ToolChain &ToolChain, const ArgList &Args) {
Triple.getArch() == llvm::Triple::mipsel ||
Triple.getArch() == llvm::Triple::mips64 ||
Triple.getArch() == llvm::Triple::mips64el) {
+ StringRef CPUName;
+ StringRef ABIName;
+ mips::getMipsCPUAndABI(Args, Triple, CPUName, ABIName);
+ // When targeting the N64 ABI, PIC is the default, except in the case
+ // when the -mno-abicalls option is used. In that case we exit
+ // at next check regardless of PIC being set below.
+ if (ABIName == "n64")
+ PIC = true;
// When targettng MIPS with -mno-abicalls, it's always static.
if(Args.hasArg(options::OPT_mno_abicalls))
return std::make_tuple(llvm::Reloc::Static, 0U, false);
OpenPOWER on IntegriCloud