From ee84d957874b4d4ab372f053df4da127424d66fd Mon Sep 17 00:00:00 2001 From: Sylvestre Ledru Date: Mon, 11 Feb 2019 11:29:21 +0100 Subject: [PATCH] removed stuff merged upstream --- .../hurd/D53557-hurd-self-exe-realpath.diff | 74 ---- debian/patches/hurd/D54079-hurd-openmp.diff | 150 ------- .../D54338-hurd-libcxx-threads-build.diff | 24 - .../D54339-hurd-libcxx-threads-detection.diff | 21 - debian/patches/hurd/D54378-hurd-triple.diff | 74 ---- .../hurd/D54379-hurd-triple-clang.diff | 413 ------------------ debian/patches/hurd/hurd-cxx-paths.diff | 281 ------------ .../hurd/hurd-lib_Support_Unix_Path.inc.diff | 43 -- .../hurd-tools_llvm-shlib_CMakeLists.txt.diff | 12 - 9 files changed, 1092 deletions(-) delete mode 100644 debian/patches/hurd/D53557-hurd-self-exe-realpath.diff delete mode 100644 debian/patches/hurd/D54079-hurd-openmp.diff delete mode 100644 debian/patches/hurd/D54338-hurd-libcxx-threads-build.diff delete mode 100644 debian/patches/hurd/D54339-hurd-libcxx-threads-detection.diff delete mode 100644 debian/patches/hurd/D54378-hurd-triple.diff delete mode 100644 debian/patches/hurd/D54379-hurd-triple-clang.diff delete mode 100644 debian/patches/hurd/hurd-cxx-paths.diff delete mode 100644 debian/patches/hurd/hurd-lib_Support_Unix_Path.inc.diff delete mode 100644 debian/patches/hurd/hurd-tools_llvm-shlib_CMakeLists.txt.diff diff --git a/debian/patches/hurd/D53557-hurd-self-exe-realpath.diff b/debian/patches/hurd/D53557-hurd-self-exe-realpath.diff deleted file mode 100644 index 216b6ba9..00000000 --- a/debian/patches/hurd/D53557-hurd-self-exe-realpath.diff +++ /dev/null @@ -1,74 +0,0 @@ -r345104 | rnk | 2018-10-24 01:35:43 +0200 (mer. 24 oct. 2018) | 25 lignes - -[hurd] Make getMainExecutable get the real binary path - -On GNU/Hurd, llvm-config is returning bogus value, such as: - -$ llvm-config-6.0 --includedir -/usr/include - -while it should be: -$ llvm-config-6.0 --includedir -/usr/lib/llvm-6.0/include - -This is because getMainExecutable does not get the actual installation -path. On GNU/Hurd, /proc/self/exe is indeed a symlink to the path that -was used to start the program, and not the eventual binary file. Llvm's -getMainExecutable thus needs to run realpath over it to get the actual -place where llvm was installed (/usr/lib/llvm-6.0/bin/llvm-config), and -not /usr/bin/llvm-config-6.0. This will not change the result on Linux, -where /proc/self/exe already points to the eventual file. - -Patch by Samuel Thibault! - -While making changes here, I reformatted this block a bit to reduce -indentation and match 2 space indent style. - -Differential Revision: https://reviews.llvm.org/D53557 - -Index: llvm-toolchain-6.0-6.0.1/lib/Support/Unix/Path.inc -=================================================================== ---- llvm-toolchain-6.0-6.0.1.orig/lib/Support/Unix/Path.inc -+++ llvm-toolchain-6.0-6.0.1/lib/Support/Unix/Path.inc -@@ -191,14 +191,34 @@ std::string getMainExecutable(const char - char exe_path[MAXPATHLEN]; - StringRef aPath("/proc/self/exe"); - if (sys::fs::exists(aPath)) { -- // /proc is not always mounted under Linux (chroot for example). -- ssize_t len = readlink(aPath.str().c_str(), exe_path, sizeof(exe_path)); -- if (len >= 0) -- return std::string(exe_path, len); -+ // /proc is not always mounted under Linux (chroot for example). -+ ssize_t len = readlink(aPath.str().c_str(), exe_path, sizeof(exe_path)); -+ if (len < 0) -+ return ""; -+ -+ // Null terminate the string for realpath. readlink never null -+ // terminates its output. -+ len = std::min(len, ssize_t(sizeof(exe_path) - 1)); -+ exe_path[len] = '\0'; -+ -+ // At least on GNU/Hurd, /proc/self/exe is a symlink to the path that -+ // was used to start the program, and not the eventual binary file. -+ // We thus needs to run realpath over it to get the actual place -+ // where llvm was installed. -+#if _POSIX_VERSION >= 200112 || defined(__GLIBC__) -+ char *real_path = realpath(exe_path, NULL); -+ std::string ret = std::string(real_path); -+ free(real_path); -+ return ret; -+#else -+ char real_path[MAXPATHLEN]; -+ realpath(exe_path, real_path); -+ return std::string(real_path); -+#endif - } else { -- // Fall back to the classical detection. -- if (getprogpath(exe_path, argv0)) -- return exe_path; -+ // Fall back to the classical detection. -+ if (getprogpath(exe_path, argv0)) -+ return exe_path; - } - #elif defined(HAVE_DLFCN_H) && defined(HAVE_DLADDR) - // Use dladdr to get executable path if available. diff --git a/debian/patches/hurd/D54079-hurd-openmp.diff b/debian/patches/hurd/D54079-hurd-openmp.diff deleted file mode 100644 index aa1a16df..00000000 --- a/debian/patches/hurd/D54079-hurd-openmp.diff +++ /dev/null @@ -1,150 +0,0 @@ -r346310 | achurbanov | 2018-11-07 13:27:38 +0100 (Wed, 07 Nov 2018) | 6 lines - -Add Hurd support. - -Patch by samuel.thibault@ens-lyon.org - -Differential Revision: https://reviews.llvm.org/D54079 - -Index: llvm/openmp/runtime/src/kmp.h -=================================================================== ---- llvm/openmp/runtime/src/kmp.h.orig -+++ llvm/openmp/runtime/src/kmp.h -@@ -1048,6 +1048,10 @@ extern kmp_uint64 __kmp_now_nsec(); - /* TODO: tune for KMP_OS_NETBSD */ - #define KMP_INIT_WAIT 1024U /* initial number of spin-tests */ - #define KMP_NEXT_WAIT 512U /* susequent number of spin-tests */ -+#elif KMP_OS_HURD -+/* TODO: tune for KMP_OS_HURD */ -+#define KMP_INIT_WAIT 1024U /* initial number of spin-tests */ -+#define KMP_NEXT_WAIT 512U /* susequent number of spin-tests */ - #endif - - #if KMP_ARCH_X86 || KMP_ARCH_X86_64 -Index: llvm/openmp/runtime/src/kmp_ftn_entry.h -=================================================================== ---- llvm/openmp/runtime/src/kmp_ftn_entry.h.orig -+++ llvm/openmp/runtime/src/kmp_ftn_entry.h -@@ -369,7 +369,7 @@ int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_ - #else - int gtid; - --#if KMP_OS_DARWIN || KMP_OS_FREEBSD || KMP_OS_NETBSD -+#if KMP_OS_DARWIN || KMP_OS_FREEBSD || KMP_OS_NETBSD || KMP_OS_HURD - gtid = __kmp_entry_gtid(); - #elif KMP_OS_WINDOWS - if (!__kmp_init_parallel || -Index: llvm/openmp/runtime/src/kmp_platform.h -=================================================================== ---- llvm/openmp/runtime/src/kmp_platform.h.orig -+++ llvm/openmp/runtime/src/kmp_platform.h -@@ -22,6 +22,7 @@ - #define KMP_OS_DARWIN 0 - #define KMP_OS_WINDOWS 0 - #define KMP_OS_CNK 0 -+#define KMP_OS_HURD 0 - #define KMP_OS_UNIX 0 /* disjunction of KMP_OS_LINUX, KMP_OS_DARWIN etc. */ - - #ifdef _WIN32 -@@ -59,13 +60,18 @@ - #define KMP_OS_CNK 1 - #endif - -+#if (defined __GNU__) -+#undef KMP_OS_HURD -+#define KMP_OS_HURD 1 -+#endif -+ - #if (1 != \ - KMP_OS_LINUX + KMP_OS_FREEBSD + KMP_OS_NETBSD + KMP_OS_DARWIN + \ -- KMP_OS_WINDOWS) -+ KMP_OS_WINDOWS + KMP_OS_HURD) - #error Unknown OS - #endif - --#if KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD || KMP_OS_DARWIN -+#if KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD || KMP_OS_DARWIN || KMP_OS_HURD - #undef KMP_OS_UNIX - #define KMP_OS_UNIX 1 - #endif -Index: llvm/openmp/runtime/src/kmp_runtime.cpp -=================================================================== ---- llvm/openmp/runtime/src/kmp_runtime.cpp.orig -+++ llvm/openmp/runtime/src/kmp_runtime.cpp -@@ -7643,7 +7643,7 @@ __kmp_determine_reduction_method( - #if KMP_ARCH_X86_64 || KMP_ARCH_PPC64 || KMP_ARCH_AARCH64 || KMP_ARCH_MIPS64 - - #if KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD || KMP_OS_WINDOWS || \ -- KMP_OS_DARWIN -+ KMP_OS_DARWIN || KMP_OS_HURD - - int teamsize_cutoff = 4; - -@@ -7670,7 +7670,7 @@ __kmp_determine_reduction_method( - - #elif KMP_ARCH_X86 || KMP_ARCH_ARM || KMP_ARCH_AARCH || KMP_ARCH_MIPS - --#if KMP_OS_LINUX || KMP_OS_WINDOWS -+#if KMP_OS_LINUX || KMP_OS_WINDOWS || KMP_OS_HURD - - // basic tuning - -Index: llvm/openmp/runtime/src/thirdparty/ittnotify/ittnotify_static.c -=================================================================== ---- llvm/openmp/runtime/src/thirdparty/ittnotify/ittnotify_static.c.orig -+++ llvm/openmp/runtime/src/thirdparty/ittnotify/ittnotify_static.c -@@ -70,6 +70,10 @@ static const char* ittnotify_lib_name = - #define ANDROID_ITTNOTIFY_DEFAULT_PATH "/data/data/com.intel.vtune/intel/libittnotify.so" - #endif - -+#ifndef PATH_MAX -+#define PATH_MAX 4096 -+#endif -+ - - #ifndef LIB_VAR_NAME - #if ITT_ARCH==ITT_ARCH_IA32 || ITT_ARCH==ITT_ARCH_ARM || ITT_ARCH==ITT_ARCH_MIPS -Index: llvm/openmp/runtime/src/z_Linux_util.cpp -=================================================================== ---- llvm/openmp/runtime/src/z_Linux_util.cpp.orig -+++ llvm/openmp/runtime/src/z_Linux_util.cpp -@@ -444,8 +444,7 @@ void __kmp_terminate_thread(int gtid) { - determined exactly, FALSE if incremental refinement is necessary. */ - static kmp_int32 __kmp_set_stack_info(int gtid, kmp_info_t *th) { - int stack_data; --#if KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD -- /* Linux* OS only -- no pthread_getattr_np support on OS X* */ -+#if KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD || KMP_OS_HURD - pthread_attr_t attr; - int status; - size_t size = 0; -@@ -497,7 +496,7 @@ static void *__kmp_launch_worker(void *t - sigset_t new_set, old_set; - #endif /* KMP_BLOCK_SIGNALS */ - void *exit_val; --#if KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD -+#if KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD || KMP_OS_HURD - void *volatile padding = 0; - #endif - int gtid; -@@ -1765,7 +1764,7 @@ static int __kmp_get_xproc(void) { - - int r = 0; - --#if KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD -+#if KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD || KMP_OS_HURD - - r = sysconf(_SC_NPROCESSORS_ONLN); - -@@ -1953,9 +1952,9 @@ int __kmp_is_address_mapped(void *addr) - int found = 0; - int rc; - --#if KMP_OS_LINUX || KMP_OS_FREEBSD -+#if KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_HURD - -- /* On Linux* OS, read the /proc//maps pseudo-file to get all the address -+ /* On GNUish OSes, read the /proc//maps pseudo-file to get all the address - ranges mapped into the address space. */ - - char *name = __kmp_str_format("/proc/%d/maps", getpid()); diff --git a/debian/patches/hurd/D54338-hurd-libcxx-threads-build.diff b/debian/patches/hurd/D54338-hurd-libcxx-threads-build.diff deleted file mode 100644 index 55e5472e..00000000 --- a/debian/patches/hurd/D54338-hurd-libcxx-threads-build.diff +++ /dev/null @@ -1,24 +0,0 @@ -r346763 | ldionne | 2018-11-13 18:00:04 +0100 (Tue, 13 Nov 2018) | 5 lines - -[libcxx] GNU/Hurd uses BSD-based interfaces, but does not (and won't) provide - -Reviewed as https://reviews.llvm.org/D54338. - -Thanks to sthibaul for the patch. - -Index: llvm-toolchain-7-7/libcxx/src/thread.cpp -=================================================================== ---- llvm-toolchain-7-7.orig/libcxx/src/thread.cpp -+++ llvm-toolchain-7-7/libcxx/src/thread.cpp -@@ -19,9 +19,9 @@ - - #if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__)) - # include --# if defined(BSD) -+# if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) || defined(__APPLE__) - # include --# endif // defined(BSD) -+# endif - #endif // defined(__unix__) || (defined(__APPLE__) && defined(__MACH__)) - - #if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__)) || defined(__CloudABI__) || defined(__Fuchsia__) diff --git a/debian/patches/hurd/D54339-hurd-libcxx-threads-detection.diff b/debian/patches/hurd/D54339-hurd-libcxx-threads-detection.diff deleted file mode 100644 index d09518b6..00000000 --- a/debian/patches/hurd/D54339-hurd-libcxx-threads-detection.diff +++ /dev/null @@ -1,21 +0,0 @@ -r347347 | ldionne | 2018-11-20 22:14:05 +0100 (mar. 20 nov. 2018) | 6 lignes - -[libcxx] Fix threads detection on GNU/Hurd - -GNU/Hurd provides standard Posix threads - -Reviewed as https://reviews.llvm.org/D54339. -Thanks to Samuel Thibault for the patch. - -Index: llvm-toolchain-7-7/libcxx/include/__config -=================================================================== ---- llvm-toolchain-7-7.orig/libcxx/include/__config -+++ llvm-toolchain-7-7/libcxx/include/__config -@@ -1110,6 +1110,7 @@ _LIBCPP_FUNC_VIS extern "C" void __sanit - defined(__Fuchsia__) || \ - defined(__NetBSD__) || \ - defined(__linux__) || \ -+ defined(__GNU__) || \ - defined(__APPLE__) || \ - defined(__CloudABI__) || \ - defined(__sun__) || \ diff --git a/debian/patches/hurd/D54378-hurd-triple.diff b/debian/patches/hurd/D54378-hurd-triple.diff deleted file mode 100644 index 2f57a2a1..00000000 --- a/debian/patches/hurd/D54378-hurd-triple.diff +++ /dev/null @@ -1,74 +0,0 @@ -Add Hurd triplet to LLVMSupport - -This introduces GNU Hurd as a new target OS. - -https://reviews.llvm.org/D54378 - -Index: llvm-toolchain-7-7.0.1~+rc2/include/llvm/ADT/Triple.h -=================================================================== ---- llvm-toolchain-7-7.0.1~+rc2.orig/include/llvm/ADT/Triple.h -+++ llvm-toolchain-7-7.0.1~+rc2/include/llvm/ADT/Triple.h -@@ -182,7 +182,8 @@ public: - Mesa3D, - Contiki, - AMDPAL, // AMD PAL Runtime -- LastOSType = AMDPAL -+ Hurd, // GNU/Hurd -+ LastOSType = Hurd - }; - enum EnvironmentType { - UnknownEnvironment, -@@ -578,9 +579,15 @@ public: - return getOS() == Triple::KFreeBSD; - } - -+ /// Tests whether the OS is Hurd. -+ bool isOSHurd() const { -+ return getOS() == Triple::Hurd; -+ } -+ - /// Tests whether the OS uses glibc. - bool isOSGlibc() const { -- return (getOS() == Triple::Linux || getOS() == Triple::KFreeBSD) && -+ return (getOS() == Triple::Linux || getOS() == Triple::KFreeBSD || -+ getOS() == Triple::Hurd) && - !isAndroid(); - } - -Index: llvm-toolchain-7-7.0.1~+rc2/lib/Support/Triple.cpp -=================================================================== ---- llvm-toolchain-7-7.0.1~+rc2.orig/lib/Support/Triple.cpp -+++ llvm-toolchain-7-7.0.1~+rc2/lib/Support/Triple.cpp -@@ -209,6 +209,7 @@ StringRef Triple::getOSTypeName(OSType K - case Mesa3D: return "mesa3d"; - case Contiki: return "contiki"; - case AMDPAL: return "amdpal"; -+ case Hurd: return "hurd"; - } - - llvm_unreachable("Invalid OSType"); -@@ -502,6 +503,7 @@ static Triple::OSType parseOS(StringRef - .StartsWith("mesa3d", Triple::Mesa3D) - .StartsWith("contiki", Triple::Contiki) - .StartsWith("amdpal", Triple::AMDPAL) -+ .StartsWith("hurd", Triple::Hurd) - .Default(Triple::UnknownOS); - } - -Index: llvm/unittests/ADT/TripleTest.cpp -=================================================================== ---- llvm/unittests/ADT/TripleTest.cpp (révision 346226) -+++ llvm/unittests/ADT/TripleTest.cpp (copie de travail) -@@ -93,6 +93,12 @@ - EXPECT_EQ(Triple::Contiki, T.getOS()); - EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); - -+ T = Triple("i386-pc-hurd-gnu"); -+ EXPECT_EQ(Triple::x86, T.getArch()); -+ EXPECT_EQ(Triple::PC, T.getVendor()); -+ EXPECT_EQ(Triple::Hurd, T.getOS()); -+ EXPECT_EQ(Triple::GNU, T.getEnvironment()); -+ - T = Triple("x86_64-pc-linux-gnu"); - EXPECT_EQ(Triple::x86_64, T.getArch()); - EXPECT_EQ(Triple::PC, T.getVendor()); diff --git a/debian/patches/hurd/D54379-hurd-triple-clang.diff b/debian/patches/hurd/D54379-hurd-triple-clang.diff deleted file mode 100644 index c55fc548..00000000 --- a/debian/patches/hurd/D54379-hurd-triple-clang.diff +++ /dev/null @@ -1,413 +0,0 @@ -Add Hurd toolchain support to Clang - -https://reviews.llvm.org/D54379 - -Index: llvm-toolchain-7-7.0.1~+rc2/clang/lib/Basic/Targets/OSTargets.h -=================================================================== ---- llvm-toolchain-7-7.0.1~+rc2.orig/clang/lib/Basic/Targets/OSTargets.h -+++ llvm-toolchain-7-7.0.1~+rc2/clang/lib/Basic/Targets/OSTargets.h -@@ -270,6 +270,29 @@ public: - } - }; - -+// Hurd target -+template -+class LLVM_LIBRARY_VISIBILITY HurdTargetInfo : public OSTargetInfo { -+protected: -+ void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, -+ MacroBuilder &Builder) const override { -+ // Linux defines; list based off of gcc output -+ DefineStd(Builder, "unix", Opts); -+ Builder.defineMacro("__GNU__"); -+ Builder.defineMacro("__gnu_hurd__"); -+ Builder.defineMacro("__MACH__"); -+ Builder.defineMacro("__GLIBC__"); -+ Builder.defineMacro("__ELF__"); -+ if (Opts.POSIXThreads) -+ Builder.defineMacro("_REENTRANT"); -+ if (Opts.CPlusPlus) -+ Builder.defineMacro("_GNU_SOURCE"); -+ } -+public: -+ HurdTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts) -+ : OSTargetInfo(Triple, Opts) {} -+}; -+ - // Minix Target - template - class LLVM_LIBRARY_VISIBILITY MinixTargetInfo : public OSTargetInfo { -Index: llvm-toolchain-7-7.0.1~+rc2/clang/lib/Basic/Targets.cpp -=================================================================== ---- llvm-toolchain-7-7.0.1~+rc2.orig/clang/lib/Basic/Targets.cpp -+++ llvm-toolchain-7-7.0.1~+rc2/clang/lib/Basic/Targets.cpp -@@ -495,6 +495,8 @@ TargetInfo *AllocateTarget(const llvm::T - return new NaClTargetInfo(Triple, Opts); - case llvm::Triple::ELFIAMCU: - return new MCUX86_32TargetInfo(Triple, Opts); -+ case llvm::Triple::Hurd: -+ return new HurdTargetInfo(Triple, Opts); - default: - return new X86_32TargetInfo(Triple, Opts); - } -Index: llvm-toolchain-7-7.0.1~+rc2/clang/lib/Driver/CMakeLists.txt -=================================================================== ---- llvm-toolchain-7-7.0.1~+rc2.orig/clang/lib/Driver/CMakeLists.txt -+++ llvm-toolchain-7-7.0.1~+rc2/clang/lib/Driver/CMakeLists.txt -@@ -47,6 +47,7 @@ add_clang_library(clangDriver - ToolChains/Haiku.cpp - ToolChains/HIP.cpp - ToolChains/Hexagon.cpp -+ ToolChains/Hurd.cpp - ToolChains/Linux.cpp - ToolChains/MipsLinux.cpp - ToolChains/MinGW.cpp -Index: llvm-toolchain-7-7.0.1~+rc2/clang/lib/Driver/Driver.cpp -=================================================================== ---- llvm-toolchain-7-7.0.1~+rc2.orig/clang/lib/Driver/Driver.cpp -+++ llvm-toolchain-7-7.0.1~+rc2/clang/lib/Driver/Driver.cpp -@@ -26,6 +26,7 @@ - #include "ToolChains/HIP.h" - #include "ToolChains/Haiku.h" - #include "ToolChains/Hexagon.h" -+#include "ToolChains/Hurd.h" - #include "ToolChains/Lanai.h" - #include "ToolChains/Linux.h" - #include "ToolChains/MSVC.h" -@@ -399,6 +400,13 @@ static llvm::Triple computeTargetTriple( - - llvm::Triple Target(llvm::Triple::normalize(TargetTriple)); - -+ // GNU/Hurd's triple should have been -hurd-gnu*, but was historically made -+ // -gnu* only, and we can not change this, so we have to detect that case as -+ // being the Hurd OS. -+ if (TargetTriple.find("-unknown-gnu") != StringRef::npos || -+ TargetTriple.find("-pc-gnu") != StringRef::npos) -+ Target.setOSName("hurd"); -+ - // Handle Apple-specific options available here. - if (Target.isOSBinFormatMachO()) { - // If an explicit Darwin arch name is given, that trumps all. -@@ -4374,6 +4382,9 @@ const ToolChain &Driver::getToolChain(co - case llvm::Triple::Contiki: - TC = llvm::make_unique(*this, Target, Args); - break; -+ case llvm::Triple::Hurd: -+ TC = llvm::make_unique(*this, Target, Args); -+ break; - default: - // Of these targets, Hexagon is the only one that might have - // an OS of Linux, in which case it got handled above already. -Index: llvm-toolchain-7-7.0.1~+rc2/clang/lib/Driver/ToolChains/Clang.cpp -=================================================================== ---- llvm-toolchain-7-7.0.1~+rc2.orig/clang/lib/Driver/ToolChains/Clang.cpp -+++ llvm-toolchain-7-7.0.1~+rc2/clang/lib/Driver/ToolChains/Clang.cpp -@@ -528,7 +528,7 @@ static bool useFramePointerForTargetByDe - return !areOptimizationsEnabled(Args); - } - -- if (Triple.isOSLinux() || Triple.getOS() == llvm::Triple::CloudABI) { -+ if (Triple.isOSLinux() || Triple.getOS() == llvm::Triple::CloudABI || Triple.isOSHurd()) { - switch (Triple.getArch()) { - // Don't use a frame pointer on linux if optimizing for certain targets. - case llvm::Triple::mips64: -Index: llvm-toolchain-7-7.0.1~+rc2/clang/lib/Driver/ToolChains/Gnu.cpp -=================================================================== ---- llvm-toolchain-7-7.0.1~+rc2.orig/clang/lib/Driver/ToolChains/Gnu.cpp -+++ llvm-toolchain-7-7.0.1~+rc2/clang/lib/Driver/ToolChains/Gnu.cpp -@@ -1846,7 +1846,9 @@ void Generic_GCC::GCCInstallationDetecto - "i686-linux-gnu", "i686-pc-linux-gnu", "i486-linux-gnu", - "i386-linux-gnu", "i386-redhat-linux6E", "i686-redhat-linux", - "i586-redhat-linux", "i386-redhat-linux", "i586-suse-linux", -- "i486-slackware-linux", "i686-montavista-linux", "i586-linux-gnu"}; -+ "i486-slackware-linux", "i686-montavista-linux", "i586-linux-gnu", -+ "i386-gnu", "i486-gnu", "i586-gnu", -+ "i686-gnu"}; - - static const char *const MIPSLibDirs[] = {"/lib"}; - static const char *const MIPSTriples[] = {"mips-linux-gnu", "mips-mti-linux", -@@ -2210,6 +2212,9 @@ void Generic_GCC::GCCInstallationDetecto - // triple. - {"i386-linux-gnu/gcc/" + CandidateTriple.str(), "../../..", - (TargetArch == llvm::Triple::x86 && -+ TargetTriple.getOS() != llvm::Triple::Solaris)}, -+ {"i386-gnu/gcc/" + CandidateTriple.str(), "../../..", -+ (TargetArch == llvm::Triple::x86 && - TargetTriple.getOS() != llvm::Triple::Solaris)}}; - - for (auto &Suffix : Suffixes) { -Index: llvm-toolchain-7-7.0.1~+rc2/clang/lib/Driver/ToolChains/Hurd.cpp -=================================================================== ---- /dev/null -+++ llvm-toolchain-7-7.0.1~+rc2/clang/lib/Driver/ToolChains/Hurd.cpp -@@ -0,0 +1,191 @@ -+//===--- Hurd.cpp - Hurd ToolChain Implementations --------*- C++ -*-===// -+// -+// The LLVM Compiler Infrastructure -+// -+// This file is distributed under the University of Illinois Open Source -+// License. See LICENSE.TXT for details. -+// -+//===----------------------------------------------------------------------===// -+ -+#include "Hurd.h" -+#include "CommonArgs.h" -+#include "clang/Basic/VirtualFileSystem.h" -+#include "clang/Config/config.h" -+#include "clang/Driver/Driver.h" -+#include "clang/Driver/Options.h" -+#include "llvm/Support/Path.h" -+ -+using namespace clang::driver; -+using namespace clang::driver::toolchains; -+using namespace clang; -+using namespace llvm::opt; -+ -+using tools::addPathIfExists; -+ -+/// Get our best guess at the multiarch triple for a target. -+/// -+/// Debian-based systems are starting to use a multiarch setup where they use -+/// a target-triple directory in the library and header search paths. -+/// Unfortunately, this triple does not align with the vanilla target triple, -+/// so we provide a rough mapping here. -+static std::string getMultiarchTriple(const Driver &D, -+ const llvm::Triple &TargetTriple, -+ StringRef SysRoot) { -+ // For most architectures, just use whatever we have rather than trying to be -+ // clever. -+ switch (TargetTriple.getArch()) { -+ default: -+ break; -+ -+ // We use the existence of '/lib/' as a directory to detect some -+ // common hurd triples that don't quite match the Clang triple for both -+ // 32-bit and 64-bit targets. Multiarch fixes its install triples to these -+ // regardless of what the actual target triple is. -+ case llvm::Triple::x86: -+ if (D.getVFS().exists(SysRoot + "/lib/i386-gnu")) -+ return "i386-gnu"; -+ break; -+ } -+ -+ return TargetTriple.str(); -+} -+ -+static StringRef getOSLibDir(const llvm::Triple &Triple, const ArgList &Args) { -+ // It happens that only x86 and PPC use the 'lib32' variant of oslibdir, and -+ // using that variant while targeting other architectures causes problems -+ // because the libraries are laid out in shared system roots that can't cope -+ // with a 'lib32' library search path being considered. So we only enable -+ // them when we know we may need it. -+ // -+ // FIXME: This is a bit of a hack. We should really unify this code for -+ // reasoning about oslibdir spellings with the lib dir spellings in the -+ // GCCInstallationDetector, but that is a more significant refactoring. -+ -+ if (Triple.getArch() == llvm::Triple::x86) -+ return "lib32"; -+ -+ return Triple.isArch32Bit() ? "lib" : "lib64"; -+} -+ -+Hurd::Hurd(const Driver &D, const llvm::Triple &Triple, -+ const ArgList &Args) -+ : Generic_ELF(D, Triple, Args) { -+ std::string SysRoot = computeSysRoot(); -+ path_list &Paths = getFilePaths(); -+ -+ const std::string OSLibDir = getOSLibDir(Triple, Args); -+ const std::string MultiarchTriple = getMultiarchTriple(D, Triple, SysRoot); -+ -+ // Similar to the logic for GCC above, if we currently running Clang inside -+ // of the requested system root, add its parent library paths to -+ // those searched. -+ // FIXME: It's not clear whether we should use the driver's installed -+ // directory ('Dir' below) or the ResourceDir. -+ if (StringRef(D.Dir).startswith(SysRoot)) { -+ addPathIfExists(D, D.Dir + "/../lib/" + MultiarchTriple, Paths); -+ addPathIfExists(D, D.Dir + "/../" + OSLibDir, Paths); -+ } -+ -+ addPathIfExists(D, SysRoot + "/lib/" + MultiarchTriple, Paths); -+ addPathIfExists(D, SysRoot + "/lib/../" + OSLibDir, Paths); -+ -+ addPathIfExists(D, SysRoot + "/usr/lib/" + MultiarchTriple, Paths); -+ addPathIfExists(D, SysRoot + "/usr/lib/../" + OSLibDir, Paths); -+ -+ // If we are currently running Clang inside of the requested system root, add -+ // its parent library path to those searched. -+ // FIXME: It's not clear whether we should use the driver's installed -+ // directory ('Dir' below) or the ResourceDir. -+ if (StringRef(D.Dir).startswith(SysRoot)) -+ addPathIfExists(D, D.Dir + "/../lib", Paths); -+ -+ addPathIfExists(D, SysRoot + "/lib", Paths); -+ addPathIfExists(D, SysRoot + "/usr/lib", Paths); -+} -+ -+bool Hurd::HasNativeLLVMSupport() const { return true; } -+ -+Tool *Hurd::buildLinker() const { return new tools::gnutools::Linker(*this); } -+ -+Tool *Hurd::buildAssembler() const { -+ return new tools::gnutools::Assembler(*this); -+} -+ -+std::string Hurd::computeSysRoot() const { -+ if (!getDriver().SysRoot.empty()) -+ return getDriver().SysRoot; -+ -+ return std::string(); -+} -+ -+std::string Hurd::getDynamicLinker(const ArgList &Args) const { -+ const llvm::Triple::ArchType Arch = getArch(); -+ -+ if (Arch == llvm::Triple::x86) -+ return "/lib/ld.so"; -+ -+ llvm_unreachable("unsupported architecture"); -+} -+ -+void Hurd::AddClangSystemIncludeArgs(const ArgList &DriverArgs, -+ ArgStringList &CC1Args) const { -+ const Driver &D = getDriver(); -+ std::string SysRoot = computeSysRoot(); -+ -+ if (DriverArgs.hasArg(clang::driver::options::OPT_nostdinc)) -+ return; -+ -+ if (!DriverArgs.hasArg(options::OPT_nostdlibinc)) -+ addSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/local/include"); -+ -+ if (!DriverArgs.hasArg(options::OPT_nobuiltininc)) { -+ SmallString<128> P(D.ResourceDir); -+ llvm::sys::path::append(P, "include"); -+ addSystemInclude(DriverArgs, CC1Args, P); -+ } -+ -+ if (DriverArgs.hasArg(options::OPT_nostdlibinc)) -+ return; -+ -+ // Check for configure-time C include directories. -+ StringRef CIncludeDirs(C_INCLUDE_DIRS); -+ if (CIncludeDirs != "") { -+ SmallVector dirs; -+ CIncludeDirs.split(dirs, ":"); -+ for (StringRef dir : dirs) { -+ StringRef Prefix = -+ llvm::sys::path::is_absolute(dir) ? StringRef(SysRoot) : ""; -+ addExternCSystemInclude(DriverArgs, CC1Args, Prefix + dir); -+ } -+ return; -+ } -+ -+ // Lacking those, try to detect the correct set of system includes for the -+ // target triple. -+ -+ const StringRef X86MultiarchIncludeDirs[] = { -+ "/usr/include/i386-gnu"}; -+ -+ ArrayRef MultiarchIncludeDirs; -+ switch (getTriple().getArch()) { -+ case llvm::Triple::x86: -+ MultiarchIncludeDirs = X86MultiarchIncludeDirs; -+ break; -+ default: -+ break; -+ } -+ -+ for (StringRef Dir : MultiarchIncludeDirs) { -+ if (D.getVFS().exists(SysRoot + Dir)) { -+ addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + Dir); -+ break; -+ } -+ } -+ -+ // Add an include of '/include' directly. This isn't provided by default by -+ // system GCCs, but is often used with cross-compiling GCCs, and harmless to -+ // add even when Clang is acting as-if it were a system compiler. -+ addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + "/include"); -+ -+ addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/include"); -+} -Index: llvm-toolchain-7-7.0.1~+rc2/clang/lib/Driver/ToolChains/Hurd.h -=================================================================== ---- /dev/null -+++ llvm-toolchain-7-7.0.1~+rc2/clang/lib/Driver/ToolChains/Hurd.h -@@ -0,0 +1,46 @@ -+//===--- Hurd.h - Hurd ToolChain Implementations ----------*- C++ -*-===// -+// -+// The LLVM Compiler Infrastructure -+// -+// This file is distributed under the University of Illinois Open Source -+// License. See LICENSE.TXT for details. -+// -+//===----------------------------------------------------------------------===// -+ -+#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_Hurd_H -+#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_Hurd_H -+ -+#include "Gnu.h" -+#include "clang/Driver/ToolChain.h" -+ -+namespace clang { -+namespace driver { -+namespace toolchains { -+ -+class LLVM_LIBRARY_VISIBILITY Hurd : public Generic_ELF { -+public: -+ Hurd(const Driver &D, const llvm::Triple &Triple, -+ const llvm::opt::ArgList &Args); -+ -+ bool HasNativeLLVMSupport() const override; -+ -+ void -+ AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs, -+ llvm::opt::ArgStringList &CC1Args) const override; -+ -+ virtual std::string computeSysRoot() const; -+ -+ virtual std::string getDynamicLinker(const llvm::opt::ArgList &Args) const; -+ -+ std::vector ExtraOpts; -+ -+protected: -+ Tool *buildAssembler() const override; -+ Tool *buildLinker() const override; -+}; -+ -+} // end namespace toolchains -+} // end namespace driver -+} // end namespace clang -+ -+#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_Hurd_H -Index: llvm-toolchain-7-7.0.1~+rc2/clang/lib/Frontend/InitHeaderSearch.cpp -=================================================================== ---- llvm-toolchain-7-7.0.1~+rc2.orig/clang/lib/Frontend/InitHeaderSearch.cpp -+++ llvm-toolchain-7-7.0.1~+rc2/clang/lib/Frontend/InitHeaderSearch.cpp -@@ -260,6 +260,7 @@ void InitHeaderSearch::AddDefaultCInclud - - switch (os) { - case llvm::Triple::Linux: -+ case llvm::Triple::Hurd: - case llvm::Triple::Solaris: - llvm_unreachable("Include management is handled in the driver."); - -@@ -412,6 +413,7 @@ - - switch (os) { - case llvm::Triple::Linux: -+ case llvm::Triple::Hurd: - case llvm::Triple::Solaris: - llvm_unreachable("Include management is handled in the driver."); - break; -@@ -460,6 +462,7 @@ - break; // Everything else continues to use this routine's logic. - - case llvm::Triple::Linux: -+ case llvm::Triple::Hurd: - case llvm::Triple::Solaris: - return; - - diff --git a/debian/patches/hurd/hurd-cxx-paths.diff b/debian/patches/hurd/hurd-cxx-paths.diff deleted file mode 100644 index a3068846..00000000 --- a/debian/patches/hurd/hurd-cxx-paths.diff +++ /dev/null @@ -1,281 +0,0 @@ -This should be factorized with Linux.cpp and the GNU/kFreeBSD case. - -Index: llvm-toolchain-7_7.0.1~svn347285/clang/lib/Driver/ToolChains/Hurd.cpp -=================================================================== ---- llvm-toolchain-7_7.0.1~svn347285.orig/clang/lib/Driver/ToolChains/Hurd.cpp -+++ llvm-toolchain-7_7.0.1~svn347285/clang/lib/Driver/ToolChains/Hurd.cpp -@@ -67,15 +67,102 @@ static StringRef getOSLibDir(const llvm: - return Triple.isArch32Bit() ? "lib" : "lib64"; - } - -+static void addMultilibsFilePaths(const Driver &D, const MultilibSet &Multilibs, -+ const Multilib &Multilib, -+ StringRef InstallPath, -+ ToolChain::path_list &Paths) { -+ if (const auto &PathsCallback = Multilibs.filePathsCallback()) -+ for (const auto &Path : PathsCallback(Multilib)) -+ addPathIfExists(D, InstallPath + Path, Paths); -+} -+ - Hurd::Hurd(const Driver &D, const llvm::Triple &Triple, - const ArgList &Args) - : Generic_ELF(D, Triple, Args) { -+ GCCInstallation.init(Triple, Args); -+ Multilibs = GCCInstallation.getMultilibs(); - std::string SysRoot = computeSysRoot(); -+ -+ // Cross-compiling binutils and GCC installations (vanilla and openSUSE at -+ // least) put various tools in a triple-prefixed directory off of the parent -+ // of the GCC installation. We use the GCC triple here to ensure that we end -+ // up with tools that support the same amount of cross compiling as the -+ // detected GCC installation. For example, if we find a GCC installation -+ // targeting x86_64, but it is a bi-arch GCC installation, it can also be -+ // used to target i386. -+ // FIXME: This seems unlikely to be Linux- or Hurd-specific. -+ ToolChain::path_list &PPaths = getProgramPaths(); -+ PPaths.push_back(Twine(GCCInstallation.getParentLibPath() + "/../" + -+ GCCInstallation.getTriple().str() + "/bin") -+ .str()); -+ -+#ifdef ENABLE_LINKER_BUILD_ID -+ ExtraOpts.push_back("--build-id"); -+#endif -+ -+ // The selection of paths to try here is designed to match the patterns which -+ // the GCC driver itself uses, as this is part of the GCC-compatible driver. -+ // This was determined by running GCC in a fake filesystem, creating all -+ // possible permutations of these directories, and seeing which ones it added -+ // to the link paths. - path_list &Paths = getFilePaths(); - - const std::string OSLibDir = getOSLibDir(Triple, Args); - const std::string MultiarchTriple = getMultiarchTriple(D, Triple, SysRoot); - -+ // Add the multilib suffixed paths where they are available. -+ if (GCCInstallation.isValid()) { -+ const llvm::Triple &GCCTriple = GCCInstallation.getTriple(); -+ const std::string &LibPath = GCCInstallation.getParentLibPath(); -+ const Multilib &Multilib = GCCInstallation.getMultilib(); -+ const MultilibSet &Multilibs = GCCInstallation.getMultilibs(); -+ -+ // Add toolchain / multilib specific file paths. -+ addMultilibsFilePaths(D, Multilibs, Multilib, -+ GCCInstallation.getInstallPath(), Paths); -+ -+ // Sourcery CodeBench MIPS toolchain holds some libraries under -+ // a biarch-like suffix of the GCC installation. -+ addPathIfExists(D, GCCInstallation.getInstallPath() + Multilib.gccSuffix(), -+ Paths); -+ -+ // GCC cross compiling toolchains will install target libraries which ship -+ // as part of the toolchain under // rather than as -+ // any part of the GCC installation in -+ // //gcc//. This decision is somewhat -+ // debatable, but is the reality today. We need to search this tree even -+ // when we have a sysroot somewhere else. It is the responsibility of -+ // whomever is doing the cross build targeting a sysroot using a GCC -+ // installation that is *not* within the system root to ensure two things: -+ // -+ // 1) Any DSOs that are linked in from this tree or from the install path -+ // above must be present on the system root and found via an -+ // appropriate rpath. -+ // 2) There must not be libraries installed into -+ // // unless they should be preferred over -+ // those within the system root. -+ // -+ // Note that this matches the GCC behavior. See the below comment for where -+ // Clang diverges from GCC's behavior. -+ addPathIfExists(D, LibPath + "/../" + GCCTriple.str() + "/lib/../" + -+ OSLibDir + Multilib.osSuffix(), -+ Paths); -+ -+ // If the GCC installation we found is inside of the sysroot, we want to -+ // prefer libraries installed in the parent prefix of the GCC installation. -+ // It is important to *not* use these paths when the GCC installation is -+ // outside of the system root as that can pick up unintended libraries. -+ // This usually happens when there is an external cross compiler on the -+ // host system, and a more minimal sysroot available that is the target of -+ // the cross. Note that GCC does include some of these directories in some -+ // configurations but this seems somewhere between questionable and simply -+ // a bug. -+ if (StringRef(LibPath).startswith(SysRoot)) { -+ addPathIfExists(D, LibPath + "/" + MultiarchTriple, Paths); -+ addPathIfExists(D, LibPath + "/../" + OSLibDir, Paths); -+ } -+ } -+ - // Similar to the logic for GCC above, if we currently running Clang inside - // of the requested system root, add its parent library paths to - // those searched. -@@ -92,8 +179,40 @@ Hurd::Hurd(const Driver &D, const llvm:: - addPathIfExists(D, SysRoot + "/usr/lib/" + MultiarchTriple, Paths); - addPathIfExists(D, SysRoot + "/usr/lib/../" + OSLibDir, Paths); - -- // If we are currently running Clang inside of the requested system root, add -- // its parent library path to those searched. -+ // Try walking via the GCC triple path in case of biarch or multiarch GCC -+ // installations with strange symlinks. -+ if (GCCInstallation.isValid()) { -+ addPathIfExists(D, -+ SysRoot + "/usr/lib/" + GCCInstallation.getTriple().str() + -+ "/../../" + OSLibDir, -+ Paths); -+ -+ // Add the 'other' biarch variant path -+ Multilib BiarchSibling; -+ if (GCCInstallation.getBiarchSibling(BiarchSibling)) { -+ addPathIfExists(D, GCCInstallation.getInstallPath() + -+ BiarchSibling.gccSuffix(), -+ Paths); -+ } -+ -+ // See comments above on the multilib variant for details of why this is -+ // included even from outside the sysroot. -+ const std::string &LibPath = GCCInstallation.getParentLibPath(); -+ const llvm::Triple &GCCTriple = GCCInstallation.getTriple(); -+ const Multilib &Multilib = GCCInstallation.getMultilib(); -+ addPathIfExists(D, LibPath + "/../" + GCCTriple.str() + "/lib" + -+ Multilib.osSuffix(), -+ Paths); -+ -+ // See comments above on the multilib variant for details of why this is -+ // only included from within the sysroot. -+ if (StringRef(LibPath).startswith(SysRoot)) -+ addPathIfExists(D, LibPath, Paths); -+ } -+ -+ // Similar to the logic for GCC above, if we are currently running Clang -+ // inside of the requested system root, add its parent library path to those -+ // searched. - // FIXME: It's not clear whether we should use the driver's installed - // directory ('Dir' below) or the ResourceDir. - if (StringRef(D.Dir).startswith(SysRoot)) -@@ -163,6 +282,16 @@ void Hurd::AddClangSystemIncludeArgs(con - // Lacking those, try to detect the correct set of system includes for the - // target triple. - -+ // Add include directories specific to the selected multilib set and multilib. -+ if (GCCInstallation.isValid()) { -+ const auto &Callback = Multilibs.includeDirsCallback(); -+ if (Callback) { -+ for (const auto &Path : Callback(GCCInstallation.getMultilib())) -+ addExternCSystemIncludeIfExists( -+ DriverArgs, CC1Args, GCCInstallation.getInstallPath() + Path); -+ } -+ } -+ - const StringRef X86MultiarchIncludeDirs[] = { - "/usr/include/i386-gnu"}; - -@@ -189,3 +318,94 @@ void Hurd::AddClangSystemIncludeArgs(con - - addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/include"); - } -+ -+static std::string DetectLibcxxIncludePath(StringRef base) { -+ std::error_code EC; -+ int MaxVersion = 0; -+ std::string MaxVersionString = ""; -+ for (llvm::sys::fs::directory_iterator LI(base, EC), LE; !EC && LI != LE; -+ LI = LI.increment(EC)) { -+ StringRef VersionText = llvm::sys::path::filename(LI->path()); -+ int Version; -+ if (VersionText[0] == 'v' && -+ !VersionText.slice(1, StringRef::npos).getAsInteger(10, Version)) { -+ if (Version > MaxVersion) { -+ MaxVersion = Version; -+ MaxVersionString = VersionText; -+ } -+ } -+ } -+ return MaxVersion ? (base + "/" + MaxVersionString).str() : ""; -+} -+ -+void Hurd::addLibCxxIncludePaths(const llvm::opt::ArgList &DriverArgs, -+ llvm::opt::ArgStringList &CC1Args) const { -+ const std::string& SysRoot = computeSysRoot(); -+ const std::string LibCXXIncludePathCandidates[] = { -+ DetectLibcxxIncludePath(getDriver().ResourceDir + "/include/c++"), -+ DetectLibcxxIncludePath(getDriver().Dir + "/../include/c++"), -+ // If this is a development, non-installed, clang, libcxx will -+ // not be found at ../include/c++ but it likely to be found at -+ // one of the following two locations: -+ DetectLibcxxIncludePath(SysRoot + "/usr/local/include/c++"), -+ DetectLibcxxIncludePath(SysRoot + "/usr/include/c++") }; -+ for (const auto &IncludePath : LibCXXIncludePathCandidates) { -+ if (IncludePath.empty() || !getVFS().exists(IncludePath)) -+ continue; -+ // Use the first candidate that exists. -+ addSystemInclude(DriverArgs, CC1Args, IncludePath); -+ return; -+ } -+} -+ -+void Hurd::addLibStdCxxIncludePaths(const llvm::opt::ArgList &DriverArgs, -+ llvm::opt::ArgStringList &CC1Args) const { -+ // We need a detected GCC installation on Hurd to provide libstdc++'s -+ // headers. -+ if (!GCCInstallation.isValid()) -+ return; -+ -+ // By default, look for the C++ headers in an include directory adjacent to -+ // the lib directory of the GCC installation. Note that this is expect to be -+ // equivalent to '/usr/include/c++/X.Y' in almost all cases. -+ StringRef LibDir = GCCInstallation.getParentLibPath(); -+ StringRef InstallDir = GCCInstallation.getInstallPath(); -+ StringRef TripleStr = GCCInstallation.getTriple().str(); -+ const Multilib &Multilib = GCCInstallation.getMultilib(); -+ const std::string GCCMultiarchTriple = getMultiarchTriple( -+ getDriver(), GCCInstallation.getTriple(), getDriver().SysRoot); -+ const std::string TargetMultiarchTriple = -+ getMultiarchTriple(getDriver(), getTriple(), getDriver().SysRoot); -+ const GCCVersion &Version = GCCInstallation.getVersion(); -+ -+ // The primary search for libstdc++ supports multiarch variants. -+ if (addLibStdCXXIncludePaths(LibDir.str() + "/../include", -+ "/c++/" + Version.Text, TripleStr, -+ GCCMultiarchTriple, TargetMultiarchTriple, -+ Multilib.includeSuffix(), DriverArgs, CC1Args)) -+ return; -+ -+ // Otherwise, fall back on a bunch of options which don't use multiarch -+ // layouts for simplicity. -+ const std::string LibStdCXXIncludePathCandidates[] = { -+ // Gentoo is weird and places its headers inside the GCC install, -+ // so if the first attempt to find the headers fails, try these patterns. -+ InstallDir.str() + "/include/g++-v" + Version.Text, -+ InstallDir.str() + "/include/g++-v" + Version.MajorStr + "." + -+ Version.MinorStr, -+ InstallDir.str() + "/include/g++-v" + Version.MajorStr, -+ // Android standalone toolchain has C++ headers in yet another place. -+ LibDir.str() + "/../" + TripleStr.str() + "/include/c++/" + Version.Text, -+ // Freescale SDK C++ headers are directly in /usr/include/c++, -+ // without a subdirectory corresponding to the gcc version. -+ LibDir.str() + "/../include/c++", -+ }; -+ -+ for (const auto &IncludePath : LibStdCXXIncludePathCandidates) { -+ if (addLibStdCXXIncludePaths(IncludePath, /*Suffix*/ "", TripleStr, -+ /*GCCMultiarchTriple*/ "", -+ /*TargetMultiarchTriple*/ "", -+ Multilib.includeSuffix(), DriverArgs, CC1Args)) -+ break; -+ } -+} -Index: llvm-toolchain-7_7.0.1~svn347285/clang/lib/Driver/ToolChains/Hurd.h -=================================================================== ---- llvm-toolchain-7_7.0.1~svn347285.orig/clang/lib/Driver/ToolChains/Hurd.h -+++ llvm-toolchain-7_7.0.1~svn347285/clang/lib/Driver/ToolChains/Hurd.h -@@ -27,6 +27,12 @@ public: - void - AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs, - llvm::opt::ArgStringList &CC1Args) const override; -+ void addLibCxxIncludePaths( -+ const llvm::opt::ArgList &DriverArgs, -+ llvm::opt::ArgStringList &CC1Args) const override; -+ void addLibStdCxxIncludePaths( -+ const llvm::opt::ArgList &DriverArgs, -+ llvm::opt::ArgStringList &CC1Args) const override; - - virtual std::string computeSysRoot() const; - diff --git a/debian/patches/hurd/hurd-lib_Support_Unix_Path.inc.diff b/debian/patches/hurd/hurd-lib_Support_Unix_Path.inc.diff deleted file mode 100644 index 372d535c..00000000 --- a/debian/patches/hurd/hurd-lib_Support_Unix_Path.inc.diff +++ /dev/null @@ -1,43 +0,0 @@ -Index: llvm-toolchain-7-7/lib/Support/Unix/Path.inc -=================================================================== ---- llvm-toolchain-7-7.orig/lib/Support/Unix/Path.inc -+++ llvm-toolchain-7-7/lib/Support/Unix/Path.inc -@@ -83,7 +83,7 @@ - #define STATVFS_F_FRSIZE(vfs) static_cast(vfs.f_bsize) - #endif - --#if defined(__NetBSD__) -+#if defined(__NetBSD__) || defined(__GNU__) - #define STATVFS_F_FLAG(vfs) (vfs).f_flag - #else - #define STATVFS_F_FLAG(vfs) (vfs).f_flags -@@ -99,7 +99,7 @@ const file_t kInvalidFile = -1; - - #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || \ - defined(__minix) || defined(__FreeBSD_kernel__) || defined(__linux__) || \ -- defined(__CYGWIN__) || defined(__DragonFly__) || defined(_AIX) -+ defined(__CYGWIN__) || defined(__DragonFly__) || defined(_AIX) || defined(__GNU__) - static int - test_dir(char ret[PATH_MAX], const char *dir, const char *bin) - { -@@ -348,7 +348,7 @@ std::error_code remove(const Twine &path - } - - static bool is_local_impl(struct STATVFS &Vfs) { --#if defined(__linux__) -+#if defined(__linux__) || defined(__GNU__) - #ifndef NFS_SUPER_MAGIC - #define NFS_SUPER_MAGIC 0x6969 - #endif -@@ -358,7 +358,11 @@ static bool is_local_impl(struct STATVFS - #ifndef CIFS_MAGIC_NUMBER - #define CIFS_MAGIC_NUMBER 0xFF534D42 - #endif -+#ifdef __GNU__ -+ switch ((uint32_t)Vfs.__f_type) { -+#else - switch ((uint32_t)Vfs.f_type) { -+#endif - case NFS_SUPER_MAGIC: - case SMB_SUPER_MAGIC: - case CIFS_MAGIC_NUMBER: diff --git a/debian/patches/hurd/hurd-tools_llvm-shlib_CMakeLists.txt.diff b/debian/patches/hurd/hurd-tools_llvm-shlib_CMakeLists.txt.diff deleted file mode 100644 index 89d34fc3..00000000 --- a/debian/patches/hurd/hurd-tools_llvm-shlib_CMakeLists.txt.diff +++ /dev/null @@ -1,12 +0,0 @@ -Index: llvm-toolchain-7-7/tools/llvm-shlib/CMakeLists.txt -=================================================================== ---- llvm-toolchain-7-7.orig/tools/llvm-shlib/CMakeLists.txt -+++ llvm-toolchain-7-7/tools/llvm-shlib/CMakeLists.txt -@@ -40,6 +40,7 @@ set_property(TARGET LLVM PROPERTY VERSIO - list(REMOVE_DUPLICATES LIB_NAMES) - if(("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") OR (MINGW) OR (HAIKU) - OR ("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD") -+ OR ("${CMAKE_SYSTEM_NAME}" STREQUAL "GNU") - OR ("${CMAKE_SYSTEM_NAME}" STREQUAL "OpenBSD") - OR ("${CMAKE_SYSTEM_NAME}" STREQUAL "Fuchsia") - OR ("${CMAKE_SYSTEM_NAME}" STREQUAL "DragonFly")