phosek created this revision. phosek added a reviewer: dberris. Herald added a subscriber: cfe-commits.
XRay runtime link deps handling passes --no-as-needed, but it never undoes it and this flag may affect other libraries that come later on the link line. To avoid this, wrap XRay link deps in --push/pop-state. Repository: rC Clang https://reviews.llvm.org/D54784 Files: clang/lib/Driver/ToolChains/CommonArgs.cpp clang/test/Driver/XRay/xray-shared-noxray.cpp Index: clang/test/Driver/XRay/xray-shared-noxray.cpp =================================================================== --- clang/test/Driver/XRay/xray-shared-noxray.cpp +++ clang/test/Driver/XRay/xray-shared-noxray.cpp @@ -7,6 +7,9 @@ // // SHARED-NOT: {{clang_rt\.xray-}} // STATIC: {{clang_rt\.xray-}} +// STATIC: "--push-state" +// STATIC: "--no-as-needed" +// STATIC: "--pop-state" // // REQUIRES: linux, enable_shared int foo() { return 42; } Index: clang/lib/Driver/ToolChains/CommonArgs.cpp =================================================================== --- clang/lib/Driver/ToolChains/CommonArgs.cpp +++ clang/lib/Driver/ToolChains/CommonArgs.cpp @@ -788,6 +788,7 @@ } void tools::linkXRayRuntimeDeps(const ToolChain &TC, ArgStringList &CmdArgs) { + CmdArgs.push_back("--push-state"); CmdArgs.push_back("--no-as-needed"); CmdArgs.push_back("-lpthread"); if (TC.getTriple().getOS() != llvm::Triple::OpenBSD) @@ -798,6 +799,7 @@ TC.getTriple().getOS() != llvm::Triple::NetBSD && TC.getTriple().getOS() != llvm::Triple::OpenBSD) CmdArgs.push_back("-ldl"); + CmdArgs.push_back("--pop-state"); } bool tools::areOptimizationsEnabled(const ArgList &Args) {
Index: clang/test/Driver/XRay/xray-shared-noxray.cpp =================================================================== --- clang/test/Driver/XRay/xray-shared-noxray.cpp +++ clang/test/Driver/XRay/xray-shared-noxray.cpp @@ -7,6 +7,9 @@ // // SHARED-NOT: {{clang_rt\.xray-}} // STATIC: {{clang_rt\.xray-}} +// STATIC: "--push-state" +// STATIC: "--no-as-needed" +// STATIC: "--pop-state" // // REQUIRES: linux, enable_shared int foo() { return 42; } Index: clang/lib/Driver/ToolChains/CommonArgs.cpp =================================================================== --- clang/lib/Driver/ToolChains/CommonArgs.cpp +++ clang/lib/Driver/ToolChains/CommonArgs.cpp @@ -788,6 +788,7 @@ } void tools::linkXRayRuntimeDeps(const ToolChain &TC, ArgStringList &CmdArgs) { + CmdArgs.push_back("--push-state"); CmdArgs.push_back("--no-as-needed"); CmdArgs.push_back("-lpthread"); if (TC.getTriple().getOS() != llvm::Triple::OpenBSD) @@ -798,6 +799,7 @@ TC.getTriple().getOS() != llvm::Triple::NetBSD && TC.getTriple().getOS() != llvm::Triple::OpenBSD) CmdArgs.push_back("-ldl"); + CmdArgs.push_back("--pop-state"); } bool tools::areOptimizationsEnabled(const ArgList &Args) {
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits