[ASan] Fixup for r208610: link in asan_cxx library on Windows

llvm-svn: 208625
This commit is contained in:
Alexey Samsonov 2014-05-12 20:20:20 +00:00
parent fb1d83a978
commit 6424e02fb2
2 changed files with 17 additions and 8 deletions

View File

@ -7433,6 +7433,15 @@ void dragonfly::Link::ConstructJob(Compilation &C, const JobAction &JA,
C.addCommand(new Command(JA, *this, Exec, CmdArgs));
}
static void addSanitizerRTWindows(const ToolChain &TC, const ArgList &Args,
ArgStringList &CmdArgs,
const StringRef RTName) {
SmallString<128> LibSanitizer(getCompilerRTLibDir(TC));
llvm::sys::path::append(LibSanitizer,
Twine("clang_rt.") + RTName + ".lib");
CmdArgs.push_back(Args.MakeArgString(LibSanitizer));
}
void visualstudio::Link::ConstructJob(Compilation &C, const JobAction &JA,
const InputInfo &Output,
const InputInfoList &Inputs,
@ -7473,15 +7482,14 @@ void visualstudio::Link::ConstructJob(Compilation &C, const JobAction &JA,
if (getToolChain().getSanitizerArgs().needsAsanRt()) {
CmdArgs.push_back(Args.MakeArgString("-debug"));
CmdArgs.push_back(Args.MakeArgString("-incremental:no"));
SmallString<128> LibSanitizer(getToolChain().getDriver().ResourceDir);
llvm::sys::path::append(LibSanitizer, "lib", "windows");
if (DLL) {
llvm::sys::path::append(LibSanitizer, "clang_rt.asan_dll_thunk-i386.lib");
} else {
llvm::sys::path::append(LibSanitizer, "clang_rt.asan-i386.lib");
}
// FIXME: Handle 64-bit.
CmdArgs.push_back(Args.MakeArgString(LibSanitizer));
if (DLL) {
addSanitizerRTWindows(getToolChain(), Args, CmdArgs,
"asan_dll_thunk-i386");
} else {
addSanitizerRTWindows(getToolChain(), Args, CmdArgs, "asan-i386");
addSanitizerRTWindows(getToolChain(), Args, CmdArgs, "asan_cxx-i386");
}
}
Args.AddAllArgValues(CmdArgs, options::OPT_l);

View File

@ -16,6 +16,7 @@
// ASAN: "-debug"
// ASAN: "-incremental:no"
// ASAN: "{{.*}}clang_rt.asan-i386.lib"
// ASAN: "{{.*}}clang_rt.asan_cxx-i386.lib"
// ASAN: "{{.*}}cl-link{{.*}}.obj"
// RUN: %clang_cl /LD -### /Tc%s 2>&1 | FileCheck --check-prefix=DLL %s