This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rG6b5149aa442e: [Driver] Link shared asan runtime lib with -z now on Solaris/x86 (authored by ro).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D156325/new/ https://reviews.llvm.org/D156325 Files: clang/lib/Driver/ToolChains/Solaris.cpp clang/test/Driver/solaris-ld-sanitizer.c Index: clang/test/Driver/solaris-ld-sanitizer.c =================================================================== --- clang/test/Driver/solaris-ld-sanitizer.c +++ clang/test/Driver/solaris-ld-sanitizer.c @@ -49,3 +49,19 @@ // RUN: --gcc-toolchain="" --sysroot=%S/Inputs/solaris_x86_tree \ // RUN: | FileCheck --check-prefix=CHECK-LD-X64-UBSAN %s // CHECK-LD-X64-UBSAN: -zrelax=transtls + +/// General tests that the ld -z now workaround is only applied on +/// Solaris/i386 with shared libclang_rt.asan.. Note that we use sysroot to +/// make these tests independent of the host system. + +/// Check i386-pc-solaris2.11, 32bit, shared libclang_rt.asan +// RUN: %clang -fsanitize=address -shared-libasan --target=i386-pc-solaris2.11 %s -### 2>&1 \ +// RUN: --gcc-toolchain="" --sysroot=%S/Inputs/solaris_x86_tree \ +// RUN: | FileCheck --check-prefix=CHECK-LD-X32-ASAN-SHARED %s +// CHECK-LD-X32-ASAN-SHARED: -znow + +/// Check i386-pc-solaris2.11, 32bit, static libclang_rt.asan +// RUN: %clang -fsanitize=address --target=i386-pc-solaris2.11 %s -### 2>&1 \ +// RUN: --gcc-toolchain="" --sysroot=%S/Inputs/solaris_x86_tree \ +// RUN: | FileCheck --check-prefix=CHECK-LD-X32-ASAN %s +// CHECK-LD-X32-ASAN-NOT: -znow 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/test/Driver/solaris-ld-sanitizer.c =================================================================== --- clang/test/Driver/solaris-ld-sanitizer.c +++ clang/test/Driver/solaris-ld-sanitizer.c @@ -49,3 +49,19 @@ // RUN: --gcc-toolchain="" --sysroot=%S/Inputs/solaris_x86_tree \ // RUN: | FileCheck --check-prefix=CHECK-LD-X64-UBSAN %s // CHECK-LD-X64-UBSAN: -zrelax=transtls + +/// General tests that the ld -z now workaround is only applied on +/// Solaris/i386 with shared libclang_rt.asan.. Note that we use sysroot to +/// make these tests independent of the host system. + +/// Check i386-pc-solaris2.11, 32bit, shared libclang_rt.asan +// RUN: %clang -fsanitize=address -shared-libasan --target=i386-pc-solaris2.11 %s -### 2>&1 \ +// RUN: --gcc-toolchain="" --sysroot=%S/Inputs/solaris_x86_tree \ +// RUN: | FileCheck --check-prefix=CHECK-LD-X32-ASAN-SHARED %s +// CHECK-LD-X32-ASAN-SHARED: -znow + +/// Check i386-pc-solaris2.11, 32bit, static libclang_rt.asan +// RUN: %clang -fsanitize=address --target=i386-pc-solaris2.11 %s -### 2>&1 \ +// RUN: --gcc-toolchain="" --sysroot=%S/Inputs/solaris_x86_tree \ +// RUN: | FileCheck --check-prefix=CHECK-LD-X32-ASAN %s +// CHECK-LD-X32-ASAN-NOT: -znow 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