Skip to content

Commit 57690a8

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

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
@@ -1431,27 +1431,29 @@ void DarwinClang::AddLinkRuntimeLibArgs(const ArgList &Args,
14311431
return;
14321432
}
14331433

1434-
if (Sanitize.needsAsanRt())
1435-
AddLinkSanitizerLibArgs(Args, CmdArgs, "asan");
1436-
if (Sanitize.needsLsanRt())
1437-
AddLinkSanitizerLibArgs(Args, CmdArgs, "lsan");
1438-
if (Sanitize.needsUbsanRt()) {
1439-
assert(Sanitize.needsSharedRt() && "Static sanitizer runtimes not supported");
1440-
AddLinkSanitizerLibArgs(Args, CmdArgs,
1441-
Sanitize.requiresMinimalRuntime() ? "ubsan_minimal"
1442-
: "ubsan");
1443-
}
1444-
if (Sanitize.needsTsanRt())
1445-
AddLinkSanitizerLibArgs(Args, CmdArgs, "tsan");
1446-
if (Sanitize.needsFuzzer() && !Args.hasArg(options::OPT_dynamiclib)) {
1447-
AddLinkSanitizerLibArgs(Args, CmdArgs, "fuzzer", /*shared=*/false);
1448-
1449-
// Libfuzzer is written in C++ and requires libcxx.
1450-
AddCXXStdlibLibArgs(Args, CmdArgs);
1451-
}
1452-
if (Sanitize.needsStatsRt()) {
1453-
AddLinkRuntimeLib(Args, CmdArgs, "stats_client", RLO_AlwaysLink);
1454-
AddLinkSanitizerLibArgs(Args, CmdArgs, "stats");
1434+
if (Sanitize.linkRuntimes()) {
1435+
if (Sanitize.needsAsanRt())
1436+
AddLinkSanitizerLibArgs(Args, CmdArgs, "asan");
1437+
if (Sanitize.needsLsanRt())
1438+
AddLinkSanitizerLibArgs(Args, CmdArgs, "lsan");
1439+
if (Sanitize.needsUbsanRt()) {
1440+
assert(Sanitize.needsSharedRt() && "Static sanitizer runtimes not supported");
1441+
AddLinkSanitizerLibArgs(Args, CmdArgs,
1442+
Sanitize.requiresMinimalRuntime() ? "ubsan_minimal"
1443+
: "ubsan");
1444+
}
1445+
if (Sanitize.needsTsanRt())
1446+
AddLinkSanitizerLibArgs(Args, CmdArgs, "tsan");
1447+
if (Sanitize.needsFuzzer() && !Args.hasArg(options::OPT_dynamiclib)) {
1448+
AddLinkSanitizerLibArgs(Args, CmdArgs, "fuzzer", /*shared=*/false);
1449+
1450+
// Libfuzzer is written in C++ and requires libcxx.
1451+
AddCXXStdlibLibArgs(Args, CmdArgs);
1452+
}
1453+
if (Sanitize.needsStatsRt()) {
1454+
AddLinkRuntimeLib(Args, CmdArgs, "stats_client", RLO_AlwaysLink);
1455+
AddLinkSanitizerLibArgs(Args, CmdArgs, "stats");
1456+
}
14551457
}
14561458

14571459
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)