<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Filipe,<div class=""><br class=""></div><div class="">You say that, but the darwin driver’s behavior is different from the FreeBSD or GNUTools behavior. This patch provides the GNUTools & FreeBSD behavior via the Darwin driver.</div><div class=""><br class=""></div><div class="">-Chris</div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Aug 30, 2016, at 12:26 PM, Filipe Cabecinhas <<a href="mailto:filcab+llvm.phabricator@gmail.com" class="">filcab+llvm.phabricator@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class="">I don't think so. "No default libs" should mean "no default libs", not "some default libs". Maybe you're using an alternate sanitizer lib or something, hence usage of that flag.<div class=""><br class=""></div><div class="">Thank you,</div><div class=""><br class=""></div><div class=""> Filipe<span class=""></span><br class=""><br class="">On Tuesday, 30 August 2016, Chris Bieneman via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org" class="">cfe-commits@lists.llvm.org</a>> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">beanz created this revision.<br class="">
beanz added reviewers: zaks.anna, kubabrecka, bogner.<br class="">
beanz added a subscriber: cfe-commits.<br class="">
<br class="">
The -nodefaultlibs and -nostdlib flags suppress all the runtime libraries that the driver puts on the link line. This feels wrong. If a user specifies "-fsanitize=<blah>" I think it is expected that the sanitizer library would be included on the link line.<br class="">
<br class="">
<a href="https://reviews.llvm.org/D24048" target="_blank" class="">https://reviews.llvm.org/<wbr class="">D24048</a><br class="">
<br class="">
Files:<br class="">
lib/Driver/ToolChains.cpp<br class="">
lib/Driver/ToolChains.h<br class="">
lib/Driver/Tools.cpp<br class="">
<br class="">
Index: lib/Driver/Tools.cpp<br class="">
==============================<wbr class="">==============================<wbr class="">=======<br class="">
--- lib/Driver/Tools.cpp<br class="">
+++ lib/Driver/Tools.cpp<br class="">
@@ -8032,6 +8032,8 @@<br class="">
<br class="">
// Let the tool chain choose which runtime library to link.<br class="">
getMachOToolChain().<wbr class="">AddLinkRuntimeLibArgs(Args, CmdArgs);<br class="">
+ } else {<br class="">
+ getMachOToolChain().<wbr class="">AddLinkSanitizerLibArgs(Args, CmdArgs);<br class="">
}<br class="">
<br class="">
if (!Args.hasArg(options::OPT_<wbr class="">nostdlib, options::OPT_nostartfiles)) {<br class="">
Index: lib/Driver/ToolChains.h<br class="">
==============================<wbr class="">==============================<wbr class="">=======<br class="">
--- lib/Driver/ToolChains.h<br class="">
+++ lib/Driver/ToolChains.h<br class="">
@@ -282,6 +282,10 @@<br class="">
virtual void AddLinkRuntimeLibArgs(const llvm::opt::ArgList &Args,<br class="">
llvm::opt::ArgStringList &CmdArgs) const;<br class="">
<br class="">
+ virtual void<br class="">
+ AddLinkSanitizerLibArgs(const llvm::opt::ArgList &Args,<br class="">
+ llvm::opt::ArgStringList &CmdArgs) const {}<br class="">
+<br class="">
virtual void addStartObjectFileArgs(const llvm::opt::ArgList &Args,<br class="">
llvm::opt::ArgStringList &CmdArgs) const {<br class="">
}<br class="">
@@ -571,6 +575,10 @@<br class="">
<br class="">
RuntimeLibType GetRuntimeLibType(const llvm::opt::ArgList &Args) const override;<br class="">
<br class="">
+ void<br class="">
+ AddLinkSanitizerLibArgs(const llvm::opt::ArgList &Args,<br class="">
+ llvm::opt::ArgStringList &CmdArgs) const override;<br class="">
+<br class="">
void AddLinkRuntimeLibArgs(const llvm::opt::ArgList &Args,<br class="">
llvm::opt::ArgStringList &CmdArgs) const override;<br class="">
<br class="">
Index: lib/Driver/ToolChains.cpp<br class="">
==============================<wbr class="">==============================<wbr class="">=======<br class="">
--- lib/Driver/ToolChains.cpp<br class="">
+++ lib/Driver/ToolChains.cpp<br class="">
@@ -425,22 +425,7 @@<br class="">
return;<br class="">
}<br class="">
<br class="">
- const SanitizerArgs &Sanitize = getSanitizerArgs();<br class="">
- if (Sanitize.needsAsanRt())<br class="">
- AddLinkSanitizerLibArgs(Args, CmdArgs, "asan");<br class="">
- if (Sanitize.needsUbsanRt())<br class="">
- AddLinkSanitizerLibArgs(Args, CmdArgs, "ubsan");<br class="">
- if (Sanitize.needsTsanRt())<br class="">
- AddLinkSanitizerLibArgs(Args, CmdArgs, "tsan");<br class="">
- if (Sanitize.needsStatsRt()) {<br class="">
- StringRef OS = isTargetMacOS() ? "osx" : "iossim";<br class="">
- AddLinkRuntimeLib(Args, CmdArgs,<br class="">
- (Twine("libclang_rt.stats_<wbr class="">client_") + OS + ".a").str(),<br class="">
- /*AlwaysLink=*/true);<br class="">
- AddLinkSanitizerLibArgs(Args, CmdArgs, "stats");<br class="">
- }<br class="">
- if (Sanitize.needsEsanRt())<br class="">
- AddLinkSanitizerLibArgs(Args, CmdArgs, "esan");<br class="">
+ AddLinkSanitizerLibArgs(Args, CmdArgs);<br class="">
<br class="">
// Otherwise link libSystem, then the dynamic runtime library, and finally any<br class="">
// target specific static runtime library.<br class="">
@@ -495,6 +480,26 @@<br class="">
}<br class="">
}<br class="">
<br class="">
+void DarwinClang::<wbr class="">AddLinkSanitizerLibArgs(<br class="">
+ const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs) const {<br class="">
+ const SanitizerArgs &Sanitize = getSanitizerArgs();<br class="">
+ if (Sanitize.needsAsanRt())<br class="">
+ AddLinkSanitizerLibArgs(Args, CmdArgs, "asan");<br class="">
+ if (Sanitize.needsUbsanRt())<br class="">
+ AddLinkSanitizerLibArgs(Args, CmdArgs, "ubsan");<br class="">
+ if (Sanitize.needsTsanRt())<br class="">
+ AddLinkSanitizerLibArgs(Args, CmdArgs, "tsan");<br class="">
+ if (Sanitize.needsStatsRt()) {<br class="">
+ StringRef OS = isTargetMacOS() ? "osx" : "iossim";<br class="">
+ AddLinkRuntimeLib(Args, CmdArgs,<br class="">
+ (Twine("libclang_rt.stats_<wbr class="">client_") + OS + ".a").str(),<br class="">
+ /*AlwaysLink=*/true);<br class="">
+ AddLinkSanitizerLibArgs(Args, CmdArgs, "stats");<br class="">
+ }<br class="">
+ if (Sanitize.needsEsanRt())<br class="">
+ AddLinkSanitizerLibArgs(Args, CmdArgs, "esan");<br class="">
+}<br class="">
+<br class="">
void Darwin::AddDeploymentTarget(<wbr class="">DerivedArgList &Args) const {<br class="">
const OptTable &Opts = getDriver().getOpts();<br class="">
<br class="">
<br class="">
<br class="">
</blockquote></div>
</div></blockquote></div><br class=""></div></body></html>