Skip to content

Commit 19bfc57

Browse files
graydonjrose-apple
authored andcommitted
Factor out toolchains::Darwin::addSanitizerArgs.
1 parent 5dd9063 commit 19bfc57

File tree

2 files changed

+28
-17
lines changed

2 files changed

+28
-17
lines changed

lib/Driver/DarwinToolChains.cpp

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,29 @@ toolchains::Darwin::addArgsToLinkARCLite(ArgStringList &Arguments,
262262
}
263263
}
264264

265+
void
266+
toolchains::Darwin::addSanitizerArgs(ArgStringList &Arguments,
267+
const LinkJobAction &job,
268+
const JobContext &context) const {
269+
// Linking sanitizers will add rpaths, which might negatively interact when
270+
// other rpaths are involved, so we should make sure we add the rpaths after
271+
// all user-specified rpaths.
272+
if (context.OI.SelectedSanitizers & SanitizerKind::Address)
273+
addLinkSanitizerLibArgsForDarwin(context.Args, Arguments, "asan", *this);
274+
275+
if (context.OI.SelectedSanitizers & SanitizerKind::Thread)
276+
addLinkSanitizerLibArgsForDarwin(context.Args, Arguments, "tsan", *this);
277+
278+
if (context.OI.SelectedSanitizers & SanitizerKind::Undefined)
279+
addLinkSanitizerLibArgsForDarwin(context.Args, Arguments, "ubsan", *this);
280+
281+
// Only link in libFuzzer for executables.
282+
if (job.getKind() == LinkKind::Executable &&
283+
(context.OI.SelectedSanitizers & SanitizerKind::Fuzzer))
284+
addLinkSanitizerLibArgsForDarwin(context.Args, Arguments, "fuzzer", *this,
285+
/*shared=*/false);
286+
}
287+
265288
void
266289
toolchains::Darwin::addArgsToLinkStdlib(ArgStringList &Arguments,
267290
const JobContext &context) const {
@@ -497,23 +520,7 @@ toolchains::Darwin::constructInvocation(const LinkJobAction &job,
497520
Arguments.push_back("-application_extension");
498521
}
499522

500-
// Linking sanitizers will add rpaths, which might negatively interact when
501-
// other rpaths are involved, so we should make sure we add the rpaths after
502-
// all user-specified rpaths.
503-
if (context.OI.SelectedSanitizers & SanitizerKind::Address)
504-
addLinkSanitizerLibArgsForDarwin(context.Args, Arguments, "asan", *this);
505-
506-
if (context.OI.SelectedSanitizers & SanitizerKind::Thread)
507-
addLinkSanitizerLibArgsForDarwin(context.Args, Arguments, "tsan", *this);
508-
509-
if (context.OI.SelectedSanitizers & SanitizerKind::Undefined)
510-
addLinkSanitizerLibArgsForDarwin(context.Args, Arguments, "ubsan", *this);
511-
512-
// Only link in libFuzzer for executables.
513-
if (job.getKind() == LinkKind::Executable &&
514-
(context.OI.SelectedSanitizers & SanitizerKind::Fuzzer))
515-
addLinkSanitizerLibArgsForDarwin(context.Args, Arguments, "fuzzer", *this,
516-
/*shared=*/false);
523+
addSanitizerArgs(Arguments, job, context);
517524

518525
if (context.Args.hasArg(options::OPT_embed_bitcode,
519526
options::OPT_embed_bitcode_marker)) {

lib/Driver/ToolChains.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ class LLVM_LIBRARY_VISIBILITY Darwin : public ToolChain {
2727
void addArgsToLinkARCLite(llvm::opt::ArgStringList &Arguments,
2828
const JobContext &context) const;
2929

30+
void addSanitizerArgs(llvm::opt::ArgStringList &Arguments,
31+
const LinkJobAction &job,
32+
const JobContext &context) const;
33+
3034
void addArgsToLinkStdlib(llvm::opt::ArgStringList &Arguments,
3135
const JobContext &context) const;
3236

0 commit comments

Comments
 (0)