diff options
author | Simon Atanasyan <simon@atanasyan.com> | 2017-08-10 15:42:16 +0000 |
---|---|---|
committer | Simon Atanasyan <simon@atanasyan.com> | 2017-08-10 15:42:16 +0000 |
commit | 3306e3a8e84d9d34ea65e8baa5ce9f2c33aae6dd (patch) | |
tree | f1347dff95714b0b27849a9c4099a575acec0f3a | |
parent | 7b5eaa6f62752bad52d041427437bb38dcfdf137 (diff) | |
download | bcm5719-llvm-3306e3a8e84d9d34ea65e8baa5ce9f2c33aae6dd.tar.gz bcm5719-llvm-3306e3a8e84d9d34ea65e8baa5ce9f2c33aae6dd.zip |
[mips] Notify user that `-mabicalls` is ignored on non-PIC N64 ABI
The -mabicalls option does not make sense in the case of non position
independent code for the N64 ABI. After this change the driver shows a
warning that -mabicalls is ignored in that case.
Differential revision: https://reviews.llvm.org/D36550
llvm-svn: 310613
-rw-r--r-- | clang/include/clang/Basic/DiagnosticDriverKinds.td | 4 | ||||
-rw-r--r-- | clang/lib/Driver/ToolChains/Arch/Mips.cpp | 18 | ||||
-rw-r--r-- | clang/test/Driver/mips-abicalls-warning.c | 3 | ||||
-rw-r--r-- | clang/test/Driver/mips-features.c | 5 |
4 files changed, 27 insertions, 3 deletions
diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td b/clang/include/clang/Basic/DiagnosticDriverKinds.td index e57cc1ad295..df47f14f1c5 100644 --- a/clang/include/clang/Basic/DiagnosticDriverKinds.td +++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td @@ -292,6 +292,10 @@ def warn_drv_unsupported_gpopt : Warning< "ignoring '-mgpopt' option as it cannot be used with %select{|the implicit" " usage of }0-mabicalls">, InGroup<UnsupportedGPOpt>; +def warn_drv_unsupported_abicalls : Warning< + "ignoring '-mabicalls' option as it cannot be used with " + "non position-independent code and the N64 ABI">, + InGroup<OptionIgnored>; def warn_drv_unable_to_find_directory_expected : Warning< "unable to find %0 directory, expected to be in '%1'">, diff --git a/clang/lib/Driver/ToolChains/Arch/Mips.cpp b/clang/lib/Driver/ToolChains/Arch/Mips.cpp index c11e2518354..2a0d6eeeb9f 100644 --- a/clang/lib/Driver/ToolChains/Arch/Mips.cpp +++ b/clang/lib/Driver/ToolChains/Arch/Mips.cpp @@ -227,11 +227,23 @@ void mips::getMIPSTargetFeatures(const Driver &D, const llvm::Triple &Triple, O.matches(options::OPT_fno_PIE) || O.matches(options::OPT_fno_pie)); } - if (IsN64 && NonPIC) + bool UseAbiCalls = false; + + Arg *ABICallsArg = + Args.getLastArg(options::OPT_mabicalls, options::OPT_mno_abicalls); + UseAbiCalls = + !ABICallsArg || + (ABICallsArg && ABICallsArg->getOption().matches(options::OPT_mabicalls)); + + if (UseAbiCalls && IsN64 && NonPIC) { + D.Diag(diag::warn_drv_unsupported_abicalls); + UseAbiCalls = false; + } + + if (!UseAbiCalls) Features.push_back("+noabicalls"); else - AddTargetFeature(Args, Features, options::OPT_mno_abicalls, - options::OPT_mabicalls, "noabicalls"); + Features.push_back("-noabicalls"); mips::FloatABI FloatABI = mips::getMipsFloatABI(D, Args); if (FloatABI == mips::FloatABI::Soft) { diff --git a/clang/test/Driver/mips-abicalls-warning.c b/clang/test/Driver/mips-abicalls-warning.c new file mode 100644 index 00000000000..6bfa961b727 --- /dev/null +++ b/clang/test/Driver/mips-abicalls-warning.c @@ -0,0 +1,3 @@ +// REQUIRES: mips-registered-target +// RUN: %clang -### -c -target mips64-mti-elf -fno-PIC -mabicalls %s 2>&1 | FileCheck %s +// CHECK: warning: ignoring '-mabicalls' option as it cannot be used with non position-independent code and the N64 ABI diff --git a/clang/test/Driver/mips-features.c b/clang/test/Driver/mips-features.c index 80143c25eed..d2814fec4a5 100644 --- a/clang/test/Driver/mips-features.c +++ b/clang/test/Driver/mips-features.c @@ -10,6 +10,11 @@ // RUN: | FileCheck --check-prefix=CHECK-MNOABICALLS %s // CHECK-MNOABICALLS: "-target-feature" "+noabicalls" // +// -mno-abicalls non-PIC N64 +// RUN: %clang -target mips64-linux-gnu -### -c -fno-PIC %s 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-MNOABICALLS-N64NPIC %s +// CHECK-MNOABICALLS-N64NPIC: "-target-feature" "+noabicalls" +// // -mgpopt // RUN: %clang -target mips-linux-gnu -### -c %s -mno-gpopt -mgpopt -Wno-unsupported-gpopt 2>&1 \ // RUN: | FileCheck --check-prefix=CHECK-MGPOPT-DEF-ABICALLS %s |