summaryrefslogtreecommitdiff
path: root/lib/Driver/ToolChains/Darwin.cpp
diff options
context:
space:
mode:
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 95ec8d64c2c7..9205dd52de0b 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);
-}