diff options
| author | Alexey Samsonov <samsonov@google.com> | 2014-05-12 18:39:51 +0000 |
|---|---|---|
| committer | Alexey Samsonov <samsonov@google.com> | 2014-05-12 18:39:51 +0000 |
| commit | b01f936ffe14b79580dd164e04bddb23353a2ecb (patch) | |
| tree | c347e934d574830a2c7ec2acd5021c095f1128c5 /clang/lib/Driver/Tools.cpp | |
| parent | 1866b588851ad8964435b4c3195c48353e12cc75 (diff) | |
| download | bcm5719-llvm-b01f936ffe14b79580dd164e04bddb23353a2ecb.tar.gz bcm5719-llvm-b01f936ffe14b79580dd164e04bddb23353a2ecb.zip | |
[ASan] Split static ASan runtime in two parts: asan and asan_cxx.
asan_cxx containts replacements for new/delete operators, and should
only be linked in C++ mode. We plan to start building this part
with exception support to make new more standard-compliant.
See https://code.google.com/p/address-sanitizer/issues/detail?id=295
for more details.
llvm-svn: 208610
Diffstat (limited to 'clang/lib/Driver/Tools.cpp')
| -rw-r--r-- | clang/lib/Driver/Tools.cpp | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index ec870aff155..e2bb0b12cd4 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -1972,7 +1972,7 @@ static void addSanitizerRTLinkFlags(const ToolChain &TC, const ArgList &Args, /// If AddressSanitizer is enabled, add appropriate linker flags (Linux). /// This needs to be called before we add the C run-time (malloc, etc). static void addAsanRT(const ToolChain &TC, const ArgList &Args, - ArgStringList &CmdArgs, bool Shared) { + ArgStringList &CmdArgs, bool Shared, bool IsCXX) { if (Shared) { // Link dynamic runtime if necessary. SmallString<128> LibSanitizer = @@ -1985,10 +1985,15 @@ static void addAsanRT(const ToolChain &TC, const ArgList &Args, (TC.getTriple().getEnvironment() == llvm::Triple::Android)) return; - const char *LibAsanStaticPart = Shared ? "asan-preinit" : "asan"; - addSanitizerRTLinkFlags(TC, Args, CmdArgs, LibAsanStaticPart, - /*BeforeLibStdCXX*/ true, /*ExportSymbols*/ !Shared, - /*LinkDeps*/ !Shared); + if (Shared) { + addSanitizerRTLinkFlags(TC, Args, CmdArgs, "asan-preinit", + /*BeforeLibStdCXX*/ true, /*ExportSymbols*/ false, + /*LinkDeps*/ false); + } else { + addSanitizerRTLinkFlags(TC, Args, CmdArgs, "asan", true); + if (IsCXX) + addSanitizerRTLinkFlags(TC, Args, CmdArgs, "asan_cxx", true); + } } /// If ThreadSanitizer is enabled, add appropriate linker flags (Linux). @@ -2049,7 +2054,7 @@ static void addSanitizerRuntimes(const ToolChain &TC, const ArgList &Args, Sanitize.needsAsanRt() || Sanitize.needsTsanRt() || Sanitize.needsMsanRt() || Sanitize.needsLsanRt()); if (Sanitize.needsAsanRt()) - addAsanRT(TC, Args, CmdArgs, Sanitize.needsSharedAsanRt()); + addAsanRT(TC, Args, CmdArgs, Sanitize.needsSharedAsanRt(), D.CCCIsCXX()); if (Sanitize.needsTsanRt()) addTsanRT(TC, Args, CmdArgs); if (Sanitize.needsMsanRt()) |

