Skip to content

Commit

Permalink
[XRay][Driver] Do not link in XRay runtime in shared libs
Browse files Browse the repository at this point in the history
Summary:
This change ensures that we don't link in the XRay runtime when building
shared libraries with clang. This doesn't prevent us from building
shared libraris tht have XRay instrumentation sleds, but it does prevent
us from linking in the static XRay runtime into a shared library.

The XRay runtime currently doesn't support dynamic registration of
instrumentation sleds in shared objects, which we'll start enabling in
the future. That work has to happen in the back-end and in the runtime.

Reviewers: rnk, pelikan

Subscribers: cfe-commits

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

llvm-svn: 314177
  • Loading branch information
deanberris committed Sep 25, 2017
1 parent 305e1b5 commit b013dc4
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 0 deletions.
5 changes: 5 additions & 0 deletions clang/lib/Driver/ToolChains/Gnu.cpp
Expand Up @@ -206,13 +206,18 @@ void tools::gcc::Linker::RenderExtraToolArgs(const JobAction &JA,

static bool addXRayRuntime(const ToolChain &TC, const ArgList &Args,
ArgStringList &CmdArgs) {
// Do not add the XRay runtime to shared libraries.
if (Args.hasArg(options::OPT_shared))
return false;

if (Args.hasFlag(options::OPT_fxray_instrument,
options::OPT_fnoxray_instrument, false)) {
CmdArgs.push_back("-whole-archive");
CmdArgs.push_back(TC.getCompilerRTArgString(Args, "xray", false));
CmdArgs.push_back("-no-whole-archive");
return true;
}

return false;
}

Expand Down
14 changes: 14 additions & 0 deletions clang/test/Driver/XRay/xray-shared-noxray.cpp
@@ -0,0 +1,14 @@
// RUN: %clangxx -shared -fPIC -o /dev/null -v -fxray-instrument %s 2>&1 | \
// RUN: FileCheck %s --check-prefix=SHARED
// RUN: %clangxx -static -o /dev/null -v -fxray-instrument %s 2>&1 -DMAIN | \
// RUN: FileCheck %s --check-prefix=STATIC
// RUN: %clangxx -static -fPIE -o /dev/null -v -fxray-instrument %s 2>&1 \
// RUN: -DMAIN | FileCheck %s --check-prefix=STATIC
//
// SHARED-NOT: {{clang_rt\.xray-}}
// STATIC: {{clang_rt\.xray-}}
int foo() { return 42; }

#ifdef MAIN
int main() { return foo(); }
#endif

0 comments on commit b013dc4

Please sign in to comment.