dberris created this revision. dberris added reviewers: eizan, echristo, chandlerc.
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. https://reviews.llvm.org/D45354 Files: clang/include/clang/Driver/Options.td clang/include/clang/Driver/XRayArgs.h clang/lib/Driver/XRayArgs.cpp clang/test/Driver/XRay/xray-nolinkdeps.cpp Index: clang/test/Driver/XRay/xray-nolinkdeps.cpp =================================================================== --- /dev/null +++ clang/test/Driver/XRay/xray-nolinkdeps.cpp @@ -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 Index: clang/lib/Driver/XRayArgs.cpp =================================================================== --- clang/lib/Driver/XRayArgs.cpp +++ clang/lib/Driver/XRayArgs.cpp @@ -76,6 +76,10 @@ 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 : Index: clang/include/clang/Driver/XRayArgs.h =================================================================== --- clang/include/clang/Driver/XRayArgs.h +++ clang/include/clang/Driver/XRayArgs.h @@ -25,14 +25,15 @@ bool XRayInstrument = false; int InstructionThreshold = 200; bool XRayAlwaysEmitCustomEvents = false; + bool XRayRT = true; public: /// Parses the XRay arguments from an argument list. XRayArgs(const ToolChain &TC, const llvm::opt::ArgList &Args); 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: clang/include/clang/Driver/Options.td =================================================================== --- clang/include/clang/Driver/Options.td +++ clang/include/clang/Driver/Options.td @@ -1107,6 +1107,12 @@ 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: clang/test/Driver/XRay/xray-nolinkdeps.cpp =================================================================== --- /dev/null +++ clang/test/Driver/XRay/xray-nolinkdeps.cpp @@ -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 Index: clang/lib/Driver/XRayArgs.cpp =================================================================== --- clang/lib/Driver/XRayArgs.cpp +++ clang/lib/Driver/XRayArgs.cpp @@ -76,6 +76,10 @@ 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 : Index: clang/include/clang/Driver/XRayArgs.h =================================================================== --- clang/include/clang/Driver/XRayArgs.h +++ clang/include/clang/Driver/XRayArgs.h @@ -25,14 +25,15 @@ bool XRayInstrument = false; int InstructionThreshold = 200; bool XRayAlwaysEmitCustomEvents = false; + bool XRayRT = true; public: /// Parses the XRay arguments from an argument list. XRayArgs(const ToolChain &TC, const llvm::opt::ArgList &Args); 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: clang/include/clang/Driver/Options.td =================================================================== --- clang/include/clang/Driver/Options.td +++ clang/include/clang/Driver/Options.td @@ -1107,6 +1107,12 @@ 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.">;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits