Skip to content

Commit 02b0229

Browse files
committed
[Sanitizers] fix -fno-sanitize-link-runtime for darwin
rdar://99200922 Differential Revision: https://reviews.llvm.org/D142421
1 parent 64b4d15 commit 02b0229

File tree

2 files changed

+55
-21
lines changed

2 files changed

+55
-21
lines changed

clang/lib/Driver/ToolChains/Darwin.cpp

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1586,27 +1586,29 @@ void DarwinClang::AddLinkRuntimeLibArgs(const ArgList &Args,
15861586
return;
15871587
}
15881588

1589-
if (Sanitize.needsAsanRt())
1590-
AddLinkSanitizerLibArgs(Args, CmdArgs, "asan");
1591-
if (Sanitize.needsLsanRt())
1592-
AddLinkSanitizerLibArgs(Args, CmdArgs, "lsan");
1593-
if (Sanitize.needsUbsanRt()) {
1594-
assert(Sanitize.needsSharedRt() && "Static sanitizer runtimes not supported");
1595-
AddLinkSanitizerLibArgs(Args, CmdArgs,
1596-
Sanitize.requiresMinimalRuntime() ? "ubsan_minimal"
1597-
: "ubsan");
1598-
}
1599-
if (Sanitize.needsTsanRt())
1600-
AddLinkSanitizerLibArgs(Args, CmdArgs, "tsan");
1601-
if (Sanitize.needsFuzzer() && !Args.hasArg(options::OPT_dynamiclib)) {
1602-
AddLinkSanitizerLibArgs(Args, CmdArgs, "fuzzer", /*shared=*/false);
1603-
1604-
// Libfuzzer is written in C++ and requires libcxx.
1605-
AddCXXStdlibLibArgs(Args, CmdArgs);
1606-
}
1607-
if (Sanitize.needsStatsRt()) {
1608-
AddLinkRuntimeLib(Args, CmdArgs, "stats_client", RLO_AlwaysLink);
1609-
AddLinkSanitizerLibArgs(Args, CmdArgs, "stats");
1589+
if (Sanitize.linkRuntimes()) {
1590+
if (Sanitize.needsAsanRt())
1591+
AddLinkSanitizerLibArgs(Args, CmdArgs, "asan");
1592+
if (Sanitize.needsLsanRt())
1593+
AddLinkSanitizerLibArgs(Args, CmdArgs, "lsan");
1594+
if (Sanitize.needsUbsanRt()) {
1595+
assert(Sanitize.needsSharedRt() && "Static sanitizer runtimes not supported");
1596+
AddLinkSanitizerLibArgs(Args, CmdArgs,
1597+
Sanitize.requiresMinimalRuntime() ? "ubsan_minimal"
1598+
: "ubsan");
1599+
}
1600+
if (Sanitize.needsTsanRt())
1601+
AddLinkSanitizerLibArgs(Args, CmdArgs, "tsan");
1602+
if (Sanitize.needsFuzzer() && !Args.hasArg(options::OPT_dynamiclib)) {
1603+
AddLinkSanitizerLibArgs(Args, CmdArgs, "fuzzer", /*shared=*/false);
1604+
1605+
// Libfuzzer is written in C++ and requires libcxx.
1606+
AddCXXStdlibLibArgs(Args, CmdArgs);
1607+
}
1608+
if (Sanitize.needsStatsRt()) {
1609+
AddLinkRuntimeLib(Args, CmdArgs, "stats_client", RLO_AlwaysLink);
1610+
AddLinkSanitizerLibArgs(Args, CmdArgs, "stats");
1611+
}
16101612
}
16111613

16121614
const XRayArgs &XRay = getXRayArgs();

clang/test/Driver/sanitizer-ld.c

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,14 @@
2525
//
2626
// CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan-x86_64
2727

28+
// RUN: %clang -fsanitize=address -fno-sanitize-link-runtime -### %s 2>&1 \
29+
// RUN: --target=arm64e-apple-macosx -fuse-ld=ld \
30+
// RUN: -resource-dir=%S/Inputs/resource_dir \
31+
// RUN: --sysroot=%S/Inputs/basic_linux_tree \
32+
// RUN: | FileCheck --check-prefix=CHECK-ASAN-NO-LINK-RUNTIME-DARWIN %s
33+
//
34+
// CHECK-ASAN-NO-LINK-RUNTIME-DARWIN-NOT: libclang_rt.asan
35+
2836
// RUN: %clang -fsanitize=address -### %s 2>&1 \
2937
// RUN: --target=x86_64-unknown-linux -fuse-ld=ld \
3038
// RUN: -resource-dir=%S/Inputs/resource_dir \
@@ -288,6 +296,14 @@
288296
//
289297
// CHECK-TSAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.tsan
290298

299+
// RUN: %clang -fsanitize=thread -fno-sanitize-link-runtime -### %s 2>&1 \
300+
// RUN: --target=arm64e-apple-ios -fuse-ld=ld \
301+
// RUN: -resource-dir=%S/Inputs/resource_dir \
302+
// RUN: --sysroot=%S/Inputs/basic_linux_tree \
303+
// RUN: | FileCheck --check-prefix=CHECK-TSAN-NO-LINK-RUNTIME-DARWIN %s
304+
//
305+
// CHECK-TSAN-NO-LINK-RUNTIME-DARWIN-NOT: libclang_rt.tsan
306+
291307
// RUN: %clangxx -### %s 2>&1 \
292308
// RUN: --target=x86_64-unknown-linux -fuse-ld=ld -stdlib=platform -lstdc++ \
293309
// RUN: -fsanitize=memory \
@@ -353,6 +369,22 @@
353369
//
354370
// CHECK-UBSAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.undefined
355371

372+
// RUN: %clang -fsanitize=undefined -fno-sanitize-link-runtime -### %s 2>&1 \
373+
// RUN: --target=x86_64-apple-darwin -fuse-ld=ld \
374+
// RUN: -resource-dir=%S/Inputs/resource_dir \
375+
// RUN: --sysroot=%S/Inputs/basic_linux_tree \
376+
// RUN: | FileCheck --check-prefix=CHECK-UBSAN-NO-LINK-RUNTIME-DARWIN %s
377+
//
378+
// CHECK-UBSAN-NO-LINK-RUNTIME-DARWIN-NOT: libclang_rt.ubsan
379+
380+
// RUN: %clang -fsanitize=fuzzer -fno-sanitize-link-runtime -### %s 2>&1 \
381+
// RUN: --target=arm64e-apple-watchos -fuse-ld=ld \
382+
// RUN: -resource-dir=%S/Inputs/resource_dir \
383+
// RUN: --sysroot=%S/Inputs/basic_linux_tree \
384+
// RUN: | FileCheck --check-prefix=CHECK-FUZZER-NO-LINK-RUNTIME-DARWIN %s
385+
//
386+
// CHECK-FUZZER-NO-LINK-RUNTIME-DARWIN-NOT: libclang_rt.fuzzer
387+
356388
// RUN: %clang -fsanitize=undefined -### %s 2>&1 \
357389
// RUN: --target=i386-unknown-linux -fuse-ld=ld \
358390
// RUN: -resource-dir=%S/Inputs/resource_dir \

0 commit comments

Comments
 (0)