diff options
| author | Reid Kleckner <rnk@google.com> | 2018-07-31 21:57:35 +0000 |
|---|---|---|
| committer | Reid Kleckner <rnk@google.com> | 2018-07-31 21:57:35 +0000 |
| commit | acbbf4bf78727097e7f60fa235a9daf8e6c08367 (patch) | |
| tree | 7003a6d9a7893370d9d0485a682d174093ad2bbd /clang/lib/Driver | |
| parent | 87b4b8f7b437ab39f055bf4d740f0ca906aa122d (diff) | |
| download | bcm5719-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.cpp | 73 | ||||
| -rw-r--r-- | clang/lib/Driver/ToolChains/Darwin.h | 15 |
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. |

