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
  • [PATCH] D54784: Use --... Petr Hosek via Phabricator via cfe-commits

Reply via email to