ro created this revision.
ro added reviewers: vitalybuka, MaskRay.
ro added a project: clang.
Herald added a subscriber: fedor.sergeev.
Herald added a project: All.
ro requested review of this revision.

As detailed in Issue #64126, several asan tests `FAIL` due to a cycle in 
`AsanInitInternal`.  This can by avoided by disabling lazy binding with `ld -z 
now`.

Tested on `amd64-pc-solaris2.11.`


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D156325

Files:
  clang/lib/Driver/ToolChains/Solaris.cpp


Index: clang/lib/Driver/ToolChains/Solaris.cpp
===================================================================
--- clang/lib/Driver/ToolChains/Solaris.cpp
+++ clang/lib/Driver/ToolChains/Solaris.cpp
@@ -151,18 +151,22 @@
       CmdArgs.push_back("-lgcc");
       CmdArgs.push_back("-lm");
     }
+    const SanitizerArgs &SA = getToolChain().getSanitizerArgs(Args);
     if (NeedsSanitizerDeps) {
       linkSanitizerRuntimeDeps(getToolChain(), CmdArgs);
 
       // Work around Solaris/amd64 ld bug when calling __tls_get_addr directly.
       // However, ld -z relax=transtls is available since Solaris 11.2, but not
       // in Illumos.
-      const SanitizerArgs &SA = getToolChain().getSanitizerArgs(Args);
       if (getToolChain().getTriple().getArch() == llvm::Triple::x86_64 &&
           (SA.needsAsanRt() || SA.needsStatsRt() ||
            (SA.needsUbsanRt() && !SA.requiresMinimalRuntime())))
         CmdArgs.push_back("-zrelax=transtls");
     }
+    // Avoid AsanInitInternal cycle, Issue #64126.
+    if (getToolChain().getTriple().isX86() && SA.needsSharedRt() &&
+        SA.needsAsanRt())
+      CmdArgs.push_back("-znow");
   }
 
   if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles,


Index: clang/lib/Driver/ToolChains/Solaris.cpp
===================================================================
--- clang/lib/Driver/ToolChains/Solaris.cpp
+++ clang/lib/Driver/ToolChains/Solaris.cpp
@@ -151,18 +151,22 @@
       CmdArgs.push_back("-lgcc");
       CmdArgs.push_back("-lm");
     }
+    const SanitizerArgs &SA = getToolChain().getSanitizerArgs(Args);
     if (NeedsSanitizerDeps) {
       linkSanitizerRuntimeDeps(getToolChain(), CmdArgs);
 
       // Work around Solaris/amd64 ld bug when calling __tls_get_addr directly.
       // However, ld -z relax=transtls is available since Solaris 11.2, but not
       // in Illumos.
-      const SanitizerArgs &SA = getToolChain().getSanitizerArgs(Args);
       if (getToolChain().getTriple().getArch() == llvm::Triple::x86_64 &&
           (SA.needsAsanRt() || SA.needsStatsRt() ||
            (SA.needsUbsanRt() && !SA.requiresMinimalRuntime())))
         CmdArgs.push_back("-zrelax=transtls");
     }
+    // Avoid AsanInitInternal cycle, Issue #64126.
+    if (getToolChain().getTriple().isX86() && SA.needsSharedRt() &&
+        SA.needsAsanRt())
+      CmdArgs.push_back("-znow");
   }
 
   if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles,
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to