]> granicus.if.org Git - clang/commitdiff
[XRay][clang] Add a flag to enable/disable linking XRay deps explicitly
authorDean Michael Berris <dberris@google.com>
Fri, 6 Apr 2018 05:28:54 +0000 (05:28 +0000)
committerDean Michael Berris <dberris@google.com>
Fri, 6 Apr 2018 05:28:54 +0000 (05:28 +0000)
Summary:
This change introduces `-fxray-link-deps` and `-fnoxray-link-deps`. The
`-fnoxray-link-deps` allows for directly controlling which specific XRay
runtime to link. The default is for clang to link the XRay runtime that
is shipped with the compiler (if there are any), but users may want to
explicitly add the XRay dependencies from other locations or other
means.

Reviewers: eizan, echristo, chandlerc

Reviewed By: eizan

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D45354

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329376 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Driver/Options.td
include/clang/Driver/XRayArgs.h
lib/Driver/XRayArgs.cpp
test/Driver/XRay/xray-nolinkdeps.cpp [new file with mode: 0644]

index c72bb39ec5c777eb785a2dc84189dd3cabe82035..9367634d8afbd13f42f8f1a759dd24266e5c0f27 100644 (file)
@@ -1107,6 +1107,12 @@ def fxray_always_emit_customevents : Flag<["-"], "fxray-always-emit-customevents
 def fnoxray_always_emit_customevents : Flag<["-"], "fno-xray-always-emit-customevents">, Group<f_Group>,
   Flags<[CC1Option]>;
 
+def fxray_link_deps : Flag<["-"], "fxray-link-deps">, Group<f_Group>,
+  Flags<[CC1Option]>,
+  HelpText<"Tells clang to add the link dependencies for XRay.">;
+def fnoxray_link_deps : Flag<["-"], "fnoxray-link-deps">, Group<f_Group>,
+  Flags<[CC1Option]>;
+
 def ffine_grained_bitfield_accesses : Flag<["-"],
   "ffine-grained-bitfield-accesses">, Group<f_clang_Group>, Flags<[CC1Option]>,
   HelpText<"Use separate accesses for bitfields with legal widths and alignments.">;
index b709ee4e87bc8ada445154734289036f8f59c136..8eedd1dba1de99498d7c680b502edb451b6f42b3 100644 (file)
@@ -25,6 +25,7 @@ class XRayArgs {
   bool XRayInstrument = false;
   int InstructionThreshold = 200;
   bool XRayAlwaysEmitCustomEvents = false;
+  bool XRayRT = true;
 
 public:
   /// Parses the XRay arguments from an argument list.
@@ -32,7 +33,7 @@ public:
   void addArgs(const ToolChain &TC, const llvm::opt::ArgList &Args,
                llvm::opt::ArgStringList &CmdArgs, types::ID InputType) const;
 
-  bool needsXRayRt() const { return XRayInstrument; }
+  bool needsXRayRt() const { return XRayInstrument && XRayRT; }
 };
 
 } // namespace driver
index 19bf9b7d22c9e127e8300c747935f0de7865d10d..e151cb907cd9552ddf8d658b929fce955526d6b4 100644 (file)
@@ -76,6 +76,10 @@ XRayArgs::XRayArgs(const ToolChain &TC, const ArgList &Args) {
                      options::OPT_fnoxray_always_emit_customevents, false))
       XRayAlwaysEmitCustomEvents = true;
 
+    if (!Args.hasFlag(options::OPT_fxray_link_deps,
+                      options::OPT_fnoxray_link_deps, true))
+      XRayRT = false;
+
     // Validate the always/never attribute files. We also make sure that they
     // are treated as actual dependencies.
     for (const auto &Filename :
diff --git a/test/Driver/XRay/xray-nolinkdeps.cpp b/test/Driver/XRay/xray-nolinkdeps.cpp
new file mode 100644 (file)
index 0000000..7f17c93
--- /dev/null
@@ -0,0 +1,6 @@
+// RUN: %clang -v -o /dev/null -fxray-instrument -fnoxray-link-deps %s -### \
+// RUN:     2>&1 | FileCheck --check-prefix DISABLE %s
+// RUN: %clang -v -o /dev/null -fxray-instrument -fxray-link-deps %s -### \
+// RUN:     2>&1 | FileCheck --check-prefix ENABLE %s
+// ENABLE: clang_rt.xray
+// DISABLE-NOT: clang_rt.xray