diff --git a/clang/lib/Driver/ToolChains/Solaris.cpp b/clang/lib/Driver/ToolChains/Solaris.cpp --- a/clang/lib/Driver/ToolChains/Solaris.cpp +++ b/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,