summaryrefslogtreecommitdiffstats
path: root/lib/Driver/ToolChains/Darwin.cpp
diff options
context:
space:
mode:
authorReid Kleckner <rnk@google.com>2018-07-31 21:57:35 +0000
committerReid Kleckner <rnk@google.com>2018-07-31 21:57:35 +0000
commit13ac9b27be07334eac62b132de08677fa50b44e1 (patch)
treec1630a8728111c18d54621175732d6effe5b6227 /lib/Driver/ToolChains/Darwin.cpp
parent40dbd9511153ecdca7c039efea509af754457dd5 (diff)
Revert r337635 "[Driver] Sanitizer support based on runtime library presence"
This change causes issues with distributed build systems, which may only have compiler binaries without any runtime libraries. See discussion about this on https://reviews.llvm.org/D15225. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@338444 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Driver/ToolChains/Darwin.cpp')
-rw-r--r--lib/Driver/ToolChains/Darwin.cpp73
1 files changed, 22 insertions, 51 deletions
diff --git a/lib/Driver/ToolChains/Darwin.cpp b/lib/Driver/ToolChains/Darwin.cpp
index 95ec8d64c2..9205dd52de 100644
--- a/lib/Driver/ToolChains/Darwin.cpp
+++ b/lib/Driver/ToolChains/Darwin.cpp
@@ -916,26 +916,13 @@ unsigned DarwinClang::GetDefaultDwarfVersion() const {
return 4;
}
-SmallString<128> MachO::runtimeLibDir(bool IsEmbedded) const {
- SmallString<128> Dir(getDriver().ResourceDir);
- llvm::sys::path::append(
- Dir, "lib", IsEmbedded ? "macho_embedded" : "darwin");
- return Dir;
-}
-
-std::string Darwin::getFileNameForSanitizerLib(StringRef SanitizerName,
- bool Shared) const {
- return (Twine("libclang_rt.") + SanitizerName + "_" +
- getOSLibraryNameSuffix() +
- (Shared ? "_dynamic.dylib" : ".a")).str();
-
-}
-
void MachO::AddLinkRuntimeLib(const ArgList &Args, ArgStringList &CmdArgs,
StringRef DarwinLibName,
RuntimeLinkOptions Opts) const {
+ SmallString<128> Dir(getDriver().ResourceDir);
+ llvm::sys::path::append(
+ Dir, "lib", (Opts & RLO_IsEmbedded) ? "macho_embedded" : "darwin");
- SmallString<128> Dir = runtimeLibDir(Opts & RLO_IsEmbedded);
SmallString<128> P(Dir);
llvm::sys::path::append(P, DarwinLibName);
@@ -1055,9 +1042,12 @@ void DarwinClang::AddLinkSanitizerLibArgs(const ArgList &Args,
StringRef Sanitizer,
bool Shared) const {
auto RLO = RuntimeLinkOptions(RLO_AlwaysLink | (Shared ? RLO_AddRPath : 0U));
- std::string SanitizerRelFilename =
- getFileNameForSanitizerLib(Sanitizer, Shared);
- AddLinkRuntimeLib(Args, CmdArgs, SanitizerRelFilename, RLO);
+ AddLinkRuntimeLib(Args, CmdArgs,
+ (Twine("libclang_rt.") + Sanitizer + "_" +
+ getOSLibraryNameSuffix() +
+ (Shared ? "_dynamic.dylib" : ".a"))
+ .str(),
+ RLO);
}
ToolChain::RuntimeLibType DarwinClang::GetRuntimeLibType(
@@ -2295,43 +2285,24 @@ void Darwin::CheckObjCARC() const {
SanitizerMask Darwin::getSupportedSanitizers() const {
const bool IsX86_64 = getTriple().getArch() == llvm::Triple::x86_64;
SanitizerMask Res = ToolChain::getSupportedSanitizers();
-
- {
- using namespace SanitizerKind;
- assert(!(Res & (Address | Leak | Fuzzer | FuzzerNoLink | Thread)) &&
- "Sanitizer is already registered as supported");
- }
-
- if (sanitizerRuntimeExists("asan"))
- Res |= SanitizerKind::Address;
- if (sanitizerRuntimeExists("lsan"))
- Res |= SanitizerKind::Leak;
- if (sanitizerRuntimeExists("fuzzer", /*Shared=*/false)) {
- Res |= SanitizerKind::Fuzzer;
- Res |= SanitizerKind::FuzzerNoLink;
- }
+ Res |= SanitizerKind::Address;
+ Res |= SanitizerKind::Leak;
+ Res |= SanitizerKind::Fuzzer;
+ Res |= SanitizerKind::FuzzerNoLink;
Res |= SanitizerKind::Function;
- if (isTargetMacOS() && !isMacosxVersionLT(10, 9))
- Res |= SanitizerKind::Vptr;
- if (isTargetMacOS())
+ if (isTargetMacOS()) {
+ if (!isMacosxVersionLT(10, 9))
+ Res |= SanitizerKind::Vptr;
Res |= SanitizerKind::SafeStack;
-
- if (sanitizerRuntimeExists("tsan") && IsX86_64 &&
- (isTargetMacOS() || isTargetIOSSimulator() || isTargetTvOSSimulator()))
- Res |= SanitizerKind::Thread;
-
+ if (IsX86_64)
+ Res |= SanitizerKind::Thread;
+ } else if (isTargetIOSSimulator() || isTargetTvOSSimulator()) {
+ if (IsX86_64)
+ Res |= SanitizerKind::Thread;
+ }
return Res;
}
void Darwin::printVerboseInfo(raw_ostream &OS) const {
CudaInstallation.print(OS);
}
-
-bool Darwin::sanitizerRuntimeExists(StringRef SanitizerName,
- bool Shared) const {
- std::string RelName = getFileNameForSanitizerLib(SanitizerName, Shared);
- SmallString<128> Dir = runtimeLibDir();
- SmallString<128> AbsName(Dir);
- llvm::sys::path::append(AbsName, RelName);
- return getVFS().exists(AbsName);
-}