Author: dberris Date: Thu Nov 9 21:50:13 2017 New Revision: 317875 URL: http://llvm.org/viewvc/llvm-project?rev=317875&view=rev Log: [XRay][darwin] Initial XRay in Darwin Support
Summary: This change implements the changes required in both clang and compiler-rt to allow building XRay-instrumented binaries in Darwin. For now we limit this to x86_64. We also start building the XRay runtime library in compiler-rt for osx. A caveat to this is that we don't have the tests set up and running yet, which we'll do in a set of follow-on changes. This patch uses the monorepo layout for the coordinated change across multiple projects. Reviewers: kubamracek Subscribers: mgorny, cfe-commits, llvm-commits Differential Revision: https://reviews.llvm.org/D39114 Modified: cfe/trunk/include/clang/Driver/XRayArgs.h cfe/trunk/lib/Driver/ToolChains/Darwin.cpp cfe/trunk/lib/Driver/XRayArgs.cpp Modified: cfe/trunk/include/clang/Driver/XRayArgs.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/XRayArgs.h?rev=317875&r1=317874&r2=317875&view=diff ============================================================================== --- cfe/trunk/include/clang/Driver/XRayArgs.h (original) +++ cfe/trunk/include/clang/Driver/XRayArgs.h Thu Nov 9 21:50:13 2017 @@ -30,6 +30,7 @@ public: 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; } }; } // namespace driver Modified: cfe/trunk/lib/Driver/ToolChains/Darwin.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Darwin.cpp?rev=317875&r1=317874&r2=317875&view=diff ============================================================================== --- cfe/trunk/lib/Driver/ToolChains/Darwin.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Darwin.cpp Thu Nov 9 21:50:13 2017 @@ -18,6 +18,7 @@ #include "clang/Driver/DriverDiagnostic.h" #include "clang/Driver/Options.h" #include "clang/Driver/SanitizerArgs.h" +#include "clang/Driver/XRayArgs.h" #include "llvm/ADT/StringSwitch.h" #include "llvm/Option/ArgList.h" #include "llvm/Support/Path.h" @@ -1098,6 +1099,11 @@ void DarwinClang::AddLinkRuntimeLibArgs( if (Sanitize.needsEsanRt()) AddLinkSanitizerLibArgs(Args, CmdArgs, "esan"); + const XRayArgs& XRay = getXRayArgs(); + if (XRay.needsXRayRt() && isTargetMacOS()) { + AddLinkRuntimeLib(Args, CmdArgs, "libclang_rt.xray_osx.a", RLO_AlwaysLink); + } + // Otherwise link libSystem, then the dynamic runtime library, and finally any // target specific static runtime library. CmdArgs.push_back("-lSystem"); Modified: cfe/trunk/lib/Driver/XRayArgs.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/XRayArgs.cpp?rev=317875&r1=317874&r2=317875&view=diff ============================================================================== --- cfe/trunk/lib/Driver/XRayArgs.cpp (original) +++ cfe/trunk/lib/Driver/XRayArgs.cpp Thu Nov 9 21:50:13 2017 @@ -51,6 +51,15 @@ XRayArgs::XRayArgs(const ToolChain &TC, D.Diag(diag::err_drv_clang_unsupported) << (std::string(XRayInstrumentOption) + " on " + Triple.str()); } + else if (Triple.getOS() == llvm::Triple::Darwin) + // Experimental support for macos. + switch (Triple.getArch()) { + case llvm::Triple::x86_64: + break; + default: + D.Diag(diag::err_drv_clang_unsupported) + << (std::string(XRayInstrumentOption) + " on " + Triple.str()); + } else D.Diag(diag::err_drv_clang_unsupported) << (std::string(XRayInstrumentOption) + " on non-Linux target OS"); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits