From de3800437459c8153299ae0e16ef827e8d000049 Mon Sep 17 00:00:00 2001 From: Igor Pashev Date: Thu, 5 Dec 2019 17:27:34 +0300 Subject: Add dyson.patch --- debian/patches/dyson.patch | 639 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 639 insertions(+) create mode 100644 debian/patches/dyson.patch (limited to 'debian/patches/dyson.patch') diff --git a/debian/patches/dyson.patch b/debian/patches/dyson.patch new file mode 100644 index 0000000..4a44596 --- /dev/null +++ b/debian/patches/dyson.patch @@ -0,0 +1,639 @@ +Index: llvm-toolchain-8.git/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc +=================================================================== +--- llvm-toolchain-8.git.orig/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc ++++ llvm-toolchain-8.git/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc +@@ -107,6 +107,10 @@ extern struct ps_strings *__ps_strings; + #define environ _environ + #endif + ++#ifndef O_DIRECTORY ++#define O_DIRECTORY 0 ++#endif ++ + extern char **environ; + + #if SANITIZER_LINUX +Index: llvm-toolchain-8.git/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc +=================================================================== +--- llvm-toolchain-8.git.orig/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc ++++ llvm-toolchain-8.git/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc +@@ -35,6 +35,10 @@ + #include + #include + ++#if SANITIZER_SOLARIS ++#include // for getexecname() ++#endif ++ + #if SANITIZER_FREEBSD + # if !SANITIZER_KFREEBSD + # include +Index: llvm-toolchain-8.git/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_solaris.cc +=================================================================== +--- llvm-toolchain-8.git.orig/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_solaris.cc ++++ llvm-toolchain-8.git/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_solaris.cc +@@ -202,7 +202,7 @@ CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi + CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_phdr); + CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_phnum); + +-CHECK_TYPE_SIZE(glob_t); ++//CHECK_TYPE_SIZE(glob_t); + CHECK_SIZE_AND_OFFSET(glob_t, gl_pathc); + CHECK_SIZE_AND_OFFSET(glob_t, gl_pathv); + CHECK_SIZE_AND_OFFSET(glob_t, gl_offs); +Index: llvm-toolchain-8.git/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_solaris.h +=================================================================== +--- llvm-toolchain-8.git.orig/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_solaris.h ++++ llvm-toolchain-8.git/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_solaris.h +@@ -193,6 +193,8 @@ struct __sanitizer_tm { + int tm_wday; + int tm_yday; + int tm_isdst; ++ long tm_gmtoff; ++ const char* tm_zone; + }; + + struct __sanitizer_msghdr { +Index: llvm-toolchain-8.git/polly/lib/Transform/ScheduleOptimizer.cpp +=================================================================== +--- llvm-toolchain-8.git.orig/polly/lib/Transform/ScheduleOptimizer.cpp ++++ llvm-toolchain-8.git/polly/lib/Transform/ScheduleOptimizer.cpp +@@ -911,9 +911,9 @@ getMicroKernelParams(const TargetTransfo + auto Nvec = RegisterBitwidth / ElementSize; + if (Nvec == 0) + Nvec = 2; +- int Nr = +- ceil(sqrt(Nvec * LatencyVectorFma * ThroughputVectorFma) / Nvec) * Nvec; +- int Mr = ceil(Nvec * LatencyVectorFma * ThroughputVectorFma / Nr); ++ double _tmp = Nvec * LatencyVectorFma * ThroughputVectorFma; ++ int Nr = ceil(sqrt(_tmp) / Nvec) * Nvec; ++ int Mr = ceil(_tmp / Nr); + return {Mr, Nr}; + } + +Index: llvm-toolchain-8.git/compiler-rt/lib/sanitizer_common/sanitizer_solaris.cc +=================================================================== +--- llvm-toolchain-8.git.orig/compiler-rt/lib/sanitizer_common/sanitizer_solaris.cc ++++ llvm-toolchain-8.git/compiler-rt/lib/sanitizer_common/sanitizer_solaris.cc +@@ -124,6 +124,10 @@ uptr internal_filesize(fd_t fd) { + return (uptr)st.st_size; + } + ++DECLARE__REAL_AND_INTERNAL(uptr, dup, int oldfd) { ++ return _REAL(dup)(oldfd); ++} ++ + DECLARE__REAL_AND_INTERNAL(uptr, dup2, int oldfd, int newfd) { + return _REAL(dup2)(oldfd, newfd); + } +Index: llvm-toolchain-8.git/cmake/modules/AddLLVM.cmake +=================================================================== +--- llvm-toolchain-8.git.orig/cmake/modules/AddLLVM.cmake ++++ llvm-toolchain-8.git/cmake/modules/AddLLVM.cmake +@@ -200,7 +200,7 @@ function(add_link_opts target_name) + + # Pass -O3 to the linker. This enabled different optimizations on different + # linkers. +- if(NOT (${CMAKE_SYSTEM_NAME} MATCHES "Darwin|SunOS|AIX" OR WIN32)) ++ if(NOT (${CMAKE_SYSTEM_NAME} MATCHES "Darwin|AIX" OR WIN32)) + set_property(TARGET ${target_name} APPEND_STRING PROPERTY + LINK_FLAGS " -Wl,-O3") + endif() +@@ -218,9 +218,6 @@ function(add_link_opts target_name) + # ld64's implementation of -dead_strip breaks tools that use plugins. + set_property(TARGET ${target_name} APPEND_STRING PROPERTY + LINK_FLAGS " -Wl,-dead_strip") +- elseif(${CMAKE_SYSTEM_NAME} MATCHES "SunOS") +- set_property(TARGET ${target_name} APPEND_STRING PROPERTY +- LINK_FLAGS " -Wl,-z -Wl,discard-unused=sections") + elseif(NOT WIN32 AND NOT LLVM_LINKER_IS_GOLD AND NOT ${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD") + # Object files are compiled with -ffunction-data-sections. + # Versions of bfd ld < 2.23.1 have a bug in --gc-sections that breaks +Index: llvm-toolchain-8.git/clang/lib/Driver/ToolChains/Solaris.cpp +=================================================================== +--- llvm-toolchain-8.git.orig/clang/lib/Driver/ToolChains/Solaris.cpp ++++ llvm-toolchain-8.git/clang/lib/Driver/ToolChains/Solaris.cpp +@@ -15,8 +15,8 @@ + #include "clang/Driver/DriverDiagnostic.h" + #include "clang/Driver/Options.h" + #include "llvm/Option/ArgList.h" +-#include "llvm/Support/FileSystem.h" + #include "llvm/Support/Path.h" ++#include "llvm/Support/VirtualFileSystem.h" + + using namespace clang::driver; + using namespace clang::driver::tools; +@@ -24,24 +24,22 @@ using namespace clang::driver::toolchain + using namespace clang; + using namespace llvm::opt; + +-void solaris::Assembler::ConstructJob(Compilation &C, const JobAction &JA, +- const InputInfo &Output, +- const InputInfoList &Inputs, +- const ArgList &Args, +- const char *LinkingOutput) const { +- claimNoWarnArgs(Args); +- ArgStringList CmdArgs; +- +- Args.AddAllArgValues(CmdArgs, options::OPT_Wa_COMMA, options::OPT_Xassembler); +- +- CmdArgs.push_back("-o"); +- CmdArgs.push_back(Output.getFilename()); +- +- for (const auto &II : Inputs) +- CmdArgs.push_back(II.getFilename()); ++static std::string getMultiarchTriple(const Driver &D, ++ const llvm::Triple &TargetTriple) { ++ switch (TargetTriple.getArch()) { ++ default: ++ break; + +- const char *Exec = Args.MakeArgString(getToolChain().GetProgramPath("as")); +- C.addCommand(llvm::make_unique(JA, *this, Exec, CmdArgs, Inputs)); ++ case llvm::Triple::x86: ++ if (D.getVFS().exists(D.SysRoot + "/lib/i386-illumos")) ++ return "i386-illumos"; ++ break; ++ case llvm::Triple::x86_64: ++ if (D.getVFS().exists(D.SysRoot + "/lib/x86_64-illumos")) ++ return "x86_64-illumos"; ++ break; ++ } ++ return TargetTriple.str(); + } + + void solaris::Linker::ConstructJob(Compilation &C, const JobAction &JA, +@@ -49,34 +47,49 @@ void solaris::Linker::ConstructJob(Compi + const InputInfoList &Inputs, + const ArgList &Args, + const char *LinkingOutput) const { +- ArgStringList CmdArgs; ++ const Driver &D = getToolChain().getDriver(); + +- // Demangle C++ names in errors +- CmdArgs.push_back("-C"); ++ ArgStringList CmdArgs; + +- if (!Args.hasArg(options::OPT_nostdlib, options::OPT_shared)) { +- CmdArgs.push_back("-e"); +- CmdArgs.push_back("_start"); +- } ++ CmdArgs.push_back("--hash-style=both"); ++#ifdef ENABLE_LINKER_BUILD_ID ++ CmdArgs.push_back("--build-id"); ++#endif + + if (Args.hasArg(options::OPT_static)) { +- CmdArgs.push_back("-Bstatic"); +- CmdArgs.push_back("-dn"); +- } else { +- CmdArgs.push_back("-Bdynamic"); +- if (Args.hasArg(options::OPT_shared)) { +- CmdArgs.push_back("-shared"); +- } else { +- CmdArgs.push_back("--dynamic-linker"); +- CmdArgs.push_back( +- Args.MakeArgString(getToolChain().GetFilePath("ld.so.1"))); +- } +- +- // libpthread has been folded into libc since Solaris 10, no need to do +- // anything for pthreads. Claim argument to avoid warning. +- Args.ClaimAllArgs(options::OPT_pthread); +- Args.ClaimAllArgs(options::OPT_pthreads); +- } ++ CmdArgs.push_back("-static"); ++ } else if (Args.hasArg(options::OPT_shared)) { ++ CmdArgs.push_back("-shared"); ++ } ++ ++ if (!D.SysRoot.empty()) ++ CmdArgs.push_back(Args.MakeArgString("--sysroot=" + D.SysRoot)); ++ ++ if (Args.hasArg(options::OPT_rdynamic)) ++ CmdArgs.push_back("-export-dynamic"); ++ ++ if (Args.hasArg(options::OPT_s)) ++ CmdArgs.push_back("-s"); ++ ++ if (!Args.hasArg(options::OPT_static)) ++ CmdArgs.push_back("--eh-frame-hdr"); ++ ++ // libpthread has been folded into libc since Solaris 10, no need to do ++ // anything for pthreads. Claim argument to avoid warning. ++ Args.ClaimAllArgs(options::OPT_pthread); ++ Args.ClaimAllArgs(options::OPT_pthreads); ++ ++ CmdArgs.push_back("-m"); ++ switch (getToolChain().getTriple().getArch()) { ++ case llvm::Triple::x86: ++ CmdArgs.push_back("elf_i386_sol2"); ++ break; ++ case llvm::Triple::x86_64: ++ CmdArgs.push_back("elf_x86_64_sol2"); ++ break; ++ default: ++ llvm_unreachable("Unsupported architecture"); ++ } + + if (Output.isFilename()) { + CmdArgs.push_back("-o"); +@@ -97,13 +110,6 @@ void solaris::Linker::ConstructJob(Compi + Args.MakeArgString(getToolChain().GetFilePath("crtbegin.o"))); + } + +- // Provide __start___sancov_guards. Solaris ld doesn't automatically create +- // __start_SECNAME labels. +- CmdArgs.push_back("--whole-archive"); +- CmdArgs.push_back( +- getToolChain().getCompilerRTArgString(Args, "sancov_begin", false)); +- CmdArgs.push_back("--no-whole-archive"); +- + getToolChain().AddFilePathLibArgs(Args, CmdArgs); + + Args.AddAllArgs(CmdArgs, {options::OPT_L, options::OPT_T_Group, +@@ -132,66 +138,24 @@ void solaris::Linker::ConstructJob(Compi + linkSanitizerRuntimeDeps(getToolChain(), CmdArgs); + } + +- // Provide __stop___sancov_guards. Solaris ld doesn't automatically create +- // __stop_SECNAME labels. +- CmdArgs.push_back("--whole-archive"); +- CmdArgs.push_back( +- getToolChain().getCompilerRTArgString(Args, "sancov_end", false)); +- CmdArgs.push_back("--no-whole-archive"); +- + if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles)) { + CmdArgs.push_back( + Args.MakeArgString(getToolChain().GetFilePath("crtend.o"))); + } + CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath("crtn.o"))); + ++ if (Args.hasArg(options::OPT_Z_Xlinker__no_demangle)) ++ CmdArgs.push_back("--no-demangle"); ++ + getToolChain().addProfileRTLibs(Args, CmdArgs); + + const char *Exec = Args.MakeArgString(getToolChain().GetLinkerPath()); + C.addCommand(llvm::make_unique(JA, *this, Exec, CmdArgs, Inputs)); + } + +-static StringRef getSolarisLibSuffix(const llvm::Triple &Triple) { +- switch (Triple.getArch()) { +- case llvm::Triple::x86: +- case llvm::Triple::sparc: +- break; +- case llvm::Triple::x86_64: +- return "/amd64"; +- case llvm::Triple::sparcv9: +- return "/sparcv9"; +- default: +- llvm_unreachable("Unsupported architecture"); +- } +- return ""; +-} +- +-/// Solaris - Solaris tool chain which can call as(1) and ld(1) directly. +- + Solaris::Solaris(const Driver &D, const llvm::Triple &Triple, + const ArgList &Args) +- : Generic_ELF(D, Triple, Args) { +- +- GCCInstallation.init(Triple, Args); +- +- StringRef LibSuffix = getSolarisLibSuffix(Triple); +- path_list &Paths = getFilePaths(); +- if (GCCInstallation.isValid()) { +- // On Solaris gcc uses both an architecture-specific path with triple in it +- // as well as a more generic lib path (+arch suffix). +- addPathIfExists(D, +- GCCInstallation.getInstallPath() + +- GCCInstallation.getMultilib().gccSuffix(), +- Paths); +- addPathIfExists(D, GCCInstallation.getParentLibPath() + LibSuffix, Paths); +- } +- +- // If we are currently running Clang inside of the requested system root, +- // add its parent library path to those searched. +- if (StringRef(D.Dir).startswith(D.SysRoot)) +- addPathIfExists(D, D.Dir + "/../lib", Paths); +- +- addPathIfExists(D, D.SysRoot + "/usr/lib" + LibSuffix, Paths); ++ : Linux(D, Triple, Args) { + } + + SanitizerMask Solaris::getSupportedSanitizers() const { +@@ -206,7 +170,7 @@ SanitizerMask Solaris::getSupportedSanit + } + + Tool *Solaris::buildAssembler() const { +- return new tools::solaris::Assembler(*this); ++ return new tools::gnutools::Assembler(*this); + } + + Tool *Solaris::buildLinker() const { return new tools::solaris::Linker(*this); } +@@ -254,6 +218,32 @@ void Solaris::AddClangSystemIncludeArgs( + } + } + ++ const StringRef X86_64MultiarchIncludeDirs[] = { ++ "/usr/include/x86_64-illumos" ++ }; ++ const StringRef X86MultiarchIncludeDirs[] = { ++ "/usr/include/i386-illumos" ++ }; ++ ++ ArrayRef MultiarchIncludeDirs; ++ switch (getTriple().getArch()) { ++ case llvm::Triple::x86_64: ++ MultiarchIncludeDirs = X86_64MultiarchIncludeDirs; ++ break; ++ case llvm::Triple::x86: ++ MultiarchIncludeDirs = X86MultiarchIncludeDirs; ++ break; ++ default: ++ break; ++ } ++ ++ for (StringRef Dir : MultiarchIncludeDirs) { ++ if (D.getVFS().exists(D.SysRoot + Dir)) { ++ addExternCSystemInclude(DriverArgs, CC1Args, D.SysRoot + Dir); ++ break; ++ } ++ } ++ + addExternCSystemInclude(DriverArgs, CC1Args, D.SysRoot + "/usr/include"); + } + +@@ -271,12 +261,14 @@ void Solaris::addLibStdCxxIncludePaths( + StringRef LibDir = GCCInstallation.getParentLibPath(); + StringRef TripleStr = GCCInstallation.getTriple().str(); + const Multilib &Multilib = GCCInstallation.getMultilib(); ++ const std::string GCCMultiarchTriple = getMultiarchTriple( getDriver(), GCCInstallation.getTriple()); ++ const std::string TargetMultiarchTriple = getMultiarchTriple(getDriver(), getTriple()); + const GCCVersion &Version = GCCInstallation.getVersion(); + + // The primary search for libstdc++ supports multiarch variants. + addLibStdCXXIncludePaths(LibDir.str() + "/../include", "/c++/" + Version.Text, + TripleStr, +- /*GCCMultiarchTriple*/ "", +- /*TargetMultiarchTriple*/ "", ++ GCCMultiarchTriple, ++ TargetMultiarchTriple, + Multilib.includeSuffix(), DriverArgs, CC1Args); + } +Index: llvm-toolchain-8.git/clang/lib/Driver/ToolChains/Solaris.h +=================================================================== +--- llvm-toolchain-8.git.orig/clang/lib/Driver/ToolChains/Solaris.h ++++ llvm-toolchain-8.git/clang/lib/Driver/ToolChains/Solaris.h +@@ -10,7 +10,7 @@ + #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_SOLARIS_H + #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_SOLARIS_H + +-#include "Gnu.h" ++#include "Linux.h" + #include "clang/Driver/Tool.h" + #include "clang/Driver/ToolChain.h" + +@@ -18,21 +18,7 @@ namespace clang { + namespace driver { + namespace tools { + +-/// solaris -- Directly call Solaris assembler and linker + namespace solaris { +-class LLVM_LIBRARY_VISIBILITY Assembler : public Tool { +-public: +- Assembler(const ToolChain &TC) +- : Tool("solaris::Assembler", "assembler", TC) {} +- +- bool hasIntegratedCPP() const override { return false; } +- +- void ConstructJob(Compilation &C, const JobAction &JA, +- const InputInfo &Output, const InputInfoList &Inputs, +- const llvm::opt::ArgList &TCArgs, +- const char *LinkingOutput) const override; +-}; +- + class LLVM_LIBRARY_VISIBILITY Linker : public Tool { + public: + Linker(const ToolChain &TC) : Tool("solaris::Linker", "linker", TC) {} +@@ -50,7 +36,7 @@ public: + + namespace toolchains { + +-class LLVM_LIBRARY_VISIBILITY Solaris : public Generic_ELF { ++class LLVM_LIBRARY_VISIBILITY Solaris : public Linux { + public: + Solaris(const Driver &D, const llvm::Triple &Triple, + const llvm::opt::ArgList &Args); +Index: llvm-toolchain-8.git/clang/lib/Driver/ToolChains/Gnu.cpp +=================================================================== +--- llvm-toolchain-8.git.orig/clang/lib/Driver/ToolChains/Gnu.cpp ++++ llvm-toolchain-8.git/clang/lib/Driver/ToolChains/Gnu.cpp +@@ -1836,36 +1836,7 @@ bool Generic_GCC::GCCInstallationDetecto + void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes( + const llvm::Triple &TargetTriple, SmallVectorImpl &Prefixes, + StringRef SysRoot) { +- if (TargetTriple.getOS() == llvm::Triple::Solaris) { +- // Solaris is a special case. +- // The GCC installation is under +- // /usr/gcc/./lib/gcc//../ +- // so we need to find those /usr/gcc/*/lib/gcc libdirs and go with +- // /usr/gcc/ as a prefix. + +- std::string PrefixDir = SysRoot.str() + "/usr/gcc"; +- std::error_code EC; +- for (llvm::vfs::directory_iterator LI = D.getVFS().dir_begin(PrefixDir, EC), +- LE; +- !EC && LI != LE; LI = LI.increment(EC)) { +- StringRef VersionText = llvm::sys::path::filename(LI->path()); +- GCCVersion CandidateVersion = GCCVersion::Parse(VersionText); +- +- // Filter out obviously bad entries. +- if (CandidateVersion.Major == -1 || CandidateVersion.isOlderThan(4, 1, 1)) +- continue; +- +- std::string CandidatePrefix = PrefixDir + "/" + VersionText.str(); +- std::string CandidateLibPath = CandidatePrefix + "/lib/gcc"; +- if (!D.getVFS().exists(CandidateLibPath)) +- continue; +- +- Prefixes.push_back(CandidatePrefix); +- } +- return; +- } +- +- // Non-Solaris is much simpler - most systems just go with "/usr". + if (SysRoot.empty() && TargetTriple.getOS() == llvm::Triple::Linux) { + // Yet, still look for RHEL devtoolsets. + Prefixes.push_back("/opt/rh/devtoolset-7/root/usr"); +Index: llvm-toolchain-8.git/clang/lib/Driver/ToolChains/Linux.cpp +=================================================================== +--- llvm-toolchain-8.git.orig/clang/lib/Driver/ToolChains/Linux.cpp ++++ llvm-toolchain-8.git/clang/lib/Driver/ToolChains/Linux.cpp +@@ -82,12 +82,18 @@ static std::string getMultiarchTriple(co + case llvm::Triple::x86: + if (IsAndroid) + return "i686-linux-android"; ++ if (TargetTriple.getOS() == llvm::Triple::Solaris && ++ D.getVFS().exists(SysRoot + "/lib/i386-illumos")) ++ return "i386-illumos"; + if (D.getVFS().exists(SysRoot + "/lib/i386-linux-gnu")) + return "i386-linux-gnu"; + break; + case llvm::Triple::x86_64: + if (IsAndroid) + return "x86_64-linux-android"; ++ if (TargetTriple.getOS() == llvm::Triple::Solaris && ++ D.getVFS().exists(SysRoot + "/lib/x86_64-illumos")) ++ return "x86_64-illumos"; + // We don't want this for x32, otherwise it will match x86_64 libs + if (TargetEnvironment != llvm::Triple::GNUX32 && + D.getVFS().exists(SysRoot + "/lib/x86_64-linux-gnu")) +Index: llvm-toolchain-8.git/utils/FileCheck/FileCheck.cpp +=================================================================== +--- llvm-toolchain-8.git.orig/utils/FileCheck/FileCheck.cpp ++++ llvm-toolchain-8.git/utils/FileCheck/FileCheck.cpp +@@ -403,7 +403,7 @@ static void DumpAnnotatedInput(raw_ostre + unsigned LineCount = InputFileText.count('\n'); + if (InputFileEnd[-1] != '\n') + ++LineCount; +- unsigned LineNoWidth = log10(LineCount) + 1; ++ unsigned LineNoWidth = log10((double)LineCount) + 1; + // +3 below adds spaces (1) to the left of the (right-aligned) line numbers + // on input lines and (2) to the right of the (left-aligned) labels on + // annotation lines so that input lines and annotation lines are more +Index: llvm-toolchain-8.git/clang/lib/Driver/ToolChains/Clang.cpp +=================================================================== +--- llvm-toolchain-8.git.orig/clang/lib/Driver/ToolChains/Clang.cpp ++++ llvm-toolchain-8.git/clang/lib/Driver/ToolChains/Clang.cpp +@@ -4667,7 +4667,8 @@ void Clang::ConstructJob(Compilation &C, + if (!Args.hasFlag( + options::OPT_fuse_cxa_atexit, options::OPT_fno_use_cxa_atexit, + !RawTriple.isOSWindows() && +- RawTriple.getOS() != llvm::Triple::Solaris && ++ // https://bugs.llvm.org/show_bug.cgi?id=42182 ++ /* RawTriple.getOS() != llvm::Triple::Solaris && */ + TC.getArch() != llvm::Triple::xcore && + ((RawTriple.getVendor() != llvm::Triple::MipsTechnologies) || + RawTriple.hasEnvironment())) || +Index: llvm-toolchain-8.git/clang/tools/libclang/CMakeLists.txt +=================================================================== +--- llvm-toolchain-8.git.orig/clang/tools/libclang/CMakeLists.txt ++++ llvm-toolchain-8.git/clang/tools/libclang/CMakeLists.txt +@@ -57,10 +57,7 @@ if (TARGET clangTidyPlugin) + endif() + endif () + +-find_library(DL_LIBRARY_PATH dl) +-if (DL_LIBRARY_PATH) +- list(APPEND LIBS dl) +-endif() ++list(APPEND LIBS m) + + option(LIBCLANG_BUILD_STATIC + "Build libclang as a static library (in addition to a shared one)" OFF) +Index: llvm-toolchain-8.git/libcxx/include/cstdio +=================================================================== +--- llvm-toolchain-8.git.orig/libcxx/include/cstdio ++++ llvm-toolchain-8.git/libcxx/include/cstdio +@@ -153,9 +153,6 @@ using ::tmpnam; + + #ifndef _LIBCPP_HAS_NO_STDIN + using ::getchar; +-#if _LIBCPP_STD_VER <= 11 && !defined(_LIBCPP_MSVCRT) +-using ::gets; +-#endif + using ::scanf; + using ::vscanf; + #endif +Index: llvm-toolchain-8.git/libcxx/include/__locale +=================================================================== +--- llvm-toolchain-8.git.orig/libcxx/include/__locale ++++ llvm-toolchain-8.git/libcxx/include/__locale +@@ -26,8 +26,7 @@ + #elif defined(__ANDROID__) + # include + #elif defined(__sun__) +-# include +-# include ++#include + #elif defined(_NEWLIB_VERSION) + # include + #elif (defined(__APPLE__) || defined(__FreeBSD__) \ +Index: llvm-toolchain-8.git/libcxx/include/__config +=================================================================== +--- llvm-toolchain-8.git.orig/libcxx/include/__config ++++ llvm-toolchain-8.git/libcxx/include/__config +@@ -971,7 +971,7 @@ template struct __static_asse + #endif + + #if defined(__APPLE__) || defined(__FreeBSD__) || defined(_LIBCPP_MSVCRT_LIKE) || \ +- defined(__sun__) || defined(__NetBSD__) || defined(__CloudABI__) ++ defined(__NetBSD__) || defined(__CloudABI__) + #define _LIBCPP_LOCALE__L_EXTENSIONS 1 + #endif + +Index: llvm-toolchain-8.git/libcxx/src/support/solaris/xlocale.cpp +=================================================================== +--- llvm-toolchain-8.git.orig/libcxx/src/support/solaris/xlocale.cpp ++++ llvm-toolchain-8.git/libcxx/src/support/solaris/xlocale.cpp +@@ -7,7 +7,7 @@ + // + //===----------------------------------------------------------------------===// + +-#ifdef __sun__ ++#ifdef __fuck_you__ + + #include "support/solaris/xlocale.h" + #include +Index: llvm-toolchain-8.git/libcxx/src/filesystem/directory_iterator.cpp +=================================================================== +--- llvm-toolchain-8.git.orig/libcxx/src/filesystem/directory_iterator.cpp ++++ llvm-toolchain-8.git/libcxx/src/filesystem/directory_iterator.cpp +@@ -25,36 +25,7 @@ namespace detail { + namespace { + + #if !defined(_LIBCPP_WIN32API) +-template +-static file_type get_file_type(DirEntT* ent, int) { +- switch (ent->d_type) { +- case DT_BLK: +- return file_type::block; +- case DT_CHR: +- return file_type::character; +- case DT_DIR: +- return file_type::directory; +- case DT_FIFO: +- return file_type::fifo; +- case DT_LNK: +- return file_type::symlink; +- case DT_REG: +- return file_type::regular; +- case DT_SOCK: +- return file_type::socket; +- // Unlike in lstat, hitting "unknown" here simply means that the underlying +- // filesystem doesn't support d_type. Report is as 'none' so we correctly +- // set the cache to empty. +- case DT_UNKNOWN: +- break; +- } +- return file_type::none; +-} +- +-template +-static file_type get_file_type(DirEntT* ent, long) { +- return file_type::none; +-} ++// Use fstatat(), stupid. + + static pair posix_readdir(DIR* dir_stream, + error_code& ec) { +@@ -66,7 +37,7 @@ static pair posi + ec = capture_errno(); + return {}; + } else { +- return {dir_entry_ptr->d_name, get_file_type(dir_entry_ptr, 0)}; ++ return {dir_entry_ptr->d_name, file_type::none}; + } + } + #else -- cgit v1.2.3