summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/lib/Driver/ToolChains/Clang.cpp27
-rw-r--r--clang/test/Driver/mcount.c10
-rw-r--r--clang/test/Driver/mfentry.c9
3 files changed, 34 insertions, 12 deletions
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp
index 03100948f56..1b8eca0ea0d 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -4986,18 +4986,27 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
const XRayArgs &XRay = TC.getXRayArgs();
XRay.addArgs(TC, Args, CmdArgs, InputType);
- if (TC.SupportsProfiling())
+ if (TC.SupportsProfiling()) {
Args.AddLastArg(CmdArgs, options::OPT_pg);
- if (TC.SupportsProfiling())
- Args.AddLastArg(CmdArgs, options::OPT_mfentry);
-
- if (TC.SupportsProfiling())
- Args.AddLastArg(CmdArgs, options::OPT_mnop_mcount);
-
- if (TC.SupportsProfiling()) {
+ llvm::Triple::ArchType Arch = TC.getArch();
+ if (Arg *A = Args.getLastArg(options::OPT_mfentry)) {
+ if (Arch == llvm::Triple::systemz || Arch == llvm::Triple::x86 ||
+ Arch == llvm::Triple::x86_64)
+ A->render(Args, CmdArgs);
+ else
+ D.Diag(diag::err_drv_unsupported_opt_for_target)
+ << A->getAsString(Args) << TripleStr;
+ }
+ if (Arg *A = Args.getLastArg(options::OPT_mnop_mcount)) {
+ if (Arch == llvm::Triple::systemz)
+ A->render(Args, CmdArgs);
+ else
+ D.Diag(diag::err_drv_unsupported_opt_for_target)
+ << A->getAsString(Args) << TripleStr;
+ }
if (Arg *A = Args.getLastArg(options::OPT_mrecord_mcount)) {
- if (TC.getArch() == llvm::Triple::systemz)
+ if (Arch == llvm::Triple::systemz)
A->render(Args, CmdArgs);
else
D.Diag(diag::err_drv_unsupported_opt_for_target)
diff --git a/clang/test/Driver/mcount.c b/clang/test/Driver/mcount.c
index 7086abfc74b..a89150cb263 100644
--- a/clang/test/Driver/mcount.c
+++ b/clang/test/Driver/mcount.c
@@ -1,8 +1,12 @@
-// RUN: %clang -target s390x -c -### %s -mrecord-mcount 2>&1 | FileCheck %s
+// RUN: %clang -target s390x -c -### %s -mnop-mcount -mrecord-mcount 2>&1 | FileCheck %s
+
+// CHECK: "-mnop-mcount"
// CHECK: "-mrecord-mcount"
-// RUN: %clang -target x86_64 -c -### %s -mrecord-mcount 2>&1 | FileCheck --check-prefix=ERR1 %s
-// RUN: %clang -target aarch64 -c -### %s -mrecord-mcount 2>&1 | FileCheck --check-prefix=ERR2 %s
+// RUN: %clang -target x86_64 -c -### %s -mnop-mcount -mrecord-mcount 2>&1 | FileCheck --check-prefix=ERR1 %s
+// RUN: %clang -target aarch64 -c -### %s -mnop-mcount -mrecord-mcount 2>&1 | FileCheck --check-prefix=ERR2 %s
+// ERR1: error: unsupported option '-mnop-mcount' for target 'x86_64'
// ERR1: error: unsupported option '-mrecord-mcount' for target 'x86_64'
+// ERR2: error: unsupported option '-mnop-mcount' for target 'aarch64'
// ERR2: error: unsupported option '-mrecord-mcount' for target 'aarch64'
diff --git a/clang/test/Driver/mfentry.c b/clang/test/Driver/mfentry.c
new file mode 100644
index 00000000000..ee402ea1b73
--- /dev/null
+++ b/clang/test/Driver/mfentry.c
@@ -0,0 +1,9 @@
+// RUN: %clang -target s390x -c -### %s -mfentry 2>&1 | FileCheck %s
+// RUN: %clang -target i386 -c -### %s -mfentry 2>&1 | FileCheck %s
+// RUN: %clang -target x86_64 -c -### %s -mfentry 2>&1 | FileCheck %s
+
+// CHECK: "-mfentry"
+
+// RUN: %clang -target powerpc64le -c -### %s -mfentry 2>&1 | FileCheck --check-prefix=ERR %s
+
+// ERR: error: unsupported option '-mfentry' for target 'powerpc64le'
OpenPOWER on IntegriCloud