summaryrefslogtreecommitdiffstats
path: root/clang/lib/Driver
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
commitacbbf4bf78727097e7f60fa235a9daf8e6c08367 (patch)
tree7003a6d9a7893370d9d0485a682d174093ad2bbd /clang/lib/Driver
parent87b4b8f7b437ab39f055bf4d740f0ca906aa122d (diff)
downloadbcm5719-llvm-acbbf4bf78727097e7f60fa235a9daf8e6c08367.tar.gz
bcm5719-llvm-acbbf4bf78727097e7f60fa235a9daf8e6c08367.zip
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. llvm-svn: 338444
Diffstat (limited to 'clang/lib/Driver')
-rw-r--r--clang/lib/Driver/ToolChains/Darwin.cpp73
-rw-r--r--clang/lib/Driver/ToolChains/Darwin.h15
2 files changed, 23 insertions, 65 deletions
diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp b/clang/lib/Driver/ToolChains/Darwin.cpp
index 95ec8d64c2c..9205dd52de0 100644
--- a/clang/lib/Driver/ToolChains/Darwin.cpp
+++ b/clang/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);
-}
diff --git a/clang/lib/Driver/ToolChains/Darwin.h b/clang/lib/Driver/ToolChains/Darwin.h
index eee6e966718..87d553bd7e0 100644
--- a/clang/lib/Driver/ToolChains/Darwin.h
+++ b/clang/lib/Driver/ToolChains/Darwin.h
@@ -130,9 +130,6 @@ protected:
Tool *buildLinker() const override;
Tool *getTool(Action::ActionClass AC) const override;
- /// \return Directory to find the runtime library in.
- SmallString<128> runtimeLibDir(bool IsEmbedded=false) const;
-
private:
mutable std::unique_ptr<tools::darwin::Lipo> Lipo;
mutable std::unique_ptr<tools::darwin::Dsymutil> Dsymutil;
@@ -254,6 +251,7 @@ public:
GetExceptionModel(const llvm::opt::ArgList &Args) const override {
return llvm::ExceptionHandling::None;
}
+
/// }
};
@@ -422,11 +420,6 @@ protected:
StringRef getPlatformFamily() const;
StringRef getOSLibraryNameSuffix() const;
- /// \return Relative path to the filename for the library
- /// containing the sanitizer {@code SanitizerName}.
- std::string getFileNameForSanitizerLib(StringRef SanitizerName,
- bool Shared = true) const;
-
public:
static StringRef getSDKName(StringRef isysroot);
@@ -480,12 +473,6 @@ public:
SanitizerMask getSupportedSanitizers() const override;
void printVerboseInfo(raw_ostream &OS) const override;
-
-private:
- /// \return Whether the runtime corresponding to the given
- /// sanitizer exists in the toolchain.
- bool sanitizerRuntimeExists(StringRef SanitizerName,
- bool Shared = true) const;
};
/// DarwinClang - The Darwin toolchain used by Clang.
OpenPOWER on IntegriCloud